Foros del Web » Programando para Internet » PHP »

Problema con funcion Promediar

Estas en el tema de Problema con funcion Promediar en el foro de PHP en Foros del Web. Hola amigos, Estoy utilizando el código posteado por Romina para promediar, el cual va asi: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código php: Ver original function promediar ( $array_datos ...
  #1 (permalink)  
Antiguo 10/10/2008, 02:00
Avatar de CHILENOCES  
Fecha de Ingreso: octubre-2001
Ubicación: Mmm paseando por la vida
Mensajes: 491
Antigüedad: 22 años, 6 meses
Puntos: 0
Problema con funcion Promediar

Hola amigos,

Estoy utilizando el código posteado por Romina para promediar, el cual va asi:

Código php:
Ver original
  1. function promediar($array_datos){
  2. $total=0;
  3. $f=0;
  4. foreach($array_datos as $valor){
  5. if($valor != 0){
  6. $total+=$valor;
  7. $f++;
  8. }
  9. }
  10. return $total/$f;
  11. }

Y luego en el documento lo llamo de esta manera:

Código php:
Ver original
  1. echo promediar($calificaciones);

La variable $calificaciones, viene de un query a la base de datos, y la funcion promediar() la estoy utilizando dentro del while de donde obtengo $calificaciones.

Si la pruebo tanto dentro o fuera, me da el siguiente error:

Warning: Invalid argument supplied for foreach() in funciones.php on line 5

Warning: Division by zero in funciones.php on line 11

Linea 5 es: foreach($array_datos as $valor){
Linea 11 es: return $total/$f;

Los valores que entrega $calificaciones son del estilo "5.5","2.3", etc.

Se que debe ser una tontera, pero la verdad que a esta hora ya estoy lento...

Agradezco desde ya vuestra ayuda.

Saludos
__________________
ChilenoCesar Looking for something new...
  #2 (permalink)  
Antiguo 10/10/2008, 07:59
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Pregunta Respuesta: Problema con funcion Promediar

Así, a simple vista no veo ningún error. ¿Podrías poner la parte en la cuál asignas $calificaciones? ¿Seguro que es un array?.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 10/10/2008, 08:20
Avatar de stone_neo  
Fecha de Ingreso: abril-2004
Ubicación: Peru
Mensajes: 438
Antigüedad: 20 años
Puntos: 15
Respuesta: Problema con funcion Promediar

Me parece que tu variable $calificaciones esta viniendo nula, deberías poner el código de como obtienes eso, para ver si el error esta por ahi.
__________________
Rubén Darío Huamaní Ucharima
Web : http://www.gorilla-soft.com
Usuario Linux #382 100 :-)
  #4 (permalink)  
Antiguo 10/10/2008, 09:34
Avatar de CHILENOCES  
Fecha de Ingreso: octubre-2001
Ubicación: Mmm paseando por la vida
Mensajes: 491
Antigüedad: 22 años, 6 meses
Puntos: 0
Respuesta: Problema con funcion Promediar

Muchas gracias.
El problema es netamente con el array, porque al imprimirlo no me esta dando valores.
Me puedes dar una mano con cual array seria el correcto?

Gracias.
__________________
ChilenoCesar Looking for something new...
  #5 (permalink)  
Antiguo 10/10/2008, 09:37
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Problema con funcion Promediar

No entiendo, ¿a qué te refieres con "cuál array es el correcto"?. Ya que eres tú quien asigna $calificaciones, y nosotros no sabemos cómo lo estás haciendo.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #6 (permalink)  
Antiguo 10/10/2008, 09:44
Avatar de CHILENOCES  
Fecha de Ingreso: octubre-2001
Ubicación: Mmm paseando por la vida
Mensajes: 491
Antigüedad: 22 años, 6 meses
Puntos: 0
Respuesta: Problema con funcion Promediar

Sorry, el array que estoy creando es asi:

Código php:
Ver original
  1. $result = mysql_query("SELECT * FROM calificacion_relator WHERE id_relator='$id'");
  2. while ($row = mysql_fetch_array($result))
  3. {
  4. $nota_alumnos = $row["nota_alumnos"];
  5.  
  6. $nota = array($nota_alumnos);
  7. foreach($nota as $calificaciones) {
  8. echo "$calificaciones";
  9. }
  10. }

con ese echo si me imprime los valores, hay 2 resultados y por lo tanto me entrega 5.5 6.7, pero cuando hago promediar($calificaciones); me da el error.

Sldos,
__________________
ChilenoCesar Looking for something new...
  #7 (permalink)  
Antiguo 10/10/2008, 10:35
Avatar de CHILENOCES  
Fecha de Ingreso: octubre-2001
Ubicación: Mmm paseando por la vida
Mensajes: 491
Antigüedad: 22 años, 6 meses
Puntos: 0
Respuesta: Problema con funcion Promediar

Cualquier ayuda es agradecida, aun no logro que ande

Gracias.
__________________
ChilenoCesar Looking for something new...
  #8 (permalink)  
Antiguo 10/10/2008, 10:42
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Problema con funcion Promediar

Es que no estás asignando correctamente el array, sin contar que en realidad no estás asignando a $calificaciones el array sino a $nota, pero tampoco de la manera correcta.

Prueba así:
Código php:
Ver original
  1. $nota[] = $nota_alumnos;
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #9 (permalink)  
Antiguo 10/10/2008, 10:44
Avatar de stone_neo  
Fecha de Ingreso: abril-2004
Ubicación: Peru
Mensajes: 438
Antigüedad: 20 años
Puntos: 15
Respuesta: Problema con funcion Promediar

Estoy en una maquina del trabajo y no tengo PHP, asi que el codigo que te paso es al ojo, prueba con esto:

Código PHP:
$result mysql_query("SELECT * FROM calificacion_relator WHERE id_relator='$id'");
$calificaciones = array();
$i 0;
while (
$row mysql_fetch_array($result))
{
   
$calificaciones[$i] = $row["nota_alumnos"];
   
$i $i +1;
}
return 
$calificaciones

Tu funcion Promediar deberia tambien tomar en cuenta los ceros, o acaso eso no es una nota?

Código PHP:
function promediar($array_datos){
$total=0;
$f=0;
if(
count($array_datos) > 0){
   for(
$i 0;$i count($array_datos);$i++){
      
$total+=$array_datos[$i];
      
$f++;
   }
   return 
$total/$f;
}
else
   return 
0;


Saludos
__________________
Rubén Darío Huamaní Ucharima
Web : http://www.gorilla-soft.com
Usuario Linux #382 100 :-)
  #10 (permalink)  
Antiguo 10/10/2008, 11:03
Avatar de CHILENOCES  
Fecha de Ingreso: octubre-2001
Ubicación: Mmm paseando por la vida
Mensajes: 491
Antigüedad: 22 años, 6 meses
Puntos: 0
Respuesta: Problema con funcion Promediar

Agradezco vuestra ayuda, he probado con ambas, y me devuelve un resultado vacio.

De hecho en el segundo codigo sugerido (gracias Stone) por alguna razon me corta la pagina y no aparece nada mas de lo que va abajo de ella. Y si le quito el return $calificaciones, vuelve a la normalidad pero claro ahi ya me da un array vacio.

Uhmmm sorry por molestar tanto, pero de verdad necesito esto.

Gracias.
__________________
ChilenoCesar Looking for something new...
  #11 (permalink)  
Antiguo 10/10/2008, 11:06
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Pregunta Respuesta: Problema con funcion Promediar

¿Puedes poner cómo lo habías intentado con lo que te dije?.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #12 (permalink)  
Antiguo 10/10/2008, 11:10
Avatar de stone_neo  
Fecha de Ingreso: abril-2004
Ubicación: Peru
Mensajes: 438
Antigüedad: 20 años
Puntos: 15
Respuesta: Problema con funcion Promediar

mmmmmmmmmmmmmmmmmm que raro, pero no te muestras los errores, antes de tu codigo pon lo siguiente

error_reporting(E_ALL);

Para que te muestre los errores y nos digas exactamente que pasa.
__________________
Rubén Darío Huamaní Ucharima
Web : http://www.gorilla-soft.com
Usuario Linux #382 100 :-)
  #13 (permalink)  
Antiguo 10/10/2008, 11:22
Avatar de CHILENOCES  
Fecha de Ingreso: octubre-2001
Ubicación: Mmm paseando por la vida
Mensajes: 491
Antigüedad: 22 años, 6 meses
Puntos: 0
Sonrisa Respuesta: Problema con funcion Promediar

Estimados,
Solucionado! les agradezco enormemente la ayuda.

El código ha quedado de la siguiente manera:

Funcion promediar:
Código php:
Ver original
  1. function promediar($array_datos){
  2. $total=0;
  3. $f=0;
  4. if(count($array_datos) > 0){
  5.    for($i = 0;$i < count($array_datos);$i++){
  6.       $total+=$array_datos[$i];
  7.       $f++;
  8.    }
  9.    return $total/$f;
  10. }
  11. else
  12.    return 0;
  13. }

Mostrar promedio:
Código php:
Ver original
  1. $q = mysql_query("SELECT * FROM calificacion_relator WHERE id_relator='$id'");
  2. while ($f = mysql_fetch_array($q))
  3. {
  4. $nota[] = $f["nota_alumnos"];
  5. $notas = array($nota);
  6. foreach($notas as $calificaciones);
  7. }
  8. echo promediar($calificaciones);

Mil gracias!!!
__________________
ChilenoCesar Looking for something new...
  #14 (permalink)  
Antiguo 10/10/2008, 11:25
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Problema con funcion Promediar

Me alegra que haya funcionado, aunque estas líneas puedes quitarlas:
Código php:
Ver original
  1. $notas = array($nota);
  2. foreach($notas as $calificaciones) {
  3. }
Y pasar directamente $nota como parámetro a la función promediar.

Saludos .
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #15 (permalink)  
Antiguo 10/10/2008, 11:27
Avatar de CHILENOCES  
Fecha de Ingreso: octubre-2001
Ubicación: Mmm paseando por la vida
Mensajes: 491
Antigüedad: 22 años, 6 meses
Puntos: 0
Respuesta: Problema con funcion Promediar

Si lo hago me devuelve resultado = 0

Solamente quite los { } lo cambie por un ;

Sldos y gracias!
__________________
ChilenoCesar Looking for something new...
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:03.