// 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);
}