VECTORES.c



// GENERAR UN VECTOR DE TIPO XXXX ( varios )
#include <stdio.h>

void PideVector(char*);
void error(void);
void MuestraDatos(char *);
void Busca(char *);
int CompCade(char *, char *);

#define dim 10

	/*
	flot
	ente
	cade
	*/
int   Vente[dim];
float Vflot[dim];
char  *Vchar[dim];

main()
{
	char *Tipo;	// Define el tipo de dato para el vector
	// Si no se reserva espacio de memoria se manda el mensaje "segmentation fault"
	Tipo = (char*)malloc(5);
	if (Tipo == NULL) error();
	scanf("%s",Tipo);
	printf("El tipo es= %s", Tipo);
	
	PideVector(Tipo);
	MuestraDatos(Tipo);
	Busca(Tipo);
}

void PideVector(char *Tipo)
{
	int x = 0;
	
	while (x < dim)
	{
		printf("Introduzca el valor de V[%d]= ", x+1);
		
		//Son iguales las cadenas?
		if (strcasecmp(Tipo, "flot") == 0) scanf("%f", &Vflot[x]);
		if (strcasecmp(Tipo, "ente") == 0) scanf("%d", &Vente[x]);
		if (strcasecmp(Tipo, "cade") == 0)
		{
			Vchar[x] = (char*)malloc(80);
			if ( Vchar[x] == NULL) error();	
			scanf("%s",Vchar[x]);
		}
		x++;
	}
}

void error(void) { printf("error de memoria..."); exit(1); }

void MuestraDatos(char *Tipo)
{
	int x = 0;
	
	while ( x < dim )
	{
		printf("V[%d] = ", x+1);
		//Son iguales las cadenas?
		if (strcasecmp(Tipo, "flot") == 0) printf("%f\n", Vflot[x]);
		if (strcasecmp(Tipo, "ente") == 0) printf("%d\n", Vente[x]);
		if (strcasecmp(Tipo, "cade") == 0) printf("%s\n", Vchar[x]);
		x++;
	}
}

/*
	void qsort(void *base, size_t nmiemb, size_t tam, int (*compar)(const void *, const void *));
*/

void Busca(char *Tipo)
{
	char *CadFind;
	int x = 0;
	
	printf("Valor a buscar?: ");
	if (strcasecmp(Tipo, "cade") == 0)
	{
		 CadFind = (char*)malloc(80);
		qsort( Vchar, dim, sizeof((char*)80), CompCade );
		MuestraDatos(Tipo);
		scanf("%s", CadFind);
		
		while (x < 10 && strcasecmp(CadFind, Vchar[x]) != 0)
			x++;
		printf("\nSe encontro en la posicion %d\n", x);
	}
}

int CompCade(char *Cad1, char *Cad2)
{
	return strcasecmp(Cad1, Cad2);
}