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
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:
no te entendi xd
Explicacion:
∑⊂⊃∝