Sobre aprobado y suspenso

Iniciado por droken26, 16 Marzo 2015, 22:57 PM

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

droken26

Muy buenas, estoy peleandome con el codigo  pero algo debo hacer mal puesto que el total de suspendido y aprobados no me lo calcula bien, y tambien me da un error en la condicion do..while por eso la tengo anulada como si fuera un comentario.
Os dejo el codigo a ver si puedes darme algo de luz.

Saludos y gracias a los que estais ahi para ayudarnos a los que empezamos.


    #include <stdio.h>
    #include <stdlib.h>
    #define  ALUMNOS 10
    #define  PRUEBAS  4
     
    int main()
    {
     
     
    int a,b,i,j;
    int nota=0;
    int prueba = 1,alumno = 1;
    int aprobados=0;
    int suspensos=0;
    float A[ALUMNOS][PRUEBAS];
     
           printf("Calculo aprobados y suspensos:\n");
     
           //do {
           for(i=0; i<PRUEBAS; i++){
               printf("\nNumero de Prueba %d: \n", prueba++);
               for(j=0;j<ALUMNOS; j++){
                   printf("Calificacion del Alumno %d:", alumno++);
                   scanf("%f", &A[i][j]);
                   //if(nota!=-1)
                 
                if(nota>=5)
                   aprobados++;
                 else suspensos++;
                alumno = 1;
    }
                } //while (nota!=-1);
     
        printf("\nNOTAS DE LOS ALUMNOS");
        printf("\nAlumnos aprobados ...............: %d",aprobados);
        printf("\nAlumnos suspendidos .............: %d\n",suspensos);
     
         return 0;
     }


rir3760

Los errores principales son dos. El primero son los indices utilizados para acceder al array de arrays:
for (i = 0; i < PRUEBAS; i++) { /* i == 0 .. 3 */
   printf ("\nNumero de Prueba %d: \n", prueba++);
   for (j = 0; j < ALUMNOS; j++) { /* j == 0 .. 9 */
      printf ("Calificacion del Alumno %d:", alumno++);
      scanf ("%f", &A[i][j]);

Están al revés, "i" debe iterar desde 0 hasta ALUMNOS y "j" desde 0 hasta PRUEBAS. Lo que lleva a que estas procesando cada uno de los alumnos (contador "i") del cual pides cada una de las notas (contador "j").

El otro error se debe al uso de la variable "nota":
int nota = 0;

/* ... */

printf ("Calificacion del Alumno %d:", alumno++);
scanf ("%f", &A[i][j]);

if (nota >= 5)
   aprobados++;
else
   suspensos++;
alumno = 1;

A esa variable le das un valor inicial de cero y después de ello nunca la modificas. La variable que debes verificar para conocer si el alumno aprobó o no la materia es "A[ i ][ j ]":
if (A[i][j] >= 5)
   aprobados++;
else
   suspensos++;


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

Muchas gracias, he realizado los cambios y perfecto. Ahora el único problema es que me suma los aprobados y suspensos de firma seguida, cuando debería ser por bloques de asignaturas/alumnos.

Un saludo