Ejercicios : Estadísticas con estructuras y matrices

La práctica o ejercicios con solución que se propone es realizar una matriz de estructuras y a continuación realizar una estadística sobre la misma, utilizando para realizar el calculo de los datos matrices para almacenar los valores de los datos mientras se solicitan.

Los ejercicios y prácticas propuestos son de una nueva serie dedicada a la programación en c, en este caso se realizan ejercicios, en el cual la solución del mismo se ha planteado de cierta forma por el usuario del blog www.aprendoencasa.es que lo ha solicitado.



Vuelvo a comentar que no es la única solución posible y que la forma de mejorar siempre estas prácticas o ejercicios es que aportéis vuestro granito de arena utilizando para ello los comentarios. Un saludo y gracias por vuestra visita.

/*
Curso gratuito online en modalidad de teleformacion de programación en c
Ejercicios y practicas de programación resueltas o con solución en lenguaje c
El siguiente ejercicio ha sido planteado por un usuario del blog
www.aprendoencasa.
Construya un programa en Lenguaje C que permita generar estadísticas de 
un censo realizado en el Estado Miranda a 30 personas, los datos solicitados 
a cada una de éstas son los siguientes: nombre, edad, sexo, nacionalidad 
y peso. Tomando en consideración las siguientes categorías:
EDAD  CATEGORÍA
0 a 10  Niño
11 a 15  Adolescente
16 a 25  Joven
26 a 35  Adulto
36 a 45  Maduro
45 en adelante  Mayor
Determine: 
a) Cantidad por categoría.
b) Cantidad de masculino y femenino por categoría.
c) Venezolano y extranjero por categoría.
d) Promedio de edad por categoría.
e) Porcentaje de personas por categoría.
f) Promedio de edad general.
g) Edad máxima y mínima general.
El siguiente ejercicio con solución o práctica de programación resuelta
pretende realizar una pequeña estadistica utilizando estructuras y matrices
para almacenar los datos, ha sido propuesta por un usuario del blog
www.aprendoencasa.com, al cual igual que al resto agradecemos su visita.
*/
// Librerias a utilizar
#include <stdio.h>
#include <stdlib.h>
// Definicion de valores maximos
#define MAX 10
#define CATEGORIAS 6
// Estructura para almacenar los datos
typedef struct {
  char Nombre[50];
  int Edad;
  char Sexo;
  char Nacionalidad[50];
  float Peso;
} Ficha;
// Funcion principal
int main(int argc, char *argv[])
{
    // Variables a utilizar auxiliares
    int Contador=0;
    // Crear la matriz para almacenar los datos
    Ficha Datos[MAX];
    // Crear Matriz para almacenar valores de categorias
    float Categorias[CATEGORIAS][6];
    // variables generales
    float promedioedadgeneral = 0.0;
    int totalpersonas = 0;
    int edadmaxima = 0;
    int edadminima = 0;
    // Solicitar los datos de los participantes
    printf("\n");
    for(Contador=0;Contador<MAX;Contador++) 
    {
      // Mencion al blog www.aprendoencasa.es
      printf("\nDatos introducidos en www.aprendoencasa.com\n");
      // Solicitar Nombre
      printf("Nombre....: ");
      scanf(" %[^\n]",Datos[Contador].Nombre);
      // Solicitar Edad
      printf("Edad......: ");
      scanf(" %d",&Datos[Contador].Edad);
      // Solicitar sexo
      printf("Sexo.....: ");
      scanf(" %c",&Datos[Contador].Sexo);
      // Solicitar nacionalidad
      printf("Nacionalidad..: ");
      scanf(" %[^\n]",Datos[Contador].Nacionalidad);
      // Solicitar peso
      printf("Peso.....: ");
      scanf(" %f",&Datos[Contador].Peso);
    }
    // Inicializar valores de la matriz de categorias para
    // realizar las estadisticas
    for(Contador=0;Contador<CATEGORIAS;Contador++)
    {
      Categorias[Contador][0] = 0.0; // Posicion para las cantidades
      Categorias[Contador][1] = 0.0; // Posicion para sexo femenino
      Categorias[Contador][2] = 0.0; // Posicion para sexo masculino
      Categorias[Contador][3] = 0.0; // Posicion para pais
      Categorias[Contador][4] = 0.0; // Posicion para extranjero
      Categorias[Contador][5] = 0.0; // Promedio edad por categoria
    }
    // Analizar cantidad por categoria
    for(Contador=0;Contador<MAX;Contador++)
    {
       // Generales
       totalpersonas++;
       promedioedadgeneral+=Datos[Contador].Edad;
       if(Contador == 0) {
          edadminima = Datos[Contador].Edad;
          edadmaxima = Datos[Contador].Edad;
       } else {
         if(edadminima > Datos[Contador].Edad)
                       edadminima = Datos[Contador].Edad;
         if(edadmaxima < Datos[Contador].Edad)
                       edadmaxima = Datos[Contador].Edad;
       }
       // Niños
       if(Datos[Contador].Edad>=0 && Datos[Contador].Edad<=10) {
          Categorias[0][0]++; // Cantidad por categoria
          Categorias[0][5]+=Datos[Contador].Edad; // Calcular media edad
          // Femenino y Masculino
          if(Datos[Contador].Sexo=='H')
             Categorias[0][1]++;
          else
              Categorias[0][2]++;
          // Nacional o extranjero
          if(strcmp("Nacional",Datos[Contador].Nacionalidad)==0)
             Categorias[0][3]++;
          else
              Categorias[0][4]++;
       }
       // Adolescente
       if(Datos[Contador].Edad>=11 && Datos[Contador].Edad<=15) {
          Categorias[1][0]++;
          Categorias[1][5]+=Datos[Contador].Edad; // Calcular media edad
          // Femenino y Masculino
          if(Datos[Contador].Sexo=='H')
             Categorias[1][1]++;
          else
              Categorias[1][2]++;
          // Nacional o extranjero
          if(strcmp("Nacional",Datos[Contador].Nacionalidad)==0)
             Categorias[1][3]++;
          else
              Categorias[1][4]++;
       }
       // Joven
       if(Datos[Contador].Edad>=16 && Datos[Contador].Edad<=25) {
          Categorias[2][0]++;
          Categorias[2][5]+=Datos[Contador].Edad; // Calcular media edad
          // Femenino y Masculino
          if(Datos[Contador].Sexo=='H')
             Categorias[2][1]++;
          else
              Categorias[2][2]++;
          // Nacional o extranjero
          if(strcmp("Nacional",Datos[Contador].Nacionalidad)==0)
             Categorias[2][3]++;
          else
              Categorias[2][4]++;
       }
       // Adulto
       if(Datos[Contador].Edad>=26 && Datos[Contador].Edad<=35) {
          Categorias[3][0]++;
          Categorias[3][5]+=Datos[Contador].Edad; // Calcular media edad
          // Femenino y Masculino
          if(Datos[Contador].Sexo=='H')
             Categorias[3][1]++;
          else
              Categorias[3][2]++;
          // Nacional o extranjero
          if(strcmp("Nacional",Datos[Contador].Nacionalidad)==0)
             Categorias[3][3]++;
          else
              Categorias[3][4]++;
       }
       // Maduro
       if(Datos[Contador].Edad>=36 && Datos[Contador].Edad<=45) {
          Categorias[4][0]++;
          Categorias[4][5]+=Datos[Contador].Edad; // Calcular media edad
          // Femenino y Masculino
          if(Datos[Contador].Sexo=='H')
             Categorias[4][1]++;
          else
              Categorias[4][2]++;
          // Nacional o extranjero
          if(strcmp("Nacional",Datos[Contador].Nacionalidad)==0)
             Categorias[4][3]++;
          else
              Categorias[4][4]++;
       }
       // Mayor
       if(Datos[Contador].Edad>=46) {
          Categorias[5][0]++;
          Categorias[5][5]+=Datos[Contador].Edad; // Calcular media edad
          // Femenino y Masculino
          if(Datos[Contador].Sexo=='H')
             Categorias[5][1]++;
          else
             Categorias[5][2]++; 
          // Nacional o extranjero
          if(strcmp("Nacional",Datos[Contador].Nacionalidad)==0)
             Categorias[5][3]++;
          else
              Categorias[5][4]++;
       }
    }
      // visualiza cantidad por categoria
      printf("\nCategoria Niño Cantidad %.2f ",Categorias[0][0]);
      printf("\nCategoria Adolescente Cantidad %.2f ",Categorias[1][0]);
      printf("\nCategoria Joven Cantidad %.2f ",Categorias[2][0]);
      printf("\nCategoria Adulto Cantidad %.2f ",Categorias[3][0]);
      printf("\nCategoria Maduro Cantidad %.2f ",Categorias[4][0]);
      printf("\nCategoria Mayor Cantidad %.2f ",Categorias[5][0]);
      // visualiza cantidad por sexo masculino y femenino por categoria
      printf("\nCategoria Niño Femenino Cantidad %.2f Masculino Cantidad %.2f",Categorias[0][1],Categorias[0][2]);
      printf("\nCategoria Adolescente Femenino Cantidad %.2f Masculino Cantidad %.2f",Categorias[1][1],Categorias[1][2]);
      printf("\nCategoria Joven Femenino Cantidad %.2f Masculino Cantidad %.2f",Categorias[2][1],Categorias[2][2]);
      printf("\nCategoria Adulto Femenino Cantidad %.2f Masculino Cantidad %.2f",Categorias[3][1],Categorias[3][2]);
      printf("\nCategoria Maduro Femenino Cantidad %.2f Masculino Cantidad %.2f",Categorias[4][1],Categorias[4][2]);
      printf("\nCategoria Mayor Femenino Cantidad %.2f Masculino Cantidad %.2f",Categorias[5][1],Categorias[5][2]);
      // visualiza porcentaje por categoria
      printf("\nCategoria  Niño Porcentaje %.2f ",((Categorias[0][0]/totalpersonas)*100));
      printf("\nCategoria Adolescente Porcentaje %.2f ",((Categorias[1][0]/totalpersonas)*100));
      printf("\nCategoria Joven Porcentaje %.2f ",((Categorias[2][0]/totalpersonas)*100));
      printf("\nCategoria Adulto Porcentaje %.2f ",((Categorias[3][0]/totalpersonas)*100));
      printf("\nCategoria Maduro Porcentaje %.2f ",((Categorias[4][0]/totalpersonas)*100));
      printf("\nCategoria Mayor Porcentaje %.2f ",((Categorias[5][0]/totalpersonas)*100));
      // promedio de edad por categoria
      printf("\nCategoria  Niño Promedio edad %.2f ",(Categorias[0][5]/Categorias[0][0]));
      printf("\nCategoria Adolescente Promedio edad %.2f ",(Categorias[1][5]/Categorias[1][0]));
      printf("\nCategoria Joven Promedio edad %.2f ",(Categorias[2][5]/Categorias[2][0]));
      printf("\nCategoria Adulto Promedio edad %.2f ",(Categorias[3][5]/Categorias[3][0]));
      printf("\nCategoria Maduro Promedio edad %.2f ",(Categorias[4][5]/Categorias[4][0]));
      printf("\nCategoria Mayor Promedio edad %.2f ",(Categorias[5][5]/Categorias[5][0]));
      // visualiza cantidad nacionales y extranjero por categoria por categoria
      printf("\nCategoria Niño Nacional Cantidad %.2f Extranjero Cantidad %.2f",Categorias[0][3],Categorias[0][4]);
      printf("\nCategoria Adolescente Nacional Cantidad %.2f Extranjero Cantidad %.2f",Categorias[1][3],Categorias[1][4]);
      printf("\nCategoria Joven Nacional Cantidad %.2f Extranjero Cantidad %.2f",Categorias[2][3],Categorias[2][4]);
      printf("\nCategoria Adulto Nacional Cantidad %.2f Extranjero Cantidad %.2f",Categorias[3][3],Categorias[3][4]);
      printf("\nCategoria Maduro Nacional Cantidad %.2f Extranjero Cantidad %.2f",Categorias[4][3],Categorias[4][4]);
      printf("\nCategoria Mayor Nacional Cantidad %.2f Extranjero Cantidad %.2f",Categorias[5][3],Categorias[5][4]);
      // promedio de edad general
      printf("\nPromedio de edad general %.2f",promedioedadgeneral/totalpersonas);
      printf("\nEdad Maxima %d",edadmaxima);
      printf("\nEdad Minima %d",edadminima);
  system("PAUSE");  
  return 0;
}