Advertisement
Aluneth

parcial1Gm

May 12th, 2025
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.74 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4.  
  5. #define NUM_CIUDADES 3
  6. #define NUM_SEMANAS 5
  7.  
  8. // Estructura para almacenar los datos de lluvia por ciudad
  9. typedef struct {
  10.     char nombre[50];
  11.     int lluvias[NUM_SEMANAS];
  12.     int total_lluvia; // Para almacenar la suma total de lluvia de la ciudad
  13. } Ciudad;
  14.  
  15. // Función para inicializar los datos de lluvia a cero
  16. void borrarDatos(Ciudad ciudades[]) {
  17.     for (int i = 0; i < NUM_CIUDADES; i++) {
  18.         for (int j = 0; j < NUM_SEMANAS; j++) {
  19.             ciudades[i].lluvias[j] = 0;
  20.         }
  21.         ciudades[i].total_lluvia = 0;
  22.     }
  23.     printf("Datos borrados exitosamente.\n");
  24. }
  25.  
  26. // Función para cargar datos de lluvia
  27. void cargarDatos(Ciudad ciudades[]) {
  28.     char nombre_ciudad[50];
  29.     int semana, lluvia;
  30.  
  31.     printf("Ingrese el nombre de la ciudad: ");
  32.     scanf("%s", nombre_ciudad);
  33.  
  34.     int ciudad_encontrada = -1;
  35.     for (int i = 0; i < NUM_CIUDADES; i++) {
  36.         if (strcmp(ciudades[i].nombre, nombre_ciudad) == 0) {
  37.             ciudad_encontrada = i;
  38.             break;
  39.         }
  40.     }
  41.  
  42.     if (ciudad_encontrada != -1) {
  43.         printf("Ingrese el número de semana (1-%d): ", NUM_SEMANAS);
  44.         scanf("%d", &semana);
  45.  
  46.         if (semana >= 1 && semana <= NUM_SEMANAS) {
  47.             printf("Ingrese la cantidad de mm de lluvia: ");
  48.             scanf("%d", &lluvia);
  49.             ciudades[ciudad_encontrada].lluvias[semana - 1] += lluvia;
  50.             printf("Datos cargados exitosamente.\n");
  51.         } else {
  52.             printf("Número de semana inválido.\n");
  53.         }
  54.     } else {
  55.         printf("Ciudad no encontrada.\n");
  56.     }
  57. }
  58.  
  59. // Función de comparación para ordenar por nombre de ciudad (ASCII)
  60. int compararCiudades(const void *a, const void *b) {
  61.     return strcmp(((Ciudad *)a)->nombre, ((Ciudad *)b)->nombre);
  62. }
  63.  
  64. // Función para ordenar por nombre de ciudad
  65. void ordenarPorCiudad(Ciudad ciudades[]) {
  66.     qsort(ciudades, NUM_CIUDADES, sizeof(Ciudad), compararCiudades);
  67.     printf("Datos ordenados por ciudad.\n");
  68. }
  69.  
  70. // Función para ordenar por semana (en realidad, esto reorganiza las semanas para cada ciudad)
  71. void ordenarPorSemana(Ciudad ciudades[]) {
  72.     // No es posible "ordenar por semana" el cuadro de la manera tradicional.
  73.     // Lo que se puede hacer es mostrar los datos agrupados por semana.
  74.     printf("Los datos se mostrarán agrupados por semana en la opción 'Mostrar datos'.\n");
  75. }
  76.  
  77. // Función para mostrar los datos del cuadro
  78. void mostrarDatos(Ciudad ciudades[]) {
  79.     printf("\n%-15s", "Ciudad");
  80.     for (int i = 1; i <= NUM_SEMANAS; i++) {
  81.         printf("%-8s", "Semana");
  82.         printf("%d", i);
  83.     }
  84.     printf("%-10s\n", "Total");
  85.     printf("---------------------------------------------------------------------------\n");
  86.  
  87.     for (int i = 0; i < NUM_CIUDADES; i++) {
  88.         printf("%-15s", ciudades[i].nombre);
  89.         ciudades[i].total_lluvia = 0; // Reiniciar el total antes de calcular
  90.         for (int j = 0; j < NUM_SEMANAS; j++) {
  91.             printf("%-8d", ciudades[i].lluvias[j]);
  92.             ciudades[i].total_lluvia += ciudades[i].lluvias[j];
  93.         }
  94.         printf("%-10d\n", ciudades[i].total_lluvia);
  95.     }
  96.     printf("\n");
  97. }
  98.  
  99. // Función para mostrar el resumen de lluvias por ciudad
  100. void mostrarResumen(Ciudad ciudades[]) {
  101.     printf("\nResumen de lluvias por ciudad:\n");
  102.     for (int i = 0; i < NUM_CIUDADES; i++) {
  103.         printf("%-15s: %d mm\n", ciudades[i].nombre, ciudades[i].total_lluvia);
  104.     }
  105.     printf("\n");
  106. }
  107.  
  108. // Función para mostrar estadísticas de lluvia por ciudad y semana
  109. void mostrarEstadisticas(Ciudad ciudades[]) {
  110.     printf("\nEstadísticas de lluvia:\n");
  111.  
  112.     // Suma de todas las semanas para cada ciudad
  113.     printf("\nTotal de lluvia por ciudad:\n");
  114.     for (int i = 0; i < NUM_CIUDADES; i++) {
  115.         printf("%-15s: %d mm\n", ciudades[i].nombre, ciudades[i].total_lluvia);
  116.     }
  117.  
  118.     // Suma de cada semana entre todas las ciudades
  119.     printf("\nTotal de lluvia por semana:\n");
  120.     for (int j = 0; j < NUM_SEMANAS; j++) {
  121.         int total_semana = 0;
  122.         for (int i = 0; i < NUM_CIUDADES; i++) {
  123.             total_semana += ciudades[i].lluvias[j];
  124.         }
  125.         printf("Semana %d: %d mm\n", j + 1, total_semana);
  126.     }
  127.     printf("\n");
  128. }
  129.  
  130. int main() {
  131.     Ciudad ciudades[NUM_CIUDADES] = {
  132.         {"Buenos Aires", {0}},
  133.         {"Córdoba", {0}},
  134.         {"Rosario", {0}}
  135.     };
  136.     int opcion;
  137.  
  138.     do {
  139.         printf("\n--- Menú ---\n");
  140.         printf("1. Borrar datos\n");
  141.         printf("2. Cargar datos\n");
  142.         printf("3. Ordenar por ciudad\n");
  143.         printf("4. Ordenar por semana\n");
  144.         printf("5. Mostrar datos\n");
  145.         printf("6. Mostrar resumen\n");
  146.         printf("7. Mostrar estadísticas\n");
  147.         printf("0. Salir\n");
  148.         printf("Ingrese una opción: ");
  149.         scanf("%d", &opcion);
  150.  
  151.         switch (opcion) {
  152.             case 1:
  153.                 borrarDatos(ciudades);
  154.                 break;
  155.             case 2:
  156.                 cargarDatos(ciudades);
  157.                 break;
  158.             case 3:
  159.                 ordenarPorCiudad(ciudades);
  160.                 break;
  161.             case 4:
  162.                 ordenarPorSemana(ciudades);
  163.                 break;
  164.             case 5:
  165.                 mostrarDatos(ciudades);
  166.                 break;
  167.             case 6:
  168.                 mostrarResumen(ciudades);
  169.                 break;
  170.             case 7:
  171.                 mostrarEstadisticas(ciudades);
  172.                 break;
  173.             case 0:
  174.                 printf("Saliendo del programa.\n");
  175.                 break;
  176.             default:
  177.                 printf("Opción inválida. Intente nuevamente.\n");
  178.         }
  179.     } while (opcion != 0);
  180.  
  181.     return 0;
  182. }
  183.  
Tags: parcialGm
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement