C: Array de struct
Ejemplo simple de cálculo de estadísticas, usando un "array de struct" para almacenar los datos
Lenguaje: C (compilador: GCC 3)
Categoría: Tipos de datos
/* Fuente procedente de ErrorDeSintaxis.es */
/* Ejemplo simple de cálculo de estadísticas, */
/* usando un "array de struct" para almacenar */
/* los datos */
/* Compilador: GCC 3 */
/* Nivel: Intermedio */
/* Disponible desde 02/01/2012 */
/* Aportado por Nacho */
/* Autor original: Nacho Cabanes */
/* Web original: http://www.nachocabanes.com/c/curso/ */
/* Estadísticas: En cada registro: Edad (entero) Peso (Kg, real) Estatura (m, real) Número máximo de registros previsto: 50 Menú: 1 - Añadir un dato 2 - Mostrar todos los datos almacenados 3 - Mostrar las medias 4 - Salir */ /* Pseudocódigo: - Contador de datos = 0 (no hay datos) - Repetir - Mostrar menú - Leer opcion - Si la opción es 1 * Aumentar contador de datos almacenados (-> n) * Pedir edad(n), peso(n), estatura(n) - Si la opción es 2 * Para todos los datos existentes: Mostrar número, edad, peso, estatura - Si la opción es 3 * Calcular edad media, peso medio, estat. media * Mostrar valores medios - Hasta que la opción sea 4 */ #include <stdio.h> struct { /* Mi tipo de datos */ int edad; float peso; float estatura; } datos[50]; float edadMedia, pesoMedio, estaturaMedia; /* Medias */ int opcion; /* La opcion escogida */ int i; /* Para bucles */ int numeroDatos = 0; /* Aun no hay fichas */ /* ----------------------------------------*/ main() { do { /* Todo se repite*/ /* Menu */ puts("\n-------------"); puts( " Estadística"); puts( "-------------\n"); puts("Elige una opcion:"); puts("1- Añadir un dato."); puts("2- Mostrar los datos existentes."); puts("3- Mostrar las medias de los datos."); puts("4- Terminar y salir."); scanf("%d", &opcion); switch(opcion) { case 1: /* Aumentar contador de datos almacenados (-> c) * Pedir edad(n), peso(n), estatura(n) */ printf("Ficha %d. Dime la edad: ", numeroDatos+1); scanf("%d", &datos[numeroDatos].edad); printf("Dime el peso (Kg): "); scanf("%f", &datos[numeroDatos].peso); printf("Dime la estatura (m): "); scanf("%f", &datos[numeroDatos].estatura); numeroDatos ++; break; case 2: /* Para todos los datos existentes: Mostrar número, edad, peso, estatura */ for (i=0; i<numeroDatos; i++) printf("Dato %d: Edad=%d años, peso=%4.2f Kg, estatura=%4.2f m\n", i+1, datos[i].edad, datos[i].peso, datos[i].estatura); break; case 3: /* Calcular edad media, peso medio, estat. media * Mostrar valores medios */ if (numeroDatos > 0) { /* Si hay datos */ edadMedia = pesoMedio = estaturaMedia = 0.0; for (i=0; i<numeroDatos; i++) { /* Releo todos y hallo totales */ edadMedia += datos[i].edad; pesoMedio += datos[i].peso; estaturaMedia += datos[i].estatura; } edadMedia /= numeroDatos; /* Hallo la media de verdad */ pesoMedio /= numeroDatos; estaturaMedia /= numeroDatos; /* Finalmente, lo muestro */ printf("Media: Edad=%4.2f años, peso=%4.2f Kg, estatura=%4.2f m\n", edadMedia, pesoMedio, estaturaMedia); } else /* Si no hay datos aviso */ printf("No hay datos!\n"); /* Nota, esto no es lo más eficiente: se puede calcular las medias cuando se introduce cada dato, que es más rápido... aunque quizá menos legible */ break; } /* Fin del "switch" */ } while (opcion != 4); printf("Hasta otra...\n"); } /* Fin de "main" */