Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: acega en 10 Septiembre 2013, 03:36 am



Título: N alumnos con clases
Publicado por: acega en 10 Septiembre 2013, 03:36 am
Hola estoy haciendo un programa que al ingresar tres calificaciones te da el promedio con clases y todo tipo de validaciones lógicas y corre bien pero solo para un alumno ahora quiero que sea para n alumnos pero no se bien como, estaba pensando en que fuera un arreglo bidimensional pero no supe como poner los for anidados en las clases aquí esta el código:
 
Código:
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>


class calificaciones
{
 public:
  calificaciones();

  void ingresar();
  float calcular();
  void mostrar();

 private:
  float c1;
  float c2;
  float c3;
  int nc;
  float prom;
};

calificaciones::calificaciones()
{
 c1=c2=c3=prom=0.0;
 nc=0;
}

void calificaciones::ingresar()
{

 clrscr();
 cout<<"\n\t\tInstrucciones: Ingrese valores enteros o decimales "<<endl;
 cout<<" \t\tcon el rango del 0 al 10"<<endl;
 cout<<"\t\tPara el numero de cuenta deberan ser de 7 digitos...";
 cout<<"\n\n\tIngrese numero de cuenta: ";
 cin>>nc;
 while(nc>9999999||nc<999999)
  {
   cout<<"\n\t\aNumero de cuenta incorrecto, verifiquelo e ingrese de nuevo: ";
   cin>>nc;
  }

  cout<<"\n\tIngrese calificacion de primer parcial: ";
  cin>>c1;
  while(c1>10||c1<0)
  {
   cout<<"\n\t\aValor invalido! Ingrese calificacion de primer parcial: ";
   cin>>c1;
  }

  cout<<"\n\tIngrese calificacion de segundo parcial: ";
  cin>>c2;
  while(c2>10||c2<0)
  {
   cout<<"\n\t\aValor invalido! Ingrese calificacion de segundo parcial: ";
   cin>>c2;
  }
  cout<<"\n\tIngrese calificacion de tercer parcial: ";
  cin>>c3;
  while(c3>10||c3<0)
  {
   cout<<"\n\t\aValor invalido! Ingrese calificacion de tercer parcial: ";
   cin>>c3;
  }


}

float calificaciones::calcular()
{

 clrscr();
 prom=(c1+c2+c3)/3;
 return prom;

}


void calificaciones::mostrar()
{
 clrscr();
 cout<<"\n ºNo de Cuentaº"//<<nc;
     <<"\t  º1er Parcialº"//<<c1;
     <<"\t  º2do Parcialº"//<<c2;
     <<"\t  º3er Parcialº"//<<c3;
     <<"\t   º Promedio º";//<<prom;
 gotoxy(69,5);
 //nc=233552;
 //c1=7.1;
 //c2=7.1;
 //c3=7.1;

 if(prom<7) cout<<" Reprobado";
 else
 {
  gotoxy(71,5);
  cout<<"Aprobado";
 }
 gotoxy(7,4);
 cout<<nc;
 gotoxy(24,4);
 cout<<c1;
 gotoxy(40,4);
 cout<<c2;
 gotoxy(56,4);
 cout<<c3;
 gotoxy(73,4);
 cout<<prom;

}

main ()
{
 calificaciones m;
 int ans;
 int ciclo;
 flag:

 clrscr();
 cout<<"\n\t\tQue desea hacer?\n"
     <<"\n\t\t1.-Ingresar\n"
     <<"\n\t\t2.-Calcular\n"
     <<"\n\t\t3.-Mostrar\n"
     <<"\n\t\t4.-Salir\t";
 cin>>ans;



 switch (ans)
 {
  case 1:
   m.ingresar();
   cout<<endl<<"Guardado para regresar al menu presione 7...\t";
   cin>>ciclo;
   while(ciclo!=7)
   {
    cout<<"\n\t\aTecla incorrecta! presiona 7: ";
    cin>>ciclo;
   }
  break;
  case 2:
   m.calcular();
   cout<<endl<<"\n\n\n\n\n\n\n\n\n\t\tCalculando para regresar al menu presione 7...\t";
   cin>>ciclo;
   while(ciclo!=7)
   {
    cout<<"\n\t\aTecla incorrecta! presiona 7: ";
    cin>>ciclo;
   }
  break;
  case 3:
   m.mostrar();
   cout<<endl<<"\n\n\n\t\tHa terminado de leer? presione 7\t";
   cin>>ciclo;
   while(ciclo!=7)
   {
    cout<<"\n\t\aTecla incorrecta! presiona 7: ";
    cin>>ciclo;
   }
  break;
  case 4:
   clrscr();
   cout<<"\n\n\t\tSaliendo...\a\a\a";
   getch();
   exit(1);
  break;

  default:
   for (int i=0;i<1;i++)
   {
   cout<<"\n\n\t\tOpcion invalida vuelva a intentarlo...";
   getch();
   }
   goto flag;

 }

 while (ciclo==7)
 goto flag;
 getch();

 return 0;
}
Espero me puedan ayudar saludos!!


Título: Re: N alumnos con clases
Publicado por: Alien-Z en 10 Septiembre 2013, 11:38 am
Citar
ahora quiero que sea para n alumnos pero no se bien como

Crea un objeto de la clase "calificaciones" por cada alumno. Si sabes cuántos alumnos van a haber como máximo (N) almacénalos en un array:

Código
  1. calificaciones arrayCalificaciones [N];

Pero si es el usuario el que te dirá la cantidad de alumnos en tiempo de ejecución (mientras el programa está corriendo) deberás hacerlo con memoria dinámica (una lista o un array dinámico por ejemplo).

Código
  1. ...
  2. goto flag;
  3. ...

Esta instrucción está prohibidísima; puedes hacer exactamente lo mismo con un bucle externo.


Otras cosas:

-iostream (input output stream) es una librería de C++ y no lleva la extensión ".h", es decir, se incluye así: #include <iostream>
-No utilices conio.h: http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html
-Procura crear variables con identificadores más significativos: c1, c2, c3...
-Las normas standard de correcta programación señalan que todos los identificadores empiezan por minúscula excepto el de una clase: Calificaciones

Un saludo.


Título: Re: N alumnos con clases
Publicado por: acega en 13 Septiembre 2013, 03:20 am
Muchas gracias había olvidado que podía ser un objeto de tipo array, hoy me lo recordó mi maestra ya lo implemente pero en la función mostrar ya no imprime nada pienso también que podría ser por el "goto" que mencionabas antes, y sobre lo ultimo no lo había tomado en cuenta antes gracias!


Título: Re: N alumnos con clases
Publicado por: Alien-Z en 13 Septiembre 2013, 11:34 am
Muchas gracias había olvidado que podía ser un objeto de tipo array, hoy me lo recordó mi maestra ya lo implemente pero en la función mostrar ya no imprime nada pienso también que podría ser por el "goto" que mencionabas antes, y sobre lo ultimo no lo había tomado en cuenta antes gracias!

No hay de qué. Si posteas el código corregido se podría mirar por qué no funciona el método "mostrar()".

Un saludo.


Título: Re: N alumnos con clases
Publicado por: acega en 8 Octubre 2013, 23:51 pm
Hola perdón por la tardanza pues resulta que ahora ya no tengo problemas con el método mostrar sino que en este código ya más modificado para que sea con 2 materias quiero sacar el promedio de las dos materias y el promedio del grupo de n alumnos pero no se como ya que declaré las materias como objetos
Código:

#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <iomanip.h>



class Calificaciones
{

 public:

  Calificaciones();

  void acceder();
  void ingresar();
  void calcular();
  void mostrar();
  void mostrarDatos();
  void validar();

 private:

  float c1;
  float c2;
  float c3;
  int nc;
  float prom;

};

Calificaciones::Calificaciones()
{

 c1=c2=c3=prom=0.0;
 nc=0;

}

void Calificaciones::acceder()
{
 cout<<"\n\n\tIngrese numero de cuenta: ";
 cin>>nc;

 while( nc>999999 || nc<99999 )
  {
   cout<<"\n\t\aNumero de cuenta incorrecto, verifiquelo e ingrese de nuevo: ";
   cin>>nc;
  }

}
void Calificaciones::ingresar()
{

 cout<<"\n\tIngrese calificacion de primer parcial: ";
 cin>>c1;
 cout<<"\n\tIngrese calificacion de segundo parcial: ";
 cin>>c2;
 cout<<"\n\tIngrese calificacion de tercer parcial: ";
 cin>>c3;
 clrscr();

}

void Calificaciones::validar()
{
 c1 = (c1>=0&&c1<=10) ? c1 : 0;
 c2 = (c2>=0&&c2<=10) ? c2 : 0;
 c3 = (c3>=0&&c3<=10) ? c3 : 0;
}

void Calificaciones::calcular()
{

  cout<<"\n\n\n\n\n\n\n\n\n\n\tEl promedio del alumno: "<<nc<<"  se esta calculando...";
  validar();
  prom=(c1+c2+c3)/3;


}


void Calificaciones::mostrar()
{
  //cout<<nc//cuenta que no se repita??
  cout<<setprecision(2)
      <<c1
      <<"     "<<c2
  <<"     "<<c3
      <<setiosflags( ios::fixed || ios::showpoint )
  <<"    "<<prom
      <<( prom < 7 ? " NA" : "  A");

}
void Calificaciones::mostrarDatos()
{

cout<<endl<<" "<<nc<<" ";//cuenta que no se repita??

}

main ()
{

 Calificaciones mat1[' '],mat2[' '];

 int ans,n,i,j,k;   //porque no reconoce i,j,k??
 char regreso='M';
 char ciclo='s';

 cout<<"\n\n\n\t\t\tCuantos alumnos va a ingresar?\t ";
 cin>>n;

 while (ciclo=='s')
 {

  cout<<"\n\n\n\t\t\tQue desea hacer?\n"
      <<"\n\t\t1.-Ingresar\n"
      <<"\n\t\t2.-Calcular\n"
      <<"\n\t\t3.-Mostrar\n"
      <<"\n\t\t4.-Salir\t\t";
  cin>>ans;
  clrscr();


  switch (ans)
  {

   case 1:

    for ( i=1; i<=n; i++)
    {
     regreso='J';
     cout<<"\n\t\tInstrucciones:  Ingrese valores enteros o decimales\n "
      <<" \t\t\t\tcon el rango del 0 al 10\n"
      <<"\t\tPara el numero de cuenta deberan ser de 6 digitos...\0";

     mat1[i].acceder();
     mat1[i].ingresar();
     cout<<"\nMATERIA 2:"<<endl;
     //mat2[i].acceder()=mat1[i].acceder();
     mat2[i].ingresar();
    }

   break;

   case 2:

    clrscr();
    for ( j=1; j<=n; j++)
    {

     if(regreso=='M')
     {
      cout<<"\n\aPrimero ingrese calificaciones para despues calcular!";
     }
     else
     {
      clrscr();
      cout<<endl;
      mat2[j].calcular();
      clrscr();
      mat1[j].calcular();


     }

     getchar();

    }
    clrscr();

   break;

   case 3:

    clrscr();
    cout<<endl<<"                       MATERIA1         MATERIA2 "<<endl;
    //cout<<"\t\tMATERIA1\t\t\t\tMATERIA2 "<<endl;
    cout<<"ºNo_Ctaº"
     <<"     ºC1º"
     <<"   ºC2º"
     <<"   ºC3º"
     <<"  ºPromº"
     <<"    ºC1º"
     <<"   ºC2º"
     <<"   ºC3º"
     <<"  ºPromº\n";

    for ( k=1; k<=n; k++)
    {

     if(regreso=='M')
     {
      cout<<"\n\aNO hay datos para mostrar!!!";
     }
     else
     {
       mat1[k].mostrarDatos();
       cout<<"     ";
       mat1[k].mostrar();
       cout<<"      ";
       mat2[k].mostrar();
     }

     getchar();

    }
    clrscr();

   break;

   case 4:

    clrscr();
    cout<<"\n\n\t\tSaliendo...\a\a\a";
    ciclo='a';

   break;

   default:

    cout<<"\n\n\n\n\t\t\aOpcion invalida vuelva a intentarlo...";

   break;

  }//switchEnd

 }//endWhile

 getchar();

 return 0;
Ahh por cierto intente quitar la de conio.h y remplazarla por otro pero no encontré ninguna eficiente para pausar todas tenían sus desventajas además interrumpe el uso de gotoxy si no la pongo...