Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: droken26 en 15 Marzo 2015, 15:14 pm



Título: Sobre media de asignaturas
Publicado por: droken26 en 15 Marzo 2015, 15:14 pm
Muy buenas, estoy liado con un programa para la uni., y debo de sacar la media por asignaturas y la media por notas, el caso es que el primer punto lo he sacado, pero tengo un problema para sacar el segundo punto,  nota media de cada prueba (calculada como la media de las notas de todos los alumnos en una prueba), por mucho que he cambiado los parametros siempre me refleja la ultima nota incluida en este caso en el ultimo alumno, estoy aburridooo y no avanzo. Ruego una ayuda, os adjunto el codigo.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main()
  5. {
  6. //void menu(); // Menu de opciones
  7.  
  8. //void main(){
  9.  
  10. float Notas[4][10], media[10],suma;
  11. float Notas1[4][10], media1[10],suma1;
  12. //float promedio(float notap)
  13. int a,b,c,d;
  14. int opc;
  15. //float prom = 0;
  16.   // prom = notap/10;
  17.    //return prom;
  18. {
  19. // --------------------------------------------------------------------------------------//
  20. //void menu(){
  21. printf("\n Introduce una opcion del menu\n");
  22. printf("\n 1.- Calcular Nota final del alumno\n");
  23. printf("\n 2.- Calculo nota media por prueba\n");
  24. printf("\n 3.- Listado de Pruebas y Notas\n");
  25. printf("\n 4.- Salir del programa\n");
  26.  
  27. scanf("%d",&opc);
  28. switch(opc)
  29.  
  30. // --------------------------------------------------------------------------------------
  31. case 1:{
  32. for (a=0;a<10;a++)
  33. {suma=0;
  34. printf("\n Datos del Alumno %d\n",a+1);
  35. for(b=0;b<4;b++)
  36. {
  37. printf("\n Introduce la calificacion de la prueba %d:", b+1);
  38. scanf("%f", &Notas[a][b]);
  39. suma=suma+Notas[a][b];
  40. }
  41. media[a]=suma/b;
  42.  
  43. printf("\n\n La nota media del alumno %d es: %.2f\n", a+1, media[a]);
  44.  
  45. }
  46. break;
  47. // --------------------------------------------------------------------------------------
  48. case 2:{
  49. }
  50. for (c=0;c<4;c++)
  51. {suma1=0;
  52. printf("\n Datos de la prueba %d\n",c+1);
  53. for(d=0;d<10;d++)
  54. {
  55. printf("\n Introduce la calificacion del alumno %d:", d+1);
  56. scanf("%f", &Notas1[c][d]);
  57. suma=suma1+Notas1[c][d];
  58. }
  59. //media1[c]=suma/d;
  60.  
  61. printf("\n\n La nota media de la prueba %d es: %.2f\n", c+1, suma);//media1[c]);
  62. }
  63. break;
  64.  
  65. // --------------------------------------------------------------------------------------
  66.  
  67. //while (opc !=0);
  68.  
  69. //return 0;
  70. }
  71. }
  72. }


Título: Re: Sobre media de asignaturas
Publicado por: rir3760 en 15 Marzo 2015, 17:13 pm
por mucho que he cambiado los parametros siempre me refleja la ultima nota incluida en este caso en el ultimo alumno, estoy aburridooo y no avanzo.
Tal vez sea por solo copiar y pegar.

Al parecer el programa original utilizaba funciones y lo cambiaste a uno sin ellas tanto por los comentarios como porque hay llaves innecesarias.

En cuanto al programa:

1) Solo en el primer caso debes pedir las calificaciones de todos los alumnos, ahí utilizas mal los indices de los arrays:
Código
  1. float Notas[4][10], media[10], suma;
  2. float Notas1[4][10], media1[10], suma1;
  3.  
  4. /* ... */
  5.  
  6. for (a = 0; a < 10; a++){
  7.   suma = 0;
  8.   printf ("\n Datos del Alumno %d\n", a + 1);
  9.   for (b = 0; b < 4; b++){
  10.      printf ("\n Introduce la calificacion de la prueba %d:", b + 1);
  11.      scanf ("%f", &Notas[a][b]);
  12.      suma = suma + Notas[a][b];
  13.   }
  14. media[a] = suma / b;
  15.  
En esos bucles la variable "a" tomara los valores 0 .. 9 y la variable "b" los valores 0 .. 3. Bien los limites de los bucles están al revés o bien declaraste mal los arrays (en este caso debería ser "Notas[10][4]").

2) No necesitas de dos juegos de variables, con uno solo basta y hay que evitar nombres como "media" y "media1" ya que no son descriptivos: ¿Cual es la diferencia entre ellos?

3) Para calcular la media de la prueba no tienes por que pedir datos, la media de cada alumno ya la tienes en el array "media", solo tienes que imprimir ese valor dividido entre el numero de alumnos.

Ya por ultimo una aproximación mejor para el programa es primero pedir los datos de todos los alumnos y solo entonces dar la opción de imprimir la media de alumnos o prueba.

Un saludo


Título: Re: Sobre media de asignaturas
Publicado por: droken26 en 15 Marzo 2015, 18:48 pm
Ok, muchas gracias.
No es que lo haya copiado. Puse los comentarios porque pensaba realizar el menú cin la función void menú, así como el bucle do...while. Por eso los tengo en comentarios. Tengo la mala constumbre de empezar la programación y después el diagrama.

Un saludo