Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Gagy en 10 Marzo 2013, 16:19 pm



Título: Tabla en C++
Publicado por: Gagy en 10 Marzo 2013, 16:19 pm
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
  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5.   char evaluaciones [3][6] ={"Primera evaluacion", "Segunda evaluacion", "Tercera evaluacion"};
  6.   char a,nombres [6][9]={ "Juan","Pepe" ,"Antonio" ,"Ana " ,"Alfonso","Mercedes"};;
  7.   float matriz[][4]= {{1   ,   5.2   ,  6.2    ,    8},
  8.                       {2   ,   6.1   ,   7     ,    8},
  9.                       {3   ,   3.7   ,   2.6   ,    4},
  10.                       {4   ,   8     ,   8.6   ,    9 },
  11.                       {5   ,   2.3   ,   2.4   ,    3},
  12.                       {6   ,   7.2   ,   7.7   ,    8.7 }};
  13.    int i,j ,indice;
  14.   float suma=0,mayor=0;
  15.   for(i=0;i<3;i++)
  16.       cout<<"    "<<evaluaciones [i];
  17.   cout<<endl;
  18.  
  19.    for (i=0;i<6;i++)
  20.       {
  21.           for(j=1;j<4;j++)
  22.               {
  23.                   if (j>=1)
  24.                       suma +=matriz[i][j];
  25.                   if (j==0)
  26.                       cout<<"      "<<nombres[i];
  27.                   cout<<"        "<<matriz[i][j];
  28.                }
  29.  cout<<endl<<"El alumno con mas nota es "<<nombres [indice]<<" con "<< mayor<<" puntos de media "<<endl<<endl;
  30.    mayor=0;
  31.    for(j=1;j<4;j++)
  32.       {
  33.           for(i=0;i<6;i++)
  34.               suma+=matriz[i][j];
  35.    cin.get();
  36.   return 0;
  37. }
  38.  


Título: Re: Tabla en C++
Publicado por: leosansan en 10 Marzo 2013, 17:43 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
  1.           1ªh evaluacion           2ªh evaluacion           3ªh evaluacion
  2.    Juan           5.2                         6.2                         8        La nota media de Juan es 6.72
  3.    Pepe           6.1                         7                         8        La nota media de Pepe es 7.22
  4. Antonio           3.7                         2.6                         4        La nota media de Antonio es 3.38
  5.    Ana            8                         8.6                         9        La nota media de Ana  es 8.64
  6. Alfonso           2.3                         2.4                         3        La nota media de Alfonso es 2.62
  7. Mercedes           7.2                         7.7                         8.7        La nota media de Mercedes es 8
  8.  
  9. El alumno con mas nota media es Ana  con 8.64 puntos
  10.  
  11.  
  12. El alumno con menos nota media es Alfonso con 2.62 puntos
  13.  
  14.  

Y el código:

Código
  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5.   char evaluaciones [3][20] ={"1\xA6h evaluacion", "2\xA6h evaluacion", "3\xA6h evaluacion"};
  6.   char a,nombres [6][9]={ "Juan","Pepe" ,"Antonio" ,"Ana " ,"Alfonso","Mercedes"};;
  7.   float matriz[][4]= {{1   ,   5.2   ,  6.2    ,    8},
  8.                       {2   ,   6.1   ,   7     ,    8},
  9.                       {3   ,   3.7   ,   2.6   ,    4},
  10.                       {4   ,   8     ,   8.6   ,    9 },
  11.                       {5   ,   2.3   ,   2.4   ,    3},
  12.                       {6   ,   7.2   ,   7.7   ,    8.7 }};
  13.    float porcentaje[4]={0,0.20,0.4,0.4};
  14.    int i,j ,indice,indice1;
  15.   float suma=0,mayor=0,menor=12;
  16.   for(i=0;i<3;i++){
  17.        cout.width(25);
  18.       cout<<evaluaciones [i];
  19.   }
  20.  
  21.   cout<<endl;
  22.    for (i=0;i<6;i++)
  23.        {
  24.            for(j=0;j<4;j++)
  25.                {
  26.                    if (j>=1){
  27.                        suma +=matriz[i][j]*porcentaje[j];
  28.                        cout<<"           "<<matriz[i][j];
  29.                        cout.width(25);
  30.                    }
  31.  
  32.                    if (j==0){
  33.                        cout.width(8);
  34.                        cout<<nombres[i];
  35.                    }
  36.  
  37.  
  38.                 }
  39.  
  40.            cout<<"        La nota media de "<<nombres [i]<<" es "<<suma<<endl;
  41.            if (suma>mayor)
  42.                {
  43.                    mayor=suma;
  44.                    indice=i;
  45.                }
  46.            if (suma<menor)
  47.                {
  48.                    menor=suma;
  49.                    indice1=i;
  50.                }
  51.            suma=0;
  52.        }
  53.  
  54.    cout<<endl<<"El alumno con mas nota media es "<<nombres [indice]<<" con "<< mayor<<" puntos "<<endl<<endl;
  55.    cout<<endl<<"El alumno con menos nota media es "<<nombres [indice1]<<" con "<< menor<<" puntos "<<endl<<endl;
  56.    cin.get();
  57.   return 0;
  58. }
  59.  
  60.  

Saluditos!. ...(http://st.forocoches.com/foro/images/smilies/simba2.gif)


Título: Re: Tabla en C++
Publicado por: Gagy en 10 Marzo 2013, 17:52 pm
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?


Título: Re: Tabla en C++
Publicado por: leosansan en 10 Marzo 2013, 18:43 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!. ....
(http://st.forocoches.com/foro/images/smilies/simba1.gif)


Título: Re: Tabla en C++
Publicado por: amchacon en 10 Marzo 2013, 19:16 pm
Puedes usar /t como si de un printf se tratase:

cout<<"/t tal y tal";


Título: Re: Tabla en C++
Publicado por: Gagy 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"?


Título: Re: Tabla en C++
Publicado por: leosansan en 10 Marzo 2013, 19:37 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
  1.        1ªh evaluacion  2ªh evaluacion  3ªh evaluacion
  2. Juan            5.2     6.2     8       La nota media de Juan es 6.72
  3. Pepe            6.1     7       8       La nota media de Pepe es 7.22
  4. Antonio         3.7     2.6     4       La nota media de Antonio es 3.38
  5. Ana             8       8.6     9       La nota media de Ana es 8.64
  6. Alfonso         2.3     2.4     3       La nota media de Alfonso es 2.62
  7. Mercedes                7.2     7.7     8.7     La nota media de Mercedes es 8
  8.  
  9. El alumno con mas nota media es Ana con 8.64 puntos
  10.  
  11.  
  12. El alumno con menos nota media es Alfonso con 2.62 puntos
  13.  
  14.  

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

Saluditos!. ...
(http://smilies-gifs.com/animo/3animo.gif)

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


Título: Re: Tabla en C++
Publicado por: Gagy en 10 Marzo 2013, 20:06 pm
Gracias!


Título: Re: Tabla en C++
Publicado por: leosansan en 10 Marzo 2013, 22:28 pm
Gracias!

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

Código
  1.                1ªh     2ªh     3ªh
  2. Juan            5.2     6.2     8.0     La nota media de Juan     es 6.7
  3. Pepe            6.1     7.0     8.0     La nota media de Pepe     es 7.2
  4. Antonio         3.7     2.6     4.0     La nota media de Antonio  es 3.4
  5. Ana             8.0     8.6     9.0     La nota media de Ana      es 8.6
  6. Alfonso         2.3     2.4     3.0     La nota media de Alfonso  es 2.6
  7. Mercedes        7.2     7.7     8.7     La nota media de Mercedes es 8.0
  8.  
  9. El alumno con mas nota media es Ana      con 8.6 puntos
  10.  
  11.  
  12. El alumno con menos nota media es Alfonso  con 2.6 puntos
  13.  
  14.  

Saluditos!. ....(http://i1280.photobucket.com/albums/a497/leosansan/1grandes_zps12b1dc86.gif)


Título: Re: Tabla en C++
Publicado por: Gagy en 11 Marzo 2013, 23:04 pm
Por cierto, ¿hay alguna manera de borrar este tema?


Título: Re: Tabla en C++
Publicado por: leosansan en 11 Marzo 2013, 23:26 pm
Por cierto, ¿hay alguna manera de borrar este tema?

No me parece justa tu proposición. Toda la ayuda que se te ha brindado ha sido desinteresada y pública y si alguien más la puede aprovechar mejor para todos. Sin esa premisa yo al menos no aportaría nada.

Saluditos!. ...
(http://i1280.photobucket.com/albums/a497/leosansan/44grandes_zps1d4df015.gif)


Título: Re: Tabla en C++
Publicado por: Gagy en 11 Marzo 2013, 23:32 pm
Perdona leosansan, tienes razón.
Sólo que era por saberlo.
Saludos!