Would you like to make this site your homepage? It's fast and easy...
Yes, Please make this my home page!
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#define MAX_STR 11 /* MAX_STR - 1 caracteres iprimibles */
typedef struct
{
int numCod;
char str[11];
double tMax;
} TCodific;
char vocal[] = "aeiou";
/*********************************
prototipo de funciones
**********************************/
int esVocal(char);
char generarConsonante();
void generarStr(TCodific *);
void generarCodific(TCodific *);
int fcomp(const void *, const void *);
/******************************
programa principal
*******************************/
int main(int argc, char **argv)
{
long numDatos = atol(argv[1]);
printf("\n Programa de ordenamiento usando QSORT\n");
printf(" -------------------------------------\n");
if(numDatos < 0)
{
printf("\nError al capturar argumento (numero negativo).");
printf("\nNo se puede seguir ejecutando el programa");
exit(0);
}
printf("\n* Reservando memoria para generar %d datos..",numDatos);
TCodific *arr = NULL;
arr = (TCodific *) malloc(numDatos * sizeof(TCodific));
if(arr == NULL)
{
printf("\nError de reserva memoria");
printf("\nNo se puede seguir ejecutando el programa");
exit(0);
}
long i = 0;
/* creando el archivo de salida de datos */
FILE *f = fopen("pedrosilva.dtd","w+");
if(f == NULL)
{
printf("\nError de apertura de archivo");
printf("\nNo se puede seguir ejecutando el programa");
exit(0);
}
printf("\n\n* Creando el archivo pedrosilva.dtd en donde se mostraran");
printf("\n los %d datos generados aleatoriamente, en forma ordenada..",numDatos);
fprintf(f,"\tARCHIVO DE SALIDA de datos\n");
fprintf(f,"\t--------------------------\n");
fprintf(f,"\n\t** Se generaron %d datos\n",numDatos);
/* inicia semilla aleatoria */
srand((unsigned)time( NULL ));
printf("\n\n* Generando datos aleatoriamente..");
for(; i < numDatos; i++)
generarCodific(&arr[i]);
clock_t inicio,fin;
double tiempo;
printf("\n\n* Ordenando datos con metodo qsort..");
inicio = clock();
qsort((void *) arr,(size_t) numDatos,sizeof(TCodific),fcomp);
fin = clock();
tiempo = (double) (fin - inicio) / CLOCKS_PER_SEC;
fprintf(f,"\n\tTiempo QSort : %.5lf segundos\n",tiempo);
printf("\n\n\tTiempo QSort : %.5lf segundos\n",tiempo);
/* escribe en el archivo pedrosilva.dtd los datos ordenados */
printf("\n\n* Escribiendo los datos ordenados en archivo pedrosilva.dtd..");
fprintf(f,"\n\n\t** Datos ordenados **\n");
fprintf(f,"\t ---------------\n");
for(i = 0; i < numDatos; i++)
{
fprintf(f,"\n\t%d)\t\t",i+1);
fprintf(f,"%s\t%d\t%.2lf",arr[i].str, arr[i].numCod,arr[i].tMax);
}
free(arr); /* libera memoria */
fclose(f);
printf("\n\nFin del programa.");
getchar();
return 0;
}
/***************************************
implementacion de funciones
***************************************/
int esVocal(char c)
{
for(int i = 0; i < 5; i++)
if(vocal[i] == c) return 1;
return 0;
}
char generarConsonante()
{
int c = 97 + (rand() % 26);
while(esVocal(c))
{
c = 97 + (rand() % 26);
}
return c;
}
void generarStr(TCodific *a)
{
int i = 0;
int inicioVocal = rand() % 2;
for( ; i < MAX_STR - 1 ; i++)
{
if(inicioVocal)
{
if(i % 2 == 0)
{ a->str[i] = vocal[rand() % 5];
continue;
}
a->str[i] = generarConsonante();
continue;
}
if(i % 2 != 0)
{ a->str[i] = vocal[rand() % 5];
continue;
}
a->str[i] = generarConsonante();
}
a->str[MAX_STR - 1] = '\0';
}
void generarCodific(TCodific *a)
{
a->numCod = rand() % 30000;
a->tMax = (double)(rand() % 400) / 100.0;
generarStr(a);
}
int fcomp(const void *a, const void *b)
{
return strcmp( ((TCodific *) a)->str , ((TCodific *) b)->str);
}Bajar archivo