Páginas: [1]
|
 |
|
Autor
|
Tema: problema sencillo! creo xD (Leído 227 veces)
|
ak47prg
Desconectado
Mensajes: 38
Uso las ventajas del Software, Propietario o Libre
|
tengo este codigo:
# include <iostream.h> #include <conio.h> class alumno { public: int matricula, cal1, cal2, cal3; double promedio; char nombre[10]; void calcular() { promedio = (cal1 + cal2 + cal3)/3.0; } void capturar () { cout <<"Matricula : "; cin >>matricula; cout <<"Nombre : "; cin >>nombre; cout <<"Calificacion 1 : "; cin >>cal1; cout <<"Calificacion 2 : "; cin >>cal2; cout <<"Calificacion 3 : "; cin >>cal3; clrscr(); } }; void main () { alumno a1, a2, a3, a4, a5, mejor, mayor, menor; a1.capturar (); a2.capturar (); a3.capturar (); a4.capturar (); a5.capturar (); a1.calcular (); a2.calcular (); a3.calcular (); a4.calcular (); a5.calcular (); if (a1.promedio > a2.promedio) { mejor =a1; } else { mejor =a2; } if (a3.promedio > mejor.promedio) { mejor =a3; } if (a4.promedio > mejor.promedio) { mejor =a4; } if (a5.promedio > mejor.promedio) { mejor =a5; } cout<<mejor.nombre; cout<<mejor.matricula; cout<<mejor.promedio; getche (); }
lo que hace, es queagarra los datos de 5 alumnos, cada 1 es un objeto y luego te sale con el IF, cual es el mejor y luego despliega 1, el mejor, pero me piden que los despliegue del mayor al menor, ese pedazo como lo hago :S?
lo unico que falta es que los saque del mayor al menor, en lista, o como sea, pero que haga eso
|
|
|
|
|
En línea
|
Respeto es, que nadie te infunda ideas de usar su software, si no que dejen que tu mismo lo escojas, lo que satisfaga tus necesidades.
|
|
|
Flakito81
Desconectado
Mensajes: 350
|
Hola! Lo que tienes que hacer es declarar un array de objetos, una vez hagas el cálculo para cada objeto ordenas el array por el promedio. Por otro lado te sugiero que no uses los atributos con la clausula public, lo normal es que uses la clausula private o protected. Te falta el constructor y destructor (aunque en este caso no hacen nada). Las calificaciones podrias tenerlas en un array. Te pongo un codigo ejemplo. La ordenacion la he hecho usando el metodo de la burbuja, es tremendamente lento, pero si quieres uno mas rapido implementa el metodo quicksort o heapsort. #include <iostream> #define ASIGNATURAS 3 #define ALUMNOS 3 using namespace std; class alumno { private: int matricula; float cal[ASIGNATURAS]; char nombre[10]; float promedio; public: alumno(void); ~alumno(void); void calcular(); void capturar(); char *GetName(void); int GetMatricula (void); float GetPromedio(void); void ShowInfo(void); }; alumno::alumno (void) { } alumno::~alumno(void) { } char *alumno::GetName() { return nombre; } int alumno::GetMatricula () { return matricula; } float alumno::GetPromedio() { return promedio; } void alumno::calcular() { float sigma = 0.0; int i; for (i = 0; i < ASIGNATURAS; ++ i) sigma += cal[i]; promedio = sigma/ASIGNATURAS; } void alumno::capturar () { int i; cout <<"Matricula : "; cin >>matricula; cout <<"Nombre : "; cin >>nombre; for (i = 0; i < ASIGNATURAS; ++i) { cout <<"Calificacion " << i + 1 <<" : "; cin >> cal[i]; } } void alumno::ShowInfo(void) { //- Aunque puedo acceder a los atributos directamente, lo hago por metodos cout << "NOMBRE: " << GetName() <<endl; cout << "MATRICULA: " << GetMatricula() <<endl; cout << "PROMEDIO: " << GetPromedio() << endl; //mejor hacerlo por metodos } //--- METODOS QUE NO PERTENECEN A LA CLASE --- /* Ordenacion por el metodo de la burbuja (bubble sort) */ void bubble(alumno *alu, int end) { int i, j; alumno aux; for (i = 0; i < end; i++) for (j = 0; j < end - 1; ++j) if (alu[j].GetPromedio() > alu[j + 1].GetPromedio()) { //-- intercambio (swap) aux = alu[j]; alu[j] = alu[j+1]; alu[j+1] = aux; } } //-- PROGRAMA PRINCIPAL --- int main () { int i; alumno alu[ALUMNOS]; for (i = 0; i < ALUMNOS; ++i) alu[i].capturar(); for (i = 0; i < ALUMNOS; ++i) alu[i].calcular(); system ("cls"); //system ("clear"); // limpiamos la pantalla bubble(alu, ALUMNOS); //aki ordenamos cout << "El mejor alumno es: " << endl; alu[ALUMNOS-1].ShowInfo(); cout << "\nLISTADO DE MENOR A MAYOR PROMEDIO" << endl; for (i = 0; i < ALUMNOS; ++i) alu[i].ShowInfo(); system ("pause"); return 0; } Para listar de mayor a menor cambia el bucle final. Suerte!
|
|
|
|
|
En línea
|
|
|
|
|
Páginas: [1]
|
|
|
|