Ayuda en C++

Iniciado por Trapito, 10 Febrero 2014, 19:35 PM

0 Miembros y 1 Visitante están viendo este tema.

Trapito

Hola amigos tengo este codigo ya lo tengo resuelto pero me tira errores y no he podido descifrarlos, es referente a arreglos con objetos,si alguien me ayuda estare agradecido.

#include <iostream>

using namespace std;

class Alumno
{
      private:
               int id;
               float calificacion;
     
      public:
              Alumno()
              {
                     id=0;
                     calificacion=0;
              }
             
              void SetId(int idx)
              {
                     id=idx;
              }
             
              void SetCalificacion(float cal)
              {
                     calificacion=cal;
              }
             
              int GetId()
              {
                     return id;
              }
             
              float GetCalificacion()
              {
                     return calificacion;
              }
     
};


int main()
{
    int n, i;
    float aux;
    cout<<"PROMEDIO DE LOS ALUMNOS."<<endl<<endl;
    cout<<"¿Cuántos alumnos son?: ";
    cin>>n;
    cout<<"Debe ingresar cada una de las calificaciones de los alumnos, el id se asignará en el orden es que se ingresan los datos."<<endl<<endl<<endl;
   
    Alumno Alumnos[n];
   
    for (i=0; i<n; i++)
    {
        cout<<"Ingrese la calificación del estudiante identificado con el id: "<<i+1<<": ";
        cin>>aux;
        Alumnos.SetId(i+1);
        Alumnos.SetCalificacion(aux);
    }
   
   
    cout<<endl<<endl<<endl<<"Lista de alumnos con su respectivas notas: "<<endl;
    aux=0;
    for(i=0; i<n; i++)
    {
        cout<<"Id Alumno: "<<Alumnos.GetId()<<"    ->  Nota: "<<Alumnos.GetCalificacion()<<endl;
        aux+=Alumnos.GetCalificacion();
    }
   
   
    cout<<endl<<endl<<endl<<"El promedio de los alumnos es: "<<aux/n<<endl;
   
   
   
    cout<<endl<<endl<<endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}

la compilacion me tira un error en funcion main ,expresion constante requerida, ya lo hecho como 500 veces pero no hay caso,hay algo que se me esta pasando y me ha quemado las neuronas.

Trapito

En Dev C++ no me tira errores pero si en el Borland????

Yoel Alejandro

#2
Enhora buena, tengo tu error!!

Era fácil, recuerdas que Alumnos es un arreglo cuyo i-ésimo elemento es un objeto de la clase Alumno. Por tanto, por ejemplo en la instrucción:

Código (cpp) [Seleccionar]

Alumnos.SetId(i+1);


has de poner

Código (cpp) [Seleccionar]

Alumnos[i].SetId(i+1);


y así en otras similares. He arreglado todo tu código como se muestra al final, lo compilé y probé y me parece que funciona como se espera (no se, confírmame).

Otros detallitos, primero se recomienda que cuando insertes código uses el estilo C++ en el tipo de etiqueta GesHi, eso hará que tu código quede formateado al estilo C++ y sea más legible (de la misma forma que yo lo hago en este post).

Además, te faltó la cabecera, <stdlib.h> que contiene la macro EXIT_SUCCESS, que por cierto es usual poner dentro de una instrucción exit(), y no una return().
Por último, para hacer to programa independiente del sistema operativo (Windows o no Windows), cambia el system("PAUSE") por getchar(), para lo cual debes incluir la cabecera <stdio.h>

Aquí tu programa arreglado:

Código (cpp) [Seleccionar]

#include <stdlib.h>
#include <stdio.h>
#include <iostream>

using namespace std;

class Alumno
{
private:
int id;
float calificacion;

public:
Alumno()
{
id=0;
calificacion=0;
}

void SetId(int idx)
{
id=idx;
}

void SetCalificacion(float cal)
{
calificacion=cal;
}

int GetId()
{
return id;
}

float GetCalificacion()
{
return calificacion;
}

};


int main()
{
   int n, i;
   float aux;
   char c;
   cout<<"PROMEDIO DE LOS ALUMNOS."<<endl<<endl;
   cout<<"¿Cuántos alumnos son?: ";
   cin>>n;
   cout<<"Debe ingresar cada una de las calificaciones de los alumnos, el id se asignará en el orden es que se ingresan los datos."<<endl<<endl<<endl;
 
   Alumno Alumnos[n];
 
   for (i=0; i<n; i++)
   {
       cout<<"Ingrese la calificación del estudiante identificado con el id: "<<i+1<<": ";
       cin>>aux;
       Alumnos[i].SetId(i+1);       /* aquí acomodamos */
       Alumnos[i].SetCalificacion(aux);      /* aquí también */
   }
 
 
   cout<<endl<<endl<<endl<<"Lista de alumnos con su respectivas notas: "<<endl;
   aux=0;
   for(i=0; i<n; i++)
   {
       /* ... y aquí */
       cout<<"Id Alumno: "<<Alumnos[i].GetId()<<"    ->  Nota: "<<Alumnos[i].GetCalificacion()<<endl;
       /* ... y aquí */
       aux+=Alumnos[i].GetCalificacion();
   }
 
   cout<<endl<<endl<<endl<<"El promedio de los alumnos es: "<<aux/n<<endl;
 
   cout<<endl<<endl<<endl;
   
   getchar();
   exit(EXIT_SUCCESS);
}
Saludos, Yoel.
P.D..-   Para mayores dudas, puedes enviarme un mensaje personal (M.P.)

rir3760

Cita de: yoel_alejandro en 10 Febrero 2014, 21:29 PMEra fácil, recuerdas que Alumnos es un arreglo cuyo i-ésimo elemento es un objeto de la clase Alumno. Por tanto, por ejemplo en la instrucción:

Código (cpp) [Seleccionar]

Alumnos.SetId(i+1);


has de poner

Código (cpp) [Seleccionar]

Alumnos[i].SetId(i+1);


y así en otras similares. He arreglado todo tu código como se muestra al final, lo compilé y probé y me parece que funciona como se espera (no se, confírmame).

Otros detallitos, primero se recomienda que cuando insertes código uses el estilo C++ en el tipo de etiqueta GesHi
El uso de indices si ocurre en el programa. Lo que sucede es, al no utilizar las etiquetas de código, la primera ocurrencia de "[ i ]" (por supuesto sin espacios) se toma como el inicio de texto en cursiva.

El error que comenta Trapito se debe a la declaración:
Código (cpp) [Seleccionar]
int n, i;

// ...

Alumno Alumnos[n];

Ya que el numero de elementos "n" del array sera un valor calculado en tiempo de ejecución cuando se espera una constante.

Aquí lo mejor es, en lugar del array, utilizar la clase vector incluyendo el encabezado del mismo nombre, para ejemplos sobre su uso lo mejor es utilizar el motor de búsqueda de los foros.

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language