NFig_Datos.c



/* 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") ) { }
	}
}