Free Web Site - Free Web Space and Site Hosting - Web Hosting - Internet Store and Ecommerce Solution Provider - High Speed Internet
Search the Web
#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