20 de abril de 2019

Estructura de datos

Desarrollo de software / Fundamentos de Programación / Unidad 5 /

Esta actividad tiene el propósito de conocer y aplicar estructuras de datos en lenguaje de programación C, que permitan la organización de datos en la resolución de problemas reales.

  • El usuario digitará un número de entre 1 y 32, el sistema arrojará el nombre del estado de la república correspondiente.
  • Incluye la superficie de cada estado de la república.
  • El usuario seleccionará si desea ver el listado de estados y sus respectivas superficies en orden ascendente o descendente respecto al tamaño de su territorio.
  • Utiliza estructuras de datos (arreglos o estructura) y estructuras de control (condiciones si, entonces; ciclos while, etc.) para la solución. 
  • Considera no fijar en el código el orden ascendente o descendente de los estados de la república, ya que el programa tendrá que crear al momento de la elección del usuario, el orden del listado.
  • Elabora un programa en C donde codifiques la solución planteada en el algoritmo.

UnADM (2018) Unidad 5 Estructuras de datos, México



#include < stdio.h >
#include < locale.h >
#include < string.h >
int main(void)
{
    setlocale(LC_ALL, "");
    int n,op,i,j;
    struct entidad
    {
        int codent;
        char nombre [33];
        int superficie;
    } aux;
    struct entidad estado[32] =     
    {
1, "Aguascalientes", 5625,
2, "Baja California", 71546,
3, "Baja California Sur", 73943,
4, "Campeche", 57727,
5, "Chiapas", 73681,
6, "Chihuahua", 247487,
7, "Ciudad de México", 1479,
8, "Coahuila de Zaragoza", 151571,
9, "Colima", 5627,
10, "Durango", 123367,
11, "Guanajuato", 30621,
12, "Guerrero", 63794,
13, "Hidalgo", 20856,
14, "Jalisco", 78630,
15, "México", 22333,
16, "Michoacán de Ocampo", 58667,
17, "Morelos", 4892,
18, "Nayarit", 27862,
19, "Nuevo León", 64203,
20, "Oaxaca", 93343,
21, "Puebla", 34251,
22, "Querétaro", 11658,
23, "Quintana Roo", 42535,
24, "San Luis Potosí", 61165,
25, "Sinaloa", 57331,
26, "Sonora", 184946,
27, "Tabasco", 24747,
28, "Tamaulipas", 80148,
29, "Tlaxcala", 4016,
30, "Veracruz de Ignacio de la Llave", 71856,
31, "Yucatán", 39671,
32, "Zacatecas", 75416    };

do {
    printf( "\n\n---------------------------------\n");
    printf( "\n Entidades federativas de México \n" );
    printf( "\n---------------------------------\n");
    printf( "\n\n1) Ver una entidad \n" );
    printf( "2) Listar en orden ascendente el tamaño de la superficie \n" );
    printf( "3) Listar en orden descendente el tamaño de la superficie \n" );
    printf( "4) Salir \n\n" );
    printf( "Elige una opción:\n" );
    scanf("%d",&op);

switch (op)
 {
 case 1:
        printf( "\n Ingrese un numero entre 1 y 32\n" );
        n=0;
        scanf("%i",&n);
        while (n<=0 || n>32)
            {
            printf("Número invalido.\n");
            printf("Vuelva a introducir un número.\n");
            scanf("%i",&n);
            }
        n--;
        printf("\n\nEs correcto.\n\n");
        printf("\n\nID\tSuperficie en Km2\tNombre del estado\n\n");
        printf(" %i,\t%i\t\t\t%s\n\n",estado[n].codent, estado[n].superficie, estado[n].nombre);
        printf("\n\n\n\nReiniciando el programa.\n");
    break;
    case 2:
        for(i=0;i<32;i++){
        for(j=0;j<31;j++){
            if(estado[j].superficie > estado[j+1].superficie){
                aux = estado[j];
                estado[j] = estado[j+1];
                estado[j+1] = aux;
                }
            }
    }
   printf("\n\n Orden ascendente\n--------------------------------------------------\n");
    printf("ID\tSuperficie en Km2\tNombre del estado\n--------------------------------------------------\n");
    //Orden ascendente    for(i=0;i<32;i++){
        printf(" %i\t%i\t\t\t%s\n",estado[i].codent, estado[i].superficie, estado[i].nombre);
    }
    printf("--------------------------------------------------\n\n");
    break;
    case 3:
        for(i=0;i<32;i++){
        for(j=0;j<31;j++){
            if(estado[j].superficie > estado[j+1].superficie){
                aux = estado[j];
                estado[j] = estado[j+1];
                estado[j+1] = aux;
                }
            }
    }
    printf("\n\n Orden descendente\n--------------------------------------------------\n");
    printf("ID\tSuperficie en Km2\tNombre del estado\n--------------------------------------------------\n");
    //Orden descendente    for(i=31;i>=0;i--){
        printf(" %i\t%i\t\t\t%s\n",estado[i].codent, estado[i].superficie, estado[i].nombre);
    }
    printf("--------------------------------------------------\n\n");   
    break;
    case 4break;
    default: printf( "La opción no es valida\n");
    }
}
while (op!=4);
system("pause");
return 0;
}

DFPR_U5_EA_yaxelay
  • El código de esta actividad se puede optimizar, agregando funciones a llamar, porque el código de ordenamiento burbuja (Bubble Sort) se repite.
  • Presento una revisión mejorada al codigo propuesto en github

No hay comentarios.: