ErrorDeSintaxis

Pequeños fragmentos de código fuente en distintos lenguajes de programación, agrupados por categorías.

Puedes buscar entre los fuentes existentes, o aportar los tuyos.

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" */