[?]Estructuras y funciones.

Iniciado por Ultra Holocaust, 22 Junio 2015, 05:02 AM

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

Ultra Holocaust

Hola, soy nuevo y tengo un problema con este ejercicio para c++ que reza así :

Escribir un algoritmo que gestiona las notas de una clase de 4 alumnos de los cuales sabemos el nombre y la nota. El programa debe ser capaz de:
1.   Buscar un alumno.
2.   Modificar alguna nota.
3.   Realizar la media de todas las notas.
4.   Realizar la media de las notas menores de 5.
5.   Mostrar el alumno que mejores notas ha sacado.
6.   Mostrar el alumno que peores notas ha sacado.

Puede realizar todas la opciones del menú, excepto que cuando modifico una nota(opción 2), el promedio de la opción 3 y 4, no cambian,  estos siguen como si no se hubiese ejecutado la opción 2.
En La opción 5 y 6 por el contrario si toman en cuenta  la modificación de la opción 2.
Gracias de antemano  :rolleyes: .



#include<iostream.h>
#include<conio.h>
#include<string.h>
#define max 4

struct alumno
{
char nom[15];
float nota;
};

int menu()
{
   int op;
   cout<<endl;
   cout<<"\t------MENU------"<<endl;
   cout<<"\t[1]Buscar Alumno "<<endl;
   cout<<"\t[2]Modifica alguna nota "<<endl;
   cout<<"\t[3]Realizar la media de todas las notas "<<endl;
   cout<<"\t[4]Realizar la media de las notas menores de 05 "<<endl;
   cout<<"\t[5]Mostrar el alumno que mejor nota ha sacado "<<endl;
   cout<<"\t[6]Mostrar el alumno que peor nota ha sacado "<<endl<<endl;
   
   do{
   cout<<"Eliga una opcion : ";
   cin>>op;}while(op<1||op>6);
   
   return op;
   
}

void ingreso(alumno e[], int n)  
{    int i;

    for(i=1;i<=n;i++)
   {cout<<"Nombre del alumno "<<i<<" : ";
    fflush(stdin);
    gets(e[i].nom);
    do{
    cout<<"Nota "<<i<<" : ";
    cin>>e[i].nota;}while(e[i].nota<0||e[i].nota>20);
    }
   
 
}    


int busqueda(alumno e[], int n)    
{    int i,pos=0;
    char alu[max];
       
    cout<<"Ingrese el nombre del alumno en minuscula : ";
    fflush(stdin);
    gets(alu);
    for(i=1;i<=n;i++)
    {
    if(strcmp(e[i].nom,alu)==0)
       {pos=i;
        n=i;}
    }

  return pos;

}      

void mostrarbusqueda(alumno e[], int n)
{  int pos;

  pos=busqueda(e , n);
  cout<<"El alumno "<<e[pos].nom<<" esta en la posicion "<<pos<<" y tiene de nota "<<e[pos].nota;
}

   
void modificar(alumno e[],int pos, int n)
{    int i;

    pos=busqueda(e, n);
    cout<<"Ingrese nota a modificar de tal alumno : ";
    cin>>e[pos].nota;
   
    for(i=1;i<=n;i++)
     {if(i==pos)
       {e[i].nota=e[pos].nota;
        break;}
     }

}    
           
float media(alumno e[],int &pos, int n)
{     int i;
     float suma=0,prom;
       
         
     for(i=1;i<=n;i++)
     {  suma=suma+e[i].nota;
     }
     
     prom=suma/n;
     
     return prom;
}      
       
float mediamenores(alumno e[], int n)
{     int a=0,i;
     float suma=0,prome;

     for(i=1;i<=n;i++)
     {
        if(e[i].nota<5)
       {suma=suma+e[i].nota;
        a=a+1;}
                             
     }
     
     prome=suma/a;
         
     return prome;
}          
       
void mostramejor(alumno e[], int n)
{
    int i,j,a,mayor=0;
   
   
    for(i=1;i<=n;i++)
    {a=0;
      for(j=1;j<=n;j++)
      { if(e[i].nota>=e[j].nota)
         {a=a+1;}
         else
         {a=a;}
      }
       
       if(a==n)
        {mayor=i;break;}
    }
   
cout<<a;    
cout<<"El alumno con la nota mas alta es " <<e[mayor].nom<<" con nota "<<e[mayor].nota;

}      
                     
void mostrapeor(alumno e[], int n)
{
    int i,j,b,menor;
   
   
    for(i=1;i<=n;i++)
    {b=0;
      for(j=1;j<=n;j++)
      { if(e[i].nota<=e[j].nota)
         {b=b+1;}  
               
         else
         {b=b;}
      }
       
       if(b==n)
        {menor=i;break;}
    }
   
cout<<b;    
cout<<"El alumno con la nota mas baja es " <<e[menor].nom<<" con nota "<<e[menor].nota;

}        
   
         
 int main()
{ alumno e[max];
   int op,pos,n;
   float pro,prome;
   n=max;
   
   ingreso(e,n);
   prome=mediamenores(e,n);
   pro=media(e,pos,n);
   
   
   
   do{system("cls");
   op=menu();          
   switch(op)
   {case 1 : mostrarbusqueda(e, n);getche();break;
    case 2 : modificar(e,pos,n);getche();break;
    case 3 : cout<<"El promedio de la clase : "<<pro;getche();break;
    case 4 : cout<<"El promedio de los alumnos con notas menor a 05 : "<<prome;getche();break;
    case 5 : mostramejor(e,n);getche();break;
    case 6 : mostrapeor(e,n);getche();break;
    }
    }while(op!=7);
    getche();
    return 0;
}