elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Ingresar Registrarse
08 Octubre 2008, 12:51  



+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderador: ®®)
| | |-+  problema sencillo! creo xD
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Imprimir
Autor Tema: problema sencillo! creo xD  (Leído 227 veces)
ak47prg

Desconectado Desconectado

Mensajes: 38


Uso las ventajas del Software, Propietario o Libre


Ver Perfil
problema sencillo! creo xD
« en: 17 Abril 2008, 04:19 »

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 Desconectado

Mensajes: 350



Ver Perfil
Re: problema sencillo! creo xD
« Respuesta #1 en: 18 Abril 2008, 02:34 »

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.
Código
#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] Ir Arriba Imprimir 
Ir a:  







Consolas     La Web de Goku     MilW0rm     MundoDivx

Hispabyte     Truzone     TodoReviews     ZonaPhotoshop

hard-h2o modding    Foros de ayuda    Yashira.org    Videojuegos    indetectables.net   

Noticias Informatica    Seguridad Informática    ADSL    Foros en español    eNYe Sec

Todas las webs afiliadas están libres de publicidad engañosa.

Powered by SMF 1.1.6 | SMF © 2006-2008, Simple Machines LLC