Sobre media de asignaturas

Iniciado por droken26, 15 Marzo 2015, 15:14 PM

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

droken26

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.


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

int main()
{
//void menu(); // Menu de opciones

//void main(){

float Notas[4][10], media[10],suma;
float Notas1[4][10], media1[10],suma1;
//float promedio(float notap)
int a,b,c,d;
int opc;
//float prom = 0;
   // prom = notap/10;
    //return prom;
{
// --------------------------------------------------------------------------------------//
//void menu(){
printf("\n Introduce una opcion del menu\n");
printf("\n 1.- Calcular Nota final del alumno\n");
printf("\n 2.- Calculo nota media por prueba\n");
printf("\n 3.- Listado de Pruebas y Notas\n");
printf("\n 4.- Salir del programa\n");

scanf("%d",&opc);
switch(opc)

// --------------------------------------------------------------------------------------
case 1:{
for (a=0;a<10;a++)
{suma=0;
printf("\n Datos del Alumno %d\n",a+1);
for(b=0;b<4;b++)
{
printf("\n Introduce la calificacion de la prueba %d:", b+1);
scanf("%f", &Notas[a][b]);
suma=suma+Notas[a][b];
}
media[a]=suma/b;

printf("\n\n La nota media del alumno %d es: %.2f\n", a+1, media[a]);

}
break;
// --------------------------------------------------------------------------------------
case 2:{
}
for (c=0;c<4;c++)
{suma1=0;
printf("\n Datos de la prueba %d\n",c+1);
for(d=0;d<10;d++)
{
printf("\n Introduce la calificacion del alumno %d:", d+1);
scanf("%f", &Notas1[c][d]);
suma=suma1+Notas1[c][d];
}
//media1[c]=suma/d;

printf("\n\n La nota media de la prueba %d es: %.2f\n", c+1, suma);//media1[c]);
}
break;

// --------------------------------------------------------------------------------------

//while (opc !=0);

//return 0;
}
}
}

rir3760

Cita de: droken26 en 15 Marzo 2015, 15:14 PMpor 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:
float Notas[4][10], media[10], suma;
float Notas1[4][10], media1[10], suma1;

/* ... */

for (a = 0; a < 10; a++){
   suma = 0;
   printf ("\n Datos del Alumno %d\n", a + 1);
   for (b = 0; b < 4; b++){
      printf ("\n Introduce la calificacion de la prueba %d:", b + 1);
      scanf ("%f", &Notas[a][b]);
      suma = suma + Notas[a][b];
   }
media[a] = suma / b;

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
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

droken26

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