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:
#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;
}
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: 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:#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!. ...(http://st.forocoches.com/foro/images/smilies/simba2.gif)
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?
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!. ....(http://st.forocoches.com/foro/images/smilies/simba1.gif)
Puedes usar /t como si de un printf se tratase:
cout<<"/t tal y tal";
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"?
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: 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!. ...(http://smilies-gifs.com/animo/3animo.gif)
P.D: Printf permite muchhhhhho más que un simple tabulador.
Gracias!
Cita de: jps96 en 10 Marzo 2013, 20:06 PM
Gracias!
De nada. Por cierto, al final logré alinear el texto: 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!. ....(http://i1280.photobucket.com/albums/a497/leosansan/1grandes_zps12b1dc86.gif)
Por cierto, ¿hay alguna manera de borrar este tema?
Cita de: Gagy en 11 Marzo 2013, 23:04 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)
Perdona leosansan, tienes razón.
Sólo que era por saberlo.
Saludos!