elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Error de suma
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Error de suma  (Leído 1,798 veces)
droken26

Desconectado Desconectado

Mensajes: 18


Ver Perfil
Error de suma
« en: 18 Marzo 2015, 09:35 am »

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.

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


En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Error de suma
« Respuesta #1 en: 18 Marzo 2015, 16:44 pm »

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

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.
Las ocurrencias de la variable "alumno" son:
Código
  1. int prueba = 1, alumno = 1; /* 1 */
  2.  
  3. printf ("Calificacion del Alumno %d:", alumno++); /* 2 */
  4. scanf ("%f", &A[a][b]);
  5. 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.

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.
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:
Código
  1. for (j = 0; j < max_pruebas; j++){
  2.   printf("Prueba No %d:\n", j + 1);
  3.  
  4.   /* Alguna operacion */
  5. }
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:
Código
  1. puts("Calculo aprobados y suspensos");
  2. for (j = 0; j < max_pruebas; j++){
  3.   printf("Prueba No %d:\n", j + 1);
  4.   for (i = 0; i < max_alumnos; i++){
  5.      printf("Calificacion del Alumno %d:\n", i + 1);
  6.      scanf ("%f", A[i] + j);
  7.  
  8.      /* Alguna operacion por cada nota */
  9.   }
  10.  
  11.   /* Alguna operacion por cada prueba */
  12. }

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


En línea

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
ecfisa

Desconectado Desconectado

Mensajes: 114


Ver Perfil
Re: Error de suma
« Respuesta #2 en: 18 Marzo 2015, 16:49 pm »

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:
Código
  1. ...
  2. int main() {
  3.  float A[max_alumnos][max_pruebas];
  4.  int a,b;
  5.  int aprobados=0;
  6.  int suspensos=0;
  7.  
  8.  printf("Calculo aprobados y suspensos:\n");
  9.  for(a=0; a<max_pruebas; a++) {
  10.    printf("\nNumero de Prueba %d: \n", a+1);
  11.    for(b=0;b<max_alumnos;b++) {
  12.      printf("Calificacion del Alumno %d:", b+1);
  13.      scanf("%f", &A[a][b]);
  14.      A[a][b] >= 5 ? aprobados++ : suspensos++;
  15.    }
  16.  }
  17.  printf("\nNOTAS DE LOS ALUMNOS");
  18.  printf("\nAlumnos aprobados ...............: %d",aprobados);
  19.  printf("\nAlumnos suspendidos .............: %d\n",suspensos);
  20. ...
  21.  

Saludos.

Edito: (no había visto el mensaje de rir3760)
« Última modificación: 18 Marzo 2015, 16:52 pm por ecfisa » En línea

droken26

Desconectado Desconectado

Mensajes: 18


Ver Perfil
Re: Error de suma
« Respuesta #3 en: 18 Marzo 2015, 22:42 pm »

Muchisimas gracias por vuestra ayuda y paciencia.
Un saludo
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
101 - suma euros
Ejercicios
Cobac 1 4,652 Último mensaje 2 Julio 2004, 04:12 am
por soplo
Mas de listview(suma)
Programación Visual Basic
mdg 2 2,928 Último mensaje 25 Octubre 2007, 05:52 am
por mdg
Error Suma C++(Linux)
Programación C/C++
prometheus48 2 2,328 Último mensaje 7 Diciembre 2011, 22:54 pm
por Pablo Videla
Suma en c
Programación C/C++
lucas59 1 1,603 Último mensaje 13 Agosto 2014, 14:55 pm
por ivancea96
Error suma arboles c++
Programación C/C++
Josh13 1 1,487 Último mensaje 4 Mayo 2018, 22:13 pm
por MAFUS
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines