Muy buenas, estoy un poco desesperado porque no encuentro el error, seguro que es una tonteria.
El programa trata de sumar los suspensos y aprobados de una clase de 10 en 4 asignaturas
Tengo dos problemas:
1.- La recogida de datos empieza con el alumno 1, asignatura 1, posteriormente asignatura 2 pero me mantiene el alumno 1, cuando deberia poner alumno 2.
2.- Una vez introducida las calificaciones, la primera asignatura me suma los suspensos y aprobados, pero los sucesivos lo que hace es sumar los anteriores no me contabiliza los suspensos ya aprobados de la segunda asignatura y asi sucesivamente.
Ruego un cable.
Os dejo el codigo.
#include <stdio.h>
#include <stdlib.h>
#define max_alumnos 10
#define max_pruebas 4
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
int main()
{
float notas[4][10];
float nota[max_alumnos];
float A[max_alumnos][max_pruebas];
int prueba = 1,alumno = 1;
int a,b,i,j,opc;
int aprobados=0;
int suspensos=0;
printf("Calculo aprobados y suspensos:\n");
for(a=0; a<max_pruebas; a++){
printf("\nNumero de Prueba %d: \n", prueba++);
for(b=0;b<max_alumnos;b++){
printf("Calificacion del Alumno %d:", alumno++);
scanf("%f", &A[a][b]);
alumno = 1;
{
if (A[a][b]>=5)
aprobados++;
else
suspensos++;
}
}
printf("\nNOTAS DE LOS ALUMNOS");
printf("\nAlumnos aprobados ...............: %d",aprobados);
printf("\nAlumnos suspendidos .............: %d\n",suspensos);
}
system("pause");
return 0;
}
Cita de: droken26 en 18 Marzo 2015, 09:35 AMEl programa trata de sumar los suspensos y aprobados de una clase de 10 en 4 asignaturas
Lo primero que debes hacer es eliminar las variables "i", "j", "nota", "notas" y "opc" ya que no se utilizan en el programa.
Cita de: droken26 en 18 Marzo 2015, 09:35 AM1.- La recogida de datos empieza con el alumno 1, asignatura 1, posteriormente asignatura 2 pero me mantiene el alumno 1, cuando deberia poner alumno 2.
Las ocurrencias de la variable "alumno" son:
int prueba = 1, alumno = 1; /* 1 */
printf ("Calificacion del Alumno %d:", alumno++); /* 2 */
scanf ("%f", &A[a][b]);
alumno = 1; /* 3 */
A ella le das el valor inicial de uno (1), imprimes su valor antes del incremento (2) y le asignas nuevamente el valor uno (3). En resumen la variable mantiene el mismo valor antes de su uso.
Cita de: droken26 en 18 Marzo 2015, 09:35 AM2.- Una vez introducida las calificaciones, la primera asignatura me suma los suspensos y aprobados, pero los sucesivos lo que hace es sumar los anteriores no me contabiliza los suspensos ya aprobados de la segunda asignatura y asi sucesivamente.
El programa solo hace lo que tu indicas que haga, no hay mas.
Aquí mejor un paréntesis y lo digo en buen plan: consigue un libro de calidad, si necesitas recomendaciones aplica el consejo usual (utilizar el motor de búsqueda de los foros).
----
Si necesitas de un bucle que itere por cada una de las
cuatro asignaturas utilizas un bucle como este:
for (j = 0; j < max_pruebas; j++){
printf("Prueba No %d:\n", j + 1);
/* Alguna operacion */
}
Como puedes ver solo necesitas de una variable (el contador del bucle).
Y si necesitas leer las
diez notas por cada prueba utilizas dos bucle anidados de esta forma:
puts("Calculo aprobados y suspensos");
for (j = 0; j < max_pruebas; j++){
printf("Prueba No %d:\n", j + 1);
for (i = 0; i < max_alumnos; i++){
printf("Calificacion del Alumno %d:\n", i + 1);
scanf ("%f", A[i] + j);
/* Alguna operacion por cada nota */
}
/* Alguna operacion por cada prueba */
}
Para obtener el promedio por cada materia lo que debes hacer es inicializar las variables "aprobados" y "suspensos" justo antes del bucle interno, en este obtienes todas las notas de la prueba y justo después de este (del mentado bucle) imprimes los resultados.
Un saludo
Hola.
No sé si las variables que declaraste tendrán uso en otra parte del código, pero creo que bastaría de este modo:
...
int main() {
float A[max_alumnos][max_pruebas];
int a,b;
int aprobados=0;
int suspensos=0;
printf("Calculo aprobados y suspensos:\n");
for(a=0; a<max_pruebas; a++) {
printf("\nNumero de Prueba %d: \n", a+1);
for(b=0;b<max_alumnos;b++) {
printf("Calificacion del Alumno %d:", b+1);
scanf("%f", &A[a][b]);
A[a][b] >= 5 ? aprobados++ : suspensos++;
}
}
printf("\nNOTAS DE LOS ALUMNOS");
printf("\nAlumnos aprobados ...............: %d",aprobados);
printf("\nAlumnos suspendidos .............: %d\n",suspensos);
...
Saludos.
Edito: (no había visto el mensaje de rir3760)
Muchisimas gracias por vuestra ayuda y paciencia.
Un saludo