Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: droken26 en 16 Marzo 2015, 22:57 pm



Título: Sobre aprobado y suspenso
Publicado por: droken26 en 16 Marzo 2015, 22:57 pm
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.

Código
  1.    #include <stdio.h>
  2.    #include <stdlib.h>
  3.    #define  ALUMNOS 10
  4.    #define  PRUEBAS  4
  5.  
  6.    int main()
  7.    {
  8.  
  9.  
  10.    int a,b,i,j;
  11.    int nota=0;
  12.    int prueba = 1,alumno = 1;
  13.    int aprobados=0;
  14.    int suspensos=0;
  15.    float A[ALUMNOS][PRUEBAS];
  16.  
  17.           printf("Calculo aprobados y suspensos:\n");
  18.  
  19.           //do {
  20.           for(i=0; i<PRUEBAS; i++){
  21.               printf("\nNumero de Prueba %d: \n", prueba++);
  22.               for(j=0;j<ALUMNOS; j++){
  23.                   printf("Calificacion del Alumno %d:", alumno++);
  24.                   scanf("%f", &A[i][j]);
  25.                   //if(nota!=-1)
  26.  
  27.                if(nota>=5)
  28.                   aprobados++;
  29.                 else suspensos++;
  30.                alumno = 1;
  31.    }
  32.                } //while (nota!=-1);
  33.  
  34.        printf("\nNOTAS DE LOS ALUMNOS");
  35.        printf("\nAlumnos aprobados ...............: %d",aprobados);
  36.        printf("\nAlumnos suspendidos .............: %d\n",suspensos);
  37.  
  38.         return 0;
  39.     }
  40.  
  41.  


Título: Re: Sobre aprobado y suspenso
Publicado por: rir3760 en 17 Marzo 2015, 02:12 am
Los errores principales son dos. El primero son los indices utilizados para acceder al array de arrays:
Código
  1. for (i = 0; i < PRUEBAS; i++) { /* i == 0 .. 3 */
  2.   printf ("\nNumero de Prueba %d: \n", prueba++);
  3.   for (j = 0; j < ALUMNOS; j++) { /* j == 0 .. 9 */
  4.      printf ("Calificacion del Alumno %d:", alumno++);
  5.      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":
Código
  1. int nota = 0;
  2.  
  3. /* ... */
  4.  
  5. printf ("Calificacion del Alumno %d:", alumno++);
  6. scanf ("%f", &A[i][j]);
  7.  
  8. if (nota >= 5)
  9.   aprobados++;
  10. else
  11.   suspensos++;
  12. 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 ]":
Código
  1. if (A[i][j] >= 5)
  2.   aprobados++;
  3. else
  4.   suspensos++;

Un saludo


Título: Re: Sobre aprobado y suspenso
Publicado por: droken26 en 17 Marzo 2015, 11:28 am
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