Bien, el error es un error lógico, no un error decódigo.
A continuación, pongo un trozo de código y os explico el problema.
for(i = 0; i < nalumnos; i++){ n = 0; suma = 0; while(n < nnotas){ suma = suma + notas[i][n]; n++; } mediaal[i] = (suma / nnotas2); }
Bien, esa es la pieza de código defectuosa. Lo que debería de hacer es que se le vaya sumando a i 1 siempre que sea menor a nalumnos (una cantidad introducida previamente que se refiere a la cantidad de alumnos de la que se van a hallar las medias), y se haya realizado todas las tareas del bucle. Todas las variables están definidas y las bibliotecas incluidas son sdio y sdlib.
Lo de dentro del bucle sirve para que mientras que n sea menor al numero de notas de cada alumno (nnotas), a suma se le ñada el valor de notas[i][n] (o lo que es lo mismo, notas[alumnoactual][notaactual]), y se le aumente en 1 a n su valor. Por último, antes de repetir el bucle for, a la media del alumno se le calucla lo que aparece en esa sentencia.
Bueno, os subo el archivo completo por si lo queréis ojear bien. Queda decir que nnotas2 la uso porque nnotas no la puedo poner como float pero pensé que alomejor el problema del calculo residía en que dividí float por int, así que la puse con el alor de nnotas en float, pero no vale.
Saludos
¡Iníciate en Linux fácilmente! Sólo entra aquí y comprueba que distribución se adapta mejor a tí.
Mi review: iPod Touch 4G
El problema es que en C no
El problema es que en C no puedes pasar parámetros como referencia, (en C++ SÍ, GRAN diferencia entre ambos). Es decir cuanto tu llamas a la función
pednotas(notas, nnotas, nombres, i);
Los valores notas, nnotas, etc. se crean como variable locales en la función llamada, vamos, que no son las mismas que las que tú tienes en el programa principal Como solución, tendrías que tratar esas variables como punteros.
También tratas el nombre como un entero, está mal.
Sobre la linea
printf("\nPuntuacion No %d: ", ++n);
También está mal, aparte de no es políticamente correcta, fíjate que estás sumando "n" antes de usarla, cuando lo pones en el array, nunca usas el elemento 0, esto también puede dar fallos de segmentación ya que puedes escribir fuera de la memoria reservada del array (TOTAL +1). Es mejor hacer el ++n al final del bucle, es un error muy difícil de detectar. Así que mejor no usar los ++Variable en los printf().
Un saludo.
LuaDiE: Crea en Lua sin teclear código. Compatible HM7, HMv2, LuaPlayer, LuaDEV y PGE.
Bien, tras poner los
Bien, tras poner los punteros, y arreglar alguna que otra cosa:
Me sale siempre el mismo valor aunquevlo cambie.
¡Iníciate en Linux fácilmente! Sólo entra aquí y comprueba que distribución se adapta mejor a tí.
Mi review: iPod Touch 4G
Redundante:
Redundante:
No tiene sentido esa instruccion, ¿sumas y luego restas?, si lo que quieres es mostrar i + 1, tan sencillo como poner "i + 1", en vez de "i++" xD. Cuidado con esas cosas no me hiciste caso, y ya te dije que NUNCA uses un cambio de valor de variable en un printf. Es un error muy difícil de detectar.
Nombre de alumno, sigue siendo un variable entera, no un texto :P
Sigues sin pasar los valores como punteros, por eso no te los cambia. Sólo mandas la variable "i", la cual no hace falta porque no le cambias el valor (aunque le sumes 1 y luego se lo restes como te he dicho más arriba)
LuaDiE: Crea en Lua sin teclear código. Compatible HM7, HMv2, LuaPlayer, LuaDEV y PGE.
Bien, lo de i++ lo he
Bien, lo de i++ lo he cambiado. Pero o otro, lo de nombre alumno, lo uso con getchar así que que lo trate como un entero es muy dificil. Por otro lado, no paso los valores como punteros porque en C automáticamente todas las arrays se tratan como tal.
Saludos
¡Iníciate en Linux fácilmente! Sólo entra aquí y comprueba que distribución se adapta mejor a tí.
Mi review: iPod Touch 4G
Aprendido
Consultando mi libro de C yya he comprendido la diferencia de pasar las variables por valor o referencia. Pues eso, que si ves otro error me lo puedes decir por favor? yo igualmente sigo buscando.
¡Iníciate en Linux fácilmente! Sólo entra aquí y comprueba que distribución se adapta mejor a tí.
Mi review: iPod Touch 4G
Creo que con lo que te he
Creo que con lo que te he dicho ya debería de funcionar, recompilalo con los cambios a ver si diera otro error.
Esque no pretendía sumar 1 a
Esque no pretendía sumar 1 a n, sino mostrar el valor de n + 1 pero que mantenga su valor.
Lo otro sigo sin entenderlo, me lo puedes explicar? Por último, decirte que he comprobado el error del bucle, y detecté que las notas se cogen bien mostrando los valores del array una vez btenidos.
Saludos
¡Iníciate en Linux fácilmente! Sólo entra aquí y comprueba que distribución se adapta mejor a tí.
Mi review: iPod Touch 4G