[Ayuda]Un programa en C de Estructuras

Iniciado por renzo.roca, 12 Enero 2015, 08:22 AM

0 Miembros y 1 Visitante están viendo este tema.

renzo.roca

Hola este es mi primero Post , soy un estudianto de 1ero de  Ing.informática de la UAH y recien estoy empezando a programa. Este ejercicio me está costando mucho, quisiera ayuda para poder resolverlo  El enunciado es el siguiente:

1.Implemente las estructuras de datos que permitan almacenar información
anónima sobre personas con objeto de hacer un estudio estadístico. Así, se
deberá almacenar el número de secuencia, sexo y edad de cada persona.
Programe además un par de funciones para (a) leer por teclado datos
relativos a una persona y (b) para mostrar dichos datos por pantalla.  

2.Sin utilizar arrays, programe un software que utilice lo programado en el
ejercicio 1 para leer la edad de 10 personas y calcular la media de edad
general, la media por sexo, la cantidad de mujeres que tienen entre 13 y 16
años y el número de hombres menores de 20 años.  

3.Amplíe el ejercicio anterior mostrando al final del proceso los datos
completos de la mujer y el hombre más jóvenes de los introducidos.


Esto es lo que hasta ahora tengo


#include <stdio.h>


struct persona
{
      int secuencia;
      char sexo;
      int edad;
};
     
struct persona leerDatos()
{
    struct persona p1;
     printf("Introduzca numero de secuencia \n ");
     fflush(stdin);
     scanf("%d",&p1.secuencia);
   
    printf("Teclee el sexo, H(hombre) o M(mujer)\n");
    fflush(stdin);
    scanf("%c",&p1.sexo);
    printf("Introduzca la edad \n");
    fflush(stdin);
    scanf("%d",&p1.edad);
   
    return p1;
   
}    
   
void imprimirDatos(struct persona p1)
{      printf(" Numero de secuencia:%d\n",p1.secuencia);
    printf(" Sexo:%c\n",p1.sexo);
    printf(" Edad:%d\n",p1.edad);
   
}          
int main()
{
  struct persona p1,p2,p3,p4,p5,p6,p7,p8,p9,p10;
  int mediaEdad;
 
  p1=leerDatos();
  p2=leerDatos();
  p3=leerDatos();
  p4=leerDatos();
  p5=leerDatos();
  p6=leerDatos();
  p7=leerDatos();
  p8=leerDatos();
  p9=leerDatos();
  p10=leerDatos();
 
  //calculo de media edad //
  mediaEdad=(p1.edad+p2.edad+p3.edad+p4.edad+p5.edad+p6.edad+p7.edad+p8.edad+p9.edad+p10.edad)/10;
  printf("La media es %d",mediaEdad);

   

   system("pause");
   
   return 0;
}



Agradeceria mucho si alguien pudiera ayudarme.

Mod: Al publicar Código usa etiquetas GeSHi

BlackM4ster

- Pásate por mi web -
https://codeisc.com

rir3760

Cita de: renzo.roca en 12 Enero 2015, 08:22 AM2.Sin utilizar arrays
Debido a eso el programa terminara excesivamente largo y deberías comentarlo con tu profesor: solo sirve para justificar el uso de bucles (un poco excedido en mi opinión).

Los valores a calcular son:
Cita de: renzo.roca en 12 Enero 2015, 08:22 AMcalcular la media de edad general
la media por sexo
la cantidad de mujeres que tienen entre 13 y 16 años
el número de hombres menores de 20 años.
El primero ya lo tienes.

En el segundo inicializas un contador a cero y revisas cada una de las variables: si es de sexo masculino incrementas el contador en una unidad. Una vez tienes el numero de personas de sexo masculino el femenino lo calculas en base a una resta.

En el tercero de nuevo inicializas un contador a cero y revisas cada una de las variables, si es de sexo femenino y su edad esta entre 13 y 16 incrementas el contador:
int mujeres_13_16 = 0;

/* ... */

mujeres_13_16 = 0;
if (p1.sexo == 'f' && p1.edad >= 13 && p1.edad <= 16)
   mujeres_13_16++;
if (p2.sexo == 'f' && p2.edad >= 13 && p2.edad <= 16)
   mujeres_13_16++;
if (p3.sexo == 'f' && p3.edad >= 13 && p3.edad <= 16)
   mujeres_13_16++;
/* ... */

printf("Mujeres entre 13 y 16: %d\n", mujeres_13_16);]


El cuarto es similar al tercero pero mas fácil ya que la condición a verificar es mas simple: sexo igual a 'f' y edad menor que 20.

Cita de: renzo.roca en 12 Enero 2015, 08:22 AM3.Amplíe el ejercicio anterior mostrando al final del proceso los datos completos de la mujer y el hombre más jóvenes de los introducidos.
El proceso es idéntico en las dos operaciones con la única diferencia en el campo sexo. Debes utilizar una estructura auxiliar donde copiar los datos de la persona mas joven.

Verificas una por una las variables y si el campo es 'f' (o 'm' en el segundo ejercicio) verificas si la edad es menor que el almacenado en el auxiliar: si es el caso copias la variable en el auxiliar. Mas o menos así:

struct persona mj; /* Mujer mas joven*/
   
/* ... */

mj.edad = 9999; /* Centinela*/

if (p1.sexo == 'f' && p1.edad < mj.edad)
   mj = p1;
if (p2.sexo == 'f' && p2.edad < mj.edad)
   mj = p2;
if (p3.sexo == 'f' && p3.edad < mj.edad)
   mj = p3;
/* ... */

if (mj.edad == 9999)
   puts("No hay datos de mujeres");
else {
   /* mj almacena los datos de la mujer mas joven */
}


Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

renzo.roca

Gracias por responderme :D
ya casi lo tengo listo, solo tengo un error en calcular las medias de las edades de los hombres y de las mujeres. Me da lo mismo que la media general.


Muchas gracias a todos, estaré molestado por aqui cuando tenga dudas :D









#include <stdio.h>


typedef struct
{
       int secuencia;
       char sexo;
       int edad;
}persona;
     
//funcion estudio estadistico//     
persona leerDatos()
{
      int i,sumaEdad=0,cantidadHombres=0,cantidadMujeres=0,hombreMenor20=0,mujerEntre13y16=0;
      float mediaEdad=0;
      int sumaEdadMujer=0,sumaEdadHombre=0;
      persona p1;
      persona hMenor;
      persona mMenor;
     
      p1.secuencia=1;
   
     printf("Introduzca el sexo de la persona %d , H(HOMBRE) o M(MUJER)\n",p1.secuencia);
     fflush(stdin);
     scanf("%c",&p1.sexo);                 
     printf("Introduzca la edad de la persona %d \n",p1.secuencia);
     fflush(stdin);
     scanf("%d",&p1.edad);
     
          sumaEdad+=p1.edad;
     
       if (p1.sexo=='H' || p1.sexo=='h')
     { cantidadHombres++;
     sumaEdadHombre+=p1.edad;
     hMenor.edad=p1.edad;
     hMenor.sexo=p1.sexo;
     hMenor.secuencia=p1.secuencia;
           if (p1.edad<20)
           { hombreMenor20++;}
           }
       
       if (p1.sexo=='M' || p1.sexo=='m')
     { cantidadMujeres++;
      mMenor.edad=p1.edad;
      mMenor.sexo=p1.sexo;
      mMenor.secuencia=p1.secuencia;
      sumaEdadMujer+=p1.sexo;
     
           if (p1.edad<16 && p1.edad>13)
           { mujerEntre13y16++;}
           }   
           
     
     //bucle for//
      for(i=2;i<=10 ;i++)
      {
        p1.secuencia=i;
       
   
     printf("Introduzca el sexo de la persona %d , H(HOMBRE) o M(MUJER)\n",p1.secuencia);
     fflush(stdin);
     scanf("%c",&p1.sexo);                 
     printf("Introduzca la edad de la persona %d \n",p1.secuencia);
     fflush(stdin);
     scanf("%d",&p1.edad);
     
     sumaEdad+=p1.edad;
     mediaEdad=sumaEdad/p1.secuencia;
     
       if (p1.sexo=='H' || p1.sexo=='h')
     { cantidadHombres++;
        sumaEdadHombre+=p1.edad;
        if (p1.edad<hMenor.edad)
            {hMenor.edad=p1.edad;
             hMenor.sexo=p1.sexo;
             hMenor.secuencia=p1.secuencia;
             }
   
           if (p1.edad<20)
           { hombreMenor20++;}
           }
       
       if (p1.sexo=='M' || p1.sexo=='m')
     { cantidadMujeres++;
        sumaEdadMujer+=p1.edad;
        if (p1.edad<mMenor.edad)
        {
      mMenor.edad=p1.edad;
      mMenor.sexo=p1.sexo;
      mMenor.secuencia=p1.secuencia;
      }
     
           if (p1.edad<16 && p1.edad>13)
           { mujerEntre13y16++;}
           }   
           }     
     
     
     printf("\n La edad media es : %g años ",mediaEdad);
      printf("\n La edad media de hombres es : %g años ",sumaEdadHombre/cantidadHombres);
       printf("\n La edad media de mujeres es : %g años ",sumaEdadMujer/cantidadMujeres);
        printf("\n La cantidad de hombres menor de 20 años es : %d",hombreMenor20);
         printf("\n La cantidad de mujeres entre 13 y 16 años es : %d",mujerEntre13y16);
         
     printf("\n El hombre mas joven es la persona %d de edad %d",hMenor.secuencia,hMenor.edad);
     printf("\n El mujer mas joven es la persona %d de edad %d",mMenor.secuencia,mMenor.edad);
         
     
     return p1;
     
}     


//funcion imprimir//
     
void imprimirDatos(persona p)
{      printf(" Numero de secuencia:%d\n",p.secuencia);
     printf(" Sexo:%c\n",p.sexo);
     printf(" Edad:%d\n",p.edad);
     
}   

// main//
     
int main()
{
   
    leerDatos();

   
   

    system("pause");
   
    return 0;
}