Me pueden hacer el favor de ayudarme con el siguiente ejercicio. CODIGO EN C
Ejercicio 3
El centro educativo “Mis años Dorados”, necesita implementar un programa que le permita llevar un conteo de la cantidad de estudiantes en diferentes categorías (Destacado, Bueno y regular) partiendo de que la escala de notas es de 1 a 10. Para lo cual deben de ubicarse bajo los siguientes criterios:

• Primaria
o Si la nota del estudiante es mayor a 8, es estudiante destacado
o Si la nota esta entre 6 y 7 es estudiante aceptable
o Si la nota es menor a 6, es estudiante regular
• Bachillerato
o Si la nota del estudiante es mayor a 9, es estudiante destacado
o Si la nota esta entre 7 y 8 es estudiante aceptable
o Si la nota es menor a 7, es estudiante regular

El programa debe de mostrar la cantidad total de estudiantes por cada categoría, tanto en primaria como en bachillerato; adicionalmente debe de mostrar el promedio de cada categoría (destacado, aceptable y regular) tanto para primaria como para bachillerato.

El programa debe de ejecutarse hasta que el usuario encargado de registrar los estudiantes marque la opción de salida.

Respuestas

Respuesta dada por: LeonardoDY
0

Para implementar el programa podemos implementar una estructura como lista simplemente enlazada. Esta consiste en una estructura autoreferenciada que almacena nombre y promedio:

struct nodo{

  ...

  struct nodo *sig;

};

El nombre se guarda en un string y el promedio en una variable de punto flotante de 32 bits. Primero se ingresan los estudiantes y luego se muestran las estadísticas. El código queda:

typedef enum nivel{PRIMARIA,BACHILLERATO} NIVEL

struct nodo{

     char Nombre[30];

     NIVEL nivel;//variable que solo puede tomar valores de la enumeración

     float promedio;

};

void agregar(struct nodo*);

void mostrar(struct nodo*);

int main()

{

              struct nodo *Lista=NULL;

             char Opc;

              int DestacPrim, DestacBachi, AcepPrim, AcepPrim, RegBachi, RegPrim;

             while(1){

                          printf("Elija una opción\n");

                          printf("(A)gregar Estudiante");

                          printf("(S)alir\n");//Muestro menú en pantalla

                          Opc=getchar();

                          if(toupper(Opc)=='S') break;

                          if(toupper(Opc)=='A'){

                                     agregar(&Lista);//Paso el puntero a la función de ingreso.

                                    }

             }

             mostrar(&Lista);

             printf("Programa finalizado, presiona una tecla para salir\n");

             getchar();//Espero la presión de una tecla para salir

}

La función agregar() añade nodos a la lista y los ubica al final:

void agregar(struct nodo *lista)

{

          struct nodo *nuevo,aux*;

          float nivel;

           nuevo=(struct nodo*)malloc(sizeof(struct nodo));//Creo un nuevo nodo.

          printf("Ingrese nombre: ");

          gets(nuevo->nombre);

          printf("Ingresar promedio: ");

          scanf("%f",&nuevo->promedio);

          printf("(P)rimaria o (B)achillerato");

          scanf("%c",&nivel);

          switch(nivel){

                       case 'P': nuevo->nivel=PRIMARIA;break;

                       case 'B': nuevo->nivel=BACHILLERATO;break;

          }

          aux=lista;

          while(aux)

                aux->sig;

          aux->sig=nuevo;//Lo ubico al final de la lista donde aux->sig=NULL

}

La función que muestra las estadísticas hace el conteo de todos los casos:

void mostrar (struct nodo *lista)

{

          struct nodo *aux;

          int DestPri=0, DestBac=0, AcPri=0, AcBac=0, RegPri=0, RegBac=0;

          float AcDestPri=0, AcDestBac=0, AcAcPri=0, AcAcBac=0, AcRegPri=0, AcRegBac=0;

          aux=lista;

          while(aux->sig){

                  if(aux->nivel==PRIMARIA){

                              if(aux->promedio>8){

                                          DestPri++;

                                          AcDestPri+=aux->promedio;}

                                       ...//Según la nota se van incrementando el contador y el acumulador de cada categoría y grado.

                             }

                     if(aux->nivel==BACHILLERATO){

                                ....//Según la nota hago lo mismo que con los de primaria.

                     }

                  aux=aux->sig;

           }

           printf("Estudiantes destacados de primaria: %d, promedio %.2f\n",DestPri,AcDestPri/DestPri);

           printf("Estudiantes aceptables de primaria: %d, promedio %.2f\n",AcPri,AcAcPri/AcPri);

           printf("Estudiantes regulares de primaria: %d, promedio %.2f\n",RegPri,AcRegPri/AcPri);

           printf("Estudiantes destacados de bachillerato: %d, promedio %.2f\n",DestBac,AcDestBac/DestBac);

           printf("Estudiantes aceptables de primaria: %d, promedio %.2f\n",AcBac,AcAcBac/AcBac);

           printf("Estudiantes regulares de primaria: %d, promedio %.2f\n",RegBac,AcRegBac/AcBac);

}

Respuesta dada por: zzute
0

Respuesta:

no te entendi xd

Explicacion:

∑⊂⊃∝

Preguntas similares