/* SOLICITUD DE DATOS */ #include <stdlib.h> #include <string.h> #include <stdio.h> struct XY { int x, y; struct XY *Sig; }; struct Todo { struct XY *Fig; struct Todo *Sig; }; void Dibuja( struct Todo *Figuras ) { struct XY *Figura = NULL; int Cont = 0; char CADENA[10]; while( Figuras ) { Figura = Figuras->Fig; Cont = 0; while( Figura ) { Cont++; printf("%d, %d\n", Figura->x, Figura->y); Figura = Figura->Sig; } if (Cont == 1) sprintf(CADENA, "%s", "PUNTO"); if (Cont == 2) sprintf(CADENA, "%s", "LINEA"); if (Cont == 3) sprintf(CADENA, "%s", "TRIANGULO"); if (Cont == 4) sprintf(CADENA, "%s", "CUADRO"); printf("Se trata de un %s\n", CADENA); Figuras = Figuras->Sig; } } int Compara(int x, int y, struct XY *FIG) { if (FIG) while(FIG->Sig) FIG = FIG->Sig; // si sí existe, se coloca al final if (FIG && FIG->x == x && FIG->y == y) return 1; // existe el nodo y coinciden con Xini y Yini? return 0; } struct XY *PideDatos() { int k = 0, x, y; struct XY *Fig1 = NULL, *Nuevo=NULL; printf("Se finaliza si Xnew y Ynew coinciden con Xini y Yini ...\n"); while (!k) { printf("Datos x, y: "); scanf("%d, %d", &x, &y); k = Compara(x,y, Fig1); if ( !k ) { Nuevo= (struct XY*)malloc(sizeof(struct XY)); Nuevo->x=x; Nuevo->y = y; Nuevo->Sig = Fig1; Fig1 = Nuevo; } } return Fig1; } main() { struct XY *Fig = NULL; struct Todo *Figuras = NULL, *NuevaFig=NULL; int Salir = 0; char Opcion[10]; while( !Salir ) { printf("PideDatos Dibuja Salir Borrar\n"); printf("==> "); scanf("%s", Opcion); if ( !strcasecmp(Opcion,"Salir") ) Salir = 1; if ( !strcasecmp(Opcion,"PideDatos") ) { Fig = PideDatos(); NuevaFig = (struct Todo*)malloc(sizeof(struct Todo)); NuevaFig->Fig = Fig; NuevaFig->Sig = Figuras; Figuras = NuevaFig; } if ( !strcasecmp(Opcion,"Dibuja") ) { Dibuja( Figuras ); } if ( !strcasecmp(Opcion,"Borrar") ) { } } }