Tabla en C++

Iniciado por Gagy, 10 Marzo 2013, 16:19 PM

0 Miembros y 2 Visitantes están viendo este tema.

Gagy

Tengo un problema que contiene una tabla, la cuál representa la nota de varios alumnos en los tres distintos trimestres que contiene el curso:1ª,2ª y 3ª evaluación. La primera evaluación cuenta un 20% de la nota final, la segunda un 40 % de la nota final y la tercera otro 40% de la nota final.
Tengo que:
  - Calcular la nota final de cada alumno, aplicando los porcentajes correspondientes y haciendo la media.
  - Escribir nombre del alumno con la nota más alta y la nota más baja.

Aquí una imagen para aclarar el problema:
http://imageshack.us/photo/my-images/826/foto100313160749.jpg/

¿Cómo se calcula la nota media teniendo en cuenta los porcentajes?
Errores del código comentarlos.
A ver si podemos sacar el problema. Aquí el código:

Código (cpp) [Seleccionar]
#include <iostream>
using namespace std;
int main()
{
   char evaluaciones [3][6] ={"Primera evaluacion", "Segunda evaluacion", "Tercera evaluacion"};
   char a,nombres [6][9]={ "Juan","Pepe" ,"Antonio" ,"Ana " ,"Alfonso","Mercedes"};;
   float matriz[][4]= {{1   ,   5.2   ,  6.2    ,    8},
                       {2   ,   6.1   ,   7     ,    8},
                       {3   ,   3.7   ,   2.6   ,    4},
                       {4   ,   8     ,   8.6   ,    9 },
                       {5   ,   2.3   ,   2.4   ,    3},
                       {6   ,   7.2   ,   7.7   ,    8.7 }};
    int i,j ,indice;
   float suma=0,mayor=0;
   for(i=0;i<3;i++)
       cout<<"    "<<evaluaciones [i];
   cout<<endl;

    for (i=0;i<6;i++)
       {
           for(j=1;j<4;j++)
               {
                   if (j>=1)
                       suma +=matriz[i][j];
                   if (j==0)
                       cout<<"      "<<nombres[i];
                   cout<<"        "<<matriz[i][j];
                }
  cout<<endl<<"El alumno con mas nota es "<<nombres [indice]<<" con "<< mayor<<" puntos de media "<<endl<<endl;
    mayor=0;
    for(j=1;j<4;j++)
       {
           for(i=0;i<6;i++)
               suma+=matriz[i][j];
    cin.get();
   return 0;
}

leosansan

Cita de: jps96 en 10 Marzo 2013, 16:19 PM
.......................................................................
¿Cómo se calcula la nota media teniendo en cuenta los porcentajes?


Supongo que las notas máximas y mínimas se refieren a las medias. Si no es así avisa:

Código (cpp) [Seleccionar]
           1ªh evaluacion           2ªh evaluacion           3ªh evaluacion
    Juan           5.2                         6.2                         8        La nota media de Juan es 6.72
    Pepe           6.1                         7                         8        La nota media de Pepe es 7.22
Antonio           3.7                         2.6                         4        La nota media de Antonio es 3.38
    Ana            8                         8.6                         9        La nota media de Ana  es 8.64
Alfonso           2.3                         2.4                         3        La nota media de Alfonso es 2.62
Mercedes           7.2                         7.7                         8.7        La nota media de Mercedes es 8

El alumno con mas nota media es Ana  con 8.64 puntos


El alumno con menos nota media es Alfonso con 2.62 puntos



Y el código:

Código (cpp) [Seleccionar]
#include <iostream>
using namespace std;
int main()
{
   char evaluaciones [3][20] ={"1\xA6h evaluacion", "2\xA6h evaluacion", "3\xA6h evaluacion"};
   char a,nombres [6][9]={ "Juan","Pepe" ,"Antonio" ,"Ana " ,"Alfonso","Mercedes"};;
   float matriz[][4]= {{1   ,   5.2   ,  6.2    ,    8},
                       {2   ,   6.1   ,   7     ,    8},
                       {3   ,   3.7   ,   2.6   ,    4},
                       {4   ,   8     ,   8.6   ,    9 },
                       {5   ,   2.3   ,   2.4   ,    3},
                       {6   ,   7.2   ,   7.7   ,    8.7 }};
    float porcentaje[4]={0,0.20,0.4,0.4};
    int i,j ,indice,indice1;
   float suma=0,mayor=0,menor=12;
   for(i=0;i<3;i++){
        cout.width(25);
       cout<<evaluaciones [i];
   }

   cout<<endl;
    for (i=0;i<6;i++)
        {
            for(j=0;j<4;j++)
                {
                    if (j>=1){
                        suma +=matriz[i][j]*porcentaje[j];
                        cout<<"           "<<matriz[i][j];
                        cout.width(25);
                    }

                    if (j==0){
                        cout.width(8);
                        cout<<nombres[i];
                    }


                 }

            cout<<"        La nota media de "<<nombres [i]<<" es "<<suma<<endl;
            if (suma>mayor)
                {
                    mayor=suma;
                    indice=i;
                }
            if (suma<menor)
                {
                    menor=suma;
                    indice1=i;
                }
            suma=0;
        }

    cout<<endl<<"El alumno con mas nota media es "<<nombres [indice]<<" con "<< mayor<<" puntos "<<endl<<endl;
    cout<<endl<<"El alumno con menos nota media es "<<nombres [indice1]<<" con "<< menor<<" puntos "<<endl<<endl;
    cin.get();
   return 0;
}



Saluditos!. ...

Gagy

Muuuuchas gracias leosansan!
Sólo tengo una pregunta:
¿cout.width se podría sustituir por una expresión más sencilla, ya que mi profesor no nos la ha explicado?

leosansan

Cita de: jps96 en 10 Marzo 2013, 17:52 PM
.....................................
¿cout.width se podría sustituir por una expresión más sencilla, ya que mi profesor no nos la ha explicado?

Tendría que usar la librería iomanip, que supongo que tampoco la habéis visto, con que sólo queda jugar con los espacios en blanco con cout<<"    ";. Claro que podrías aprovechar para que tu profesor viera como se formatea una salida por pantalla. Es que yo me muevo más en C y ahí tenemos la artillería pesada de printf. Aunque en C++ también hay opciones, aunque a mi e parecen más enrevesadas, pero es lo que hay.

Saluditos!. ....


amchacon

Puedes usar /t como si de un printf se tratase:

cout<<"/t tal y tal";
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

Gagy

Le he quitado los cout.width sin poner nada en su lugar y los resultados no varían ni nada. ¿Es esto posible o tiene algún "efecto secundario"?

leosansan

Cita de: jps96 en 10 Marzo 2013, 19:25 PM
Le he quitado los cout.width sin poner nada en su lugar y los resultados no varían ni nada. ¿Es esto posible o tiene algún "efecto secundario"?

No, ya vi que no hacían mucho efecto en este caso. SI usas \t como indica amchacon tendrías algo como esto:

Código (cpp) [Seleccionar]
        1ªh evaluacion  2ªh evaluacion  3ªh evaluacion
Juan            5.2     6.2     8       La nota media de Juan es 6.72
Pepe            6.1     7       8       La nota media de Pepe es 7.22
Antonio         3.7     2.6     4       La nota media de Antonio es 3.38
Ana             8       8.6     9       La nota media de Ana es 8.64
Alfonso         2.3     2.4     3       La nota media de Alfonso es 2.62
Mercedes                7.2     7.7     8.7     La nota media de Mercedes es 8

El alumno con mas nota media es Ana con 8.64 puntos


El alumno con menos nota media es Alfonso con 2.62 puntos



Creo que mejor como estaba, ajustando un poco con espacios en blanco.

Saluditos!. ...


P.D: Printf permite muchhhhhho más que un simple tabulador.

Gagy


leosansan

Cita de: jps96 en 10 Marzo 2013, 20:06 PM
Gracias!

De nada. Por cierto, al final logré alinear el texto:

Código (cpp) [Seleccionar]
                1ªh     2ªh     3ªh
Juan            5.2     6.2     8.0     La nota media de Juan     es 6.7
Pepe            6.1     7.0     8.0     La nota media de Pepe     es 7.2
Antonio         3.7     2.6     4.0     La nota media de Antonio  es 3.4
Ana             8.0     8.6     9.0     La nota media de Ana      es 8.6
Alfonso         2.3     2.4     3.0     La nota media de Alfonso  es 2.6
Mercedes        7.2     7.7     8.7     La nota media de Mercedes es 8.0

El alumno con mas nota media es Ana      con 8.6 puntos


El alumno con menos nota media es Alfonso  con 2.6 puntos



Saluditos!. ....

Gagy

Por cierto, ¿hay alguna manera de borrar este tema?