Arreglos en c++ ejercicios resueltos
c++ – tercio superior
Usando Struct, hacer un programa que permita ingresar n cantidad de alumnos, cógido, nombre, y tres notas, Nos debe mostrar los datos del alumno de forma ordenada por su promedio y sólo mostrar el tercio superior de la cantidad de alumnos.
#include<iostream.h>
#include<conio.h>
#define lim 100
struct alumno{
char codigo[9];
char nombre[20];
int nota1;
int nota2;
int nota3;
};
void leer(int, struct alumno[]);
void ordenar(int , struct alumno[]);
void listado(int, struct alumno[]);
void main()
{int n;
struct alumno alu[lim];
cout<<"Cantidad de alumnos:"; cin>>n;
leer(n,alu);
ordenar(n,alu);
cout<<"Orden segun su promedio:"<<endl;
listado(n,alu);
getch();
}
void leer(int n, struct alumno x[])
{int i;
for(i=0;i<n;i++)
{cout<<"Codigo :"; cin>>x[i].codigo;
cout<<"Nombre :"; cin>>x[i].nombre;
cout<<"Nota 1 :"; cin>>x[i].nota1;
cout<<"Nota 2:"; cin>>x[i].nota2;
cout<<"Nota 3:"; cin>>x[i].nota3;
}
getch();
}
void ordenar( int n, struct alumno x[])
{int i,j;
struct alumno temp;
for(i=1;i<n;i++)
for(j=n-1;j>=i; j--)
if((x[j-1].nota1+x[j-1].nota2+x[j-1].nota3)/3<(x[j].nota1+x[j].nota2+x[j].nota3)/3)
{temp=x[j-1];
x[j-1]=x[j];
x[j]=temp;
}
}
void listado(int n, struct alumno x[])
{int i;
for(i=0;i<n/3;i++)
{cout<<x[i].codigo<<"\t";
cout<<x[i].nombre<<"\t";
cout<<x[i].nota1<<"\t";
cout<<x[i].nota2<<"\t";
cout<<x[i].nota3<<"\t";
cout<<(x[i].nota1+x[i].nota2+x[i].nota3)/3<<endl;
}
}
- Se puede notar que al mostrar el orden según su promedio sólo nos muestra uno, y esto es el tercio superior.
- Al ingresar los datos, éste nos pedía cantidad de alumnos a ingresar y nosotros digitamos 3, es así si queremos encontrar el tercio superior según la nota más alta de los alumnos éste nos mostrará sólo uno.
- Si fuera el caso de que ingresamos en cantidad de alumnos 6, éste nos mostrará al final sólo los dos primeros alumnos con más alto promedio, que equivale al tercio superior.
- Para encontrar el tercio superior, sólo basta con dividir la cantidad de alumnos (n) dividido entre “3”.