Ver Mensaje Individual
  #7 (permalink)  
Antiguo 27/10/2010, 17:59
Trovaz
 
Fecha de Ingreso: octubre-2010
Ubicación: Edo. de México
Mensajes: 94
Antigüedad: 13 años, 7 meses
Puntos: 9
Respuesta: ayuda para ordenar fechas de nacimiento en c

Bueno pues me agarraste de buenas y me puse a resolver este problemita, aqui tienes el como lo hize, ESTUDIA el codigo y si tienes dudas hasmelas saber.

Código c:
Ver original
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <strings.h>
  4. #include <stdlib.h>
  5.  
  6. #define COLS 20
  7.  
  8. int comparaFechas(char *fecha1, char *fecha2);
  9. int ordenaArreglo(char (*fechas)[COLS], int limite);
  10.  
  11. int main(){
  12.     char (*FechasX)[COLS];
  13.     char (*FechasY)[COLS];
  14.     char (*FechasXY)[COLS];
  15.     int contador, contador2, pos;
  16.     int elementosX = 0, elementosY = 0;
  17.     int elementosXY = 0;
  18.  
  19.     printf("Elementos X: ");
  20.     scanf("%i", &elementosX);
  21.     while(getchar() != '\n');
  22.  
  23.     printf("Elementos Y: ");
  24.     scanf("%i", &elementosY);
  25.     while(getchar() != '\n');
  26.  
  27.     FechasX = malloc(elementosX * COLS * sizeof(char));
  28.     FechasY = malloc(elementosY * COLS * sizeof(char));
  29.     FechasXY = malloc((elementosX + elementosY) * COLS * sizeof(char));
  30.  
  31.     printf("===============================\n");
  32.     printf("Digita las fechas del arreglo X\n");
  33.     printf("===============================\n");
  34.     for(contador = 0; contador < elementosX; contador++){
  35.         bzero(FechasX[contador], sizeof(FechasX[contador]));
  36.         printf("FechasX[%i]: ", contador);
  37.         scanf("%s", FechasX[contador]);
  38.         while(getchar() != '\n');
  39.     }
  40.  
  41.     printf("===============================\n");
  42.     printf("Digita las fechas del arreglo Y\n");
  43.     printf("===============================\n");
  44.     for(contador = 0; contador < elementosY; contador++){
  45.         bzero(FechasY[contador], sizeof(FechasY[contador]));
  46.         printf("FechasY[%i]: ", contador);
  47.         scanf("%s", FechasY[contador]);
  48.         while(getchar() != '\n');
  49.     }
  50.  
  51.     printf("===============================\n");
  52.     printf("Ordenando X\n");
  53.     printf("===============================\n");
  54.     ordenaArreglo(FechasX, elementosX);
  55.     printf("===============================\n");
  56.     printf("Ordenando Y\n");
  57.     printf("===============================\n");
  58.     ordenaArreglo(FechasY, elementosY);
  59.  
  60.     printf("===============================\n");
  61.     printf("Mostrando Elementos Ordenados X\n");
  62.     printf("===============================\n");
  63.     for(contador = 0; contador < elementosX; contador++){
  64.         printf("FechasX[%i]: %s\n", contador, FechasX[contador]);
  65.     }
  66.  
  67.     printf("===============================\n");
  68.     printf("Mostrando Elementos Ordenados Y\n");
  69.     printf("===============================\n");
  70.     for(contador = 0; contador < elementosY; contador++){
  71.         printf("FechasY[%i]: %s\n", contador, FechasY[contador]);
  72.     }
  73.  
  74.     elementosXY = elementosX + elementosY;
  75.  
  76.     contador = 0;
  77.     contador2 = 0;
  78.     pos = 0;
  79.     while(pos < elementosXY){
  80.         if(contador < elementosX && contador2 < elementosY){
  81.             if(comparaFechas(FechasX[contador], FechasY[contador2]) <= 0){
  82.                 bzero((char *)&FechasXY[pos], sizeof(FechasXY[pos]));
  83.                 strcpy(FechasXY[pos++], FechasX[contador++]);
  84.             }
  85.             else{
  86.                 bzero((char *)&FechasXY[pos], sizeof(FechasXY[pos]));
  87.                 strcpy(FechasXY[pos++], FechasY[contador2++]);
  88.             }
  89.         }
  90.         if(contador == elementosX){
  91.             bzero((char *)&FechasXY[pos], sizeof(FechasXY[pos]));
  92.             strcpy(FechasXY[pos++], FechasY[contador2++]);
  93.         }
  94.         if(contador2 == elementosY){
  95.             bzero((char *)&FechasXY[pos], sizeof(FechasXY[pos]));
  96.             strcpy(FechasXY[pos++], FechasX[contador++]);
  97.         }
  98.     }
  99.  
  100.     printf("=======================================\n");
  101.     printf("Mostrando Todos loe Elementos ordenados\n");
  102.     printf("=======================================\n");
  103.     for(contador = 0; contador < elementosXY; contador++){
  104.         printf("FechasXY[%i]: %s\n", contador, FechasXY[contador]);
  105.     }
  106.  
  107.     free(FechasX);
  108.     free(FechasY);
  109.     free(FechasXY);
  110.     return 0;
  111. }
  112.  
  113. int comparaFechas(char *fecha1, char *fecha2){
  114.     int anio1 = 0, anio2 = 0;
  115.     int mes1 = 0, mes2 = 0;
  116.     int dia1 = 0, dia2 = 0;
  117.     sscanf(fecha1, "[%d][%d][%d]", &dia1, &mes1, &anio1);
  118.     sscanf(fecha2, "[%d][%d][%d]", &dia2, &mes2, &anio2);
  119.     if(anio1 == anio2)
  120.         if(mes1 == mes2)
  121.             return dia1 - dia2;
  122.         else
  123.             return mes1 - mes2;
  124.     else
  125.         return anio1 - anio2;
  126.  
  127.     return 0;
  128. }
  129.  
  130. int ordenaArreglo(char (*fechas)[COLS], int limite){
  131.     char temp[COLS];
  132.     char temp2[COLS];
  133.     int contador, pibote;
  134.     for(pibote = 0; pibote < (limite - 1); pibote++){
  135.         for(contador = pibote; contador < (limite - 1); contador++){
  136.             if(comparaFechas(fechas[contador], fechas[contador + 1]) > 0){
  137.                 bzero((char *)&temp, sizeof(temp));
  138.                 bzero((char *)&temp2, sizeof(temp2));
  139.                 strcpy(temp, fechas[contador]);
  140.                 strcpy(temp2, fechas[contador + 1]);
  141.                 strcpy(fechas[contador + 1], temp);
  142.                 strcpy(fechas[contador], temp2);
  143.             }
  144.         }
  145.     }
  146.  
  147.     return 0;
  148. }


Mi salida
Código:
Elementos X: 2
Elementos Y: 2
===============================
Digita las fechas del arreglo X
===============================
FechasX[0]: [16][9][2000]
FechasX[1]: [15][9][2000]
===============================
Digita las fechas del arreglo Y
===============================
FechasY[0]: [13][9][2000]
FechasY[1]: [11][9][2000]
===============================
Ordenando X
===============================
===============================
Ordenando Y
===============================
===============================
Mostrando Elementos Ordenados X
===============================
FechasX[0]: [15][9][2000]
FechasX[1]: [16][9][2000]
===============================
Mostrando Elementos Ordenados Y
===============================
FechasY[0]: [11][9][2000]
FechasY[1]: [13][9][2000]
=======================================
Mostrando Todos loe Elementos ordenados
=======================================
FechasXY[0]: [11][9][2000]
FechasXY[1]: [13][9][2000]
FechasXY[2]: [15][9][2000]
FechasXY[3]: [16][9][2000]