elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  N alumnos con clases
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: N alumnos con clases  (Leído 3,143 veces)
acega

Desconectado Desconectado

Mensajes: 14


Ver Perfil
N alumnos con clases
« 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!!


En línea

Alien-Z

Desconectado Desconectado

Mensajes: 177


C++ Programmer


Ver Perfil
Re: N alumnos con clases
« Respuesta #1 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.


« Última modificación: 10 Septiembre 2013, 11:50 am por Alien-Z » En línea

acega

Desconectado Desconectado

Mensajes: 14


Ver Perfil
Re: N alumnos con clases
« Respuesta #2 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!
En línea

Alien-Z

Desconectado Desconectado

Mensajes: 177


C++ Programmer


Ver Perfil
Re: N alumnos con clases
« Respuesta #3 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.
En línea

acega

Desconectado Desconectado

Mensajes: 14


Ver Perfil
Re: N alumnos con clases
« Respuesta #4 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...
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Codigo Alta de Alumnos « 1 2 »
Programación C/C++
DJINVACION 13 20,158 Último mensaje 10 Diciembre 2015, 23:07 pm
por 0rkud
El 14% de los nuevos alumnos universitarios procede de la FP
Foro Libre
wolfbcn 1 2,404 Último mensaje 7 Junio 2011, 00:10 am
por Last_
Descuido de alumnos de FP informatica
Hacking
risto 0 2,393 Último mensaje 28 Marzo 2012, 12:57 pm
por risto
Registras notas alumnos en array con Swing
Java
fcosun 0 2,145 Último mensaje 15 Noviembre 2014, 04:06 am
por fcosun
Mis alumnos y sus extraños métodos de estudio: el escándalo “De Memory” « 1 2 »
Foro Libre
El_Andaluz 15 6,251 Último mensaje 20 Febrero 2015, 15:49 pm
por _Enko
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines