Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] PHP programación cantidad de aprobados

Estas en el tema de PHP programación cantidad de aprobados en el foro de PHP en Foros del Web. Hola bueno acabo de registrarme porque no le encuentro la vuelta a este problema! Estoy en otra pc por ende no tengo el codigo mismo, ...
  #1 (permalink)  
Antiguo 11/05/2014, 16:13
Avatar de marco96_af  
Fecha de Ingreso: mayo-2014
Ubicación: Buenos Aires, Argentina
Mensajes: 23
Antigüedad: 9 años, 11 meses
Puntos: 0
PHP programación cantidad de aprobados

Hola bueno acabo de registrarme porque no le encuentro la vuelta a este problema! Estoy en otra pc por ende no tengo el codigo mismo, pero les comento:

Creé un formulario en donde se envian nombres de alumnos y sus notas. De sus notas tengo que saber cuantos son aprobados desaprobados y aplazados.
En $Nota1=$_REQUEST['Nota1']y así con las demás 5.
Ahora, para hacer cuantos son los aprobados tendría que hacer un if? Pero con un for, y no me sale!

for($n=0;$n<=5;n++)

if($Nota[$n]>=7)
$aprobado=$aprobado+1

En *Nota probé creando una nueva variable haciendo lo siguiente, para que todas las notas se guarden ahí: $Nota=$_REQUEST[Nota1].[Nota2], etc.
Pero no funciona

Ayudaa y gracias!
  #2 (permalink)  
Antiguo 11/05/2014, 16:17
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Php programacion cantidad de aprobados

Si es un problema de la escuela / universidas ... esta en contra del espiritu del foro hacer tareas
__________________
Salu2!
  #3 (permalink)  
Antiguo 11/05/2014, 16:20
Avatar de marco96_af  
Fecha de Ingreso: mayo-2014
Ubicación: Buenos Aires, Argentina
Mensajes: 23
Antigüedad: 9 años, 11 meses
Puntos: 0
Respuesta: Php programacion cantidad de aprobados

nono, no es un problema de escuela ni de universidad. Es un proyecto aparte propio para comenzar desde 0, (porque esto es basico) y ir bien paso a paso!
  #4 (permalink)  
Antiguo 13/05/2014, 08:38
Avatar de marco96_af  
Fecha de Ingreso: mayo-2014
Ubicación: Buenos Aires, Argentina
Mensajes: 23
Antigüedad: 9 años, 11 meses
Puntos: 0
Respuesta: Php programacion cantidad de aprobados

Alguien sabe?
  #5 (permalink)  
Antiguo 13/05/2014, 10:03
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: Php programacion cantidad de aprobados

Supongo que $Nota es un array con notas verdad?

1) Verifica que los datos esten bien cargados, puedes hacer:
Código PHP:
Ver original
  1. var_dump($Nota);
eso te motrara los datos de $Nota, si no son los que cargaste, es porque algo anda mal cuando los recibiste.

2) $Nota es un array verdad? php tiene un iterador especial para array, me refiero al foreach por lo que puedes usarlo para simplificar tu trabajo.
Código PHP:
Ver original
  1. foreach($Nota as $calificacion)
  2. {
  3. //...
  4. }

3) A esta altura, ya abras notado que $Nota no es un nombre muy descriptivo para un array de calificaciones, mucho mas claro seria $calificaciones (con la primer letra en minuscula porque es una variable no una clase) pero esto solo es un capricho semantico que no tiene consecuencias practicas, solo de legibilidad.

4) Ahora debes pensar como guardar los valores de la calificacion, tu quieres saber cuantos aplazados hay, cuantos aprobados y cuantos desaprobados, por lo que primero debes pensar ¿Donde voy a guardar estos datos?, por el codigo que pusiste se ve que pensaste en usar variables independientes, no esta mal, pero ¿Porque no lo guardas en un array directamente?
Código PHP:
Ver original
  1. $resumen_notas = array("aplazados"=>0, "desaprobados" => 0, "aprobados"=>0);
  2. foreach($Nota as $calificacion)
  3. {
  4. //...
  5. }

5) Como veras, las claves del array $resumen_notas son los nombres que nos interesan y sus valores son 0, porque hasta que no se ejecute el foreach no hay nada cargado, la idea es incrementar estas posiciones dentro del foreach, por ejemplo asi:

Código PHP:
Ver original
  1. $resumen_notas = array("aplazados"=>0, "desaprobados" => 0, "aprobados"=>0);
  2. foreach($Nota as $calificacion)
  3. {
  4.      if($calificacion >= 7)
  5.         $resumen_notas["aprobados"]++;
  6.      elseif($calificacion >= 4)
  7.      //...
  8.      else
  9.      //...
  10. }

6) puedes completar los dos renglones que faltan con la misma idea que el primero y observar por pantalla los resultados luego, utilizando nuevamente var_dump

Código PHP:
Ver original
  1. var_dump($resumen_notas);
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #6 (permalink)  
Antiguo 13/05/2014, 16:56
 
Fecha de Ingreso: febrero-2013
Mensajes: 78
Antigüedad: 11 años, 2 meses
Puntos: 0
Respuesta: PHP programación cantidad de aprobados

Lo acabo de hacer estaba sencillo , ...

aunq lo correcto deberia ser que tambien salgan los nombres de los alumnos que le corresponden a cada nota ...
  #7 (permalink)  
Antiguo 13/05/2014, 17:23
Avatar de marco96_af  
Fecha de Ingreso: mayo-2014
Ubicación: Buenos Aires, Argentina
Mensajes: 23
Antigüedad: 9 años, 11 meses
Puntos: 0
Respuesta: PHP programación cantidad de aprobados

Cita:
Iniciado por awik Ver Mensaje
Lo acabo de hacer estaba sencillo , ...

aunq lo correcto deberia ser que tambien salgan los nombres de los alumnos que le corresponden a cada nota ...
Si Awik, lo nombres estan. Por eso tambien me preguntaba si se puede hacer en un for y por ende donde guardar notas y donde nombres jaja.
  #8 (permalink)  
Antiguo 13/05/2014, 20:52
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: PHP programación cantidad de aprobados

Cita:
Por eso tambien me preguntaba si se puede hacer en un for y por ende donde guardar notas y donde nombres
Si guardas los nombres, es redundante saber la cantidad, no es necesario hacer un nuevo for.

Código PHP:
Ver original
  1. $resumen_notas = array("aplazados"=>array(), "desaprobados" => array(), "aprobados"=>array());
  2. foreach($Nota as $key => $calificacion)
  3. {
  4.      if($calificacion >= 7)
  5.         $resumen_notas["aprobados"][] = $nombres[$key];
  6.      elseif($calificacion >= 4)
  7.      //...
  8.      else
  9.      //...
  10. }

de igual forma, puedes usar var_dump para ver la lista de nombres, y si quieres saber la cantidad, puedes hacer uso de la funcion count() sobre el elemento que te interece, por ejemplo:
Código PHP:
Ver original
  1. echo(count($resumen_notas["aprobados"]));
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #9 (permalink)  
Antiguo 13/05/2014, 22:54
Avatar de marco96_af  
Fecha de Ingreso: mayo-2014
Ubicación: Buenos Aires, Argentina
Mensajes: 23
Antigüedad: 9 años, 11 meses
Puntos: 0
Respuesta: PHP programación cantidad de aprobados

NSD, te agradezco mucho, muchísimo el tiempo que estas en tratar de hacérmelo entender.. pero seré yo. No se. Explicas excelentemente bien y muy detallado. pero no puedo hacer. Y no creas que no intente, cada cosa que me dijiste la estuve tratando de hacer por horas.

Ahora que estoy en la pc de donde tengo el programa te paso lo que tengo...
Primero comenze con esto
Código HTML:
<form method="POST" action="recepcion.php">
            <table border =1><tr>
            <td>Nombre</td><td> <input type="text" name="nombreUsuario"></td>
            <td> Nota </td> <td> <input type="text" name="Nota" size="5"> </td>
            </tr> 
            <tr>
                <td>Nombre</td><td> <input type="text" name="nombreUsuario1"></td>
            <td> Nota </td> <td> <input type="text" name="Nota1" size="5"> </td>
            </tr> 
            <tr>
                <td>Nombre</td><td> <input type="text" name="nombreUsuario2"></td>
            <td> Nota </td> <td> <input type="text" name="Nota2" size="5"> </td>
            </tr> 
            </table>
            <input type="submit" value="enviar"> 
Como veras era largisimo, y tenia que hacer 10 alumnos y 10 notas.
En su pagina de recepcion, dondo yo recibia los datos tenia esto...

Código HTML:
<?php
$listado= array($_REQUEST['nombreUsuario'],$_REQUEST['Nota'],$_REQUEST['nombreUsuario1'],
               $_REQUEST['Nota1'],$_REQUEST['nombreUsuario2'],$_REQUEST['Nota2'],
               $_REQUEST['nombreUsuario3'],$_REQUEST['Nota3'],$_REQUEST['nombreUsuario4'],
               $_REQUEST['Nota4'],$_REQUEST['nombreUsuario5'],$_REQUEST['Nota5']);
echo ("<table border='2' cellpadding='7' cellspacing='0'>");
echo ("Los alumnos y sus respectivas notas");
for ($j=0; $j<=11; $j++)
{
    echo ("<td>".$listado[$j]."</td>");
}
    echo("</table>");
    $Nota=$_REQUEST['Nota'.'Nota1'.'Nota2'.'Nota3'.'Nota4'.'Nota5'];
    
    //$Nota2=$_REQUEST['Nota1'];
    //$Nota3=$_REQUEST['Nota2'];
    //$Nota4=$_REQUEST['Nota3'];
    //$Nota5=$_REQUEST['Nota4'];
    //$Nota6=$_REQUEST['Nota5'];
    //$suma=$Nota1+$Nota2+$Nota3+$Nota4+$Nota5+$Nota6;
    $prom=$suma/6;
    echo("<b>"."Las notas fueron:"."</b>"."<br />"."<td>".$Nota1.$Nota2.$Nota3.$Nota4.$Nota5.$Nota6."</td>"."<br />");
    echo("<b>"."El promedio general fue:"."</b>"."<br />".$prom."<br />");
    foreach($Nota as $calificacion)
        $resumen_notas = array("aplazados"=>0, "desaprobados" => 0, "aprobados"=>0);
        foreach($Nota as $calificacion){
            if($calificacion >= 7)
        $resumen_notas["aprobados"]++;
     elseif($calificacion >= 4) 
         $resumen_notas["aplazados"]++;
     else
         $resumen_notas["desaprobados"]++;
         }
         var_dump($resumen_notas);
    ?>
Como veras, hay cosas comentadas, cosas probadas tuyas. En fin, creo que le estoy errando en algo y fuerte.

Al ver tantas lineas, averigue como listar todo en un for, y cree otra vez haciendo esto

Código HTML:
<?php 
echo '<form method="post" action="RecibeDatos.php"> ';
echo '<table border =1><tr>';
for($i = 1; $i <= 10; $i++){  
echo '<p><label for="Nombre'.$i.'"><td>nombre '.$i.'</label>';  
echo '<input type="text" name="nombre'.$i.'</p>"/></td></tr>'; 
echo '<tr><p><label for="Nota'.$i.'"><td>nota '.$i.'</label>'; 
echo '<input type="text" name="nota'.$i.'</p>"/></td></tr>'; 
} 
echo '<table>'
?> 
<input type="submit" name="button" id="button" value="Enviar" />  
</form> 
Mucho no lo entiendo.. pero no te incumbe, funciona jaja.
Como veras esta en PHP, y ahi me quede
En pagina de recepcion quiero hacer esto
Código HTML:
<?php 
echo 'El nombre y sus respectivas notas';
echo $_REQUEST['Nota'];
//$calificaciones= array("Nota");
//var_dump($calificaciones);

//echo 'NOTAS<br>'; 
//for($i = 1; $i <= 3; $i++){ 
//echo 'Nota '. $i .': '; 
//echo $_REQUEST['nota'.$i].'<br>';
v
Y nada, me dice que REQUEST no es correspondiente o algo por el estilo.

Se que es mucho para leer. Me harías un gran favor guiarme un poco, porque estoy bastante perdido.
Pero si no queres, esta todo mas que bien, ya me ayudaste demasiado. Muchas gracias
  #10 (permalink)  
Antiguo 15/05/2014, 09:05
Avatar de marco96_af  
Fecha de Ingreso: mayo-2014
Ubicación: Buenos Aires, Argentina
Mensajes: 23
Antigüedad: 9 años, 11 meses
Puntos: 0
Respuesta: PHP programación cantidad de aprobados

Alguno tendrá una respuesta adicional
  #11 (permalink)  
Antiguo 15/05/2014, 09:51
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: PHP programación cantidad de aprobados

$_REQUEST es una variable que se usaba en versiones anteriores de php, actualmente esta por compatibilidad y otros temas menores, su uso es en la practica reemplazado por el de $_POST y $_GET

Ahora, vamos por partes que tu codigo tiene muchos errores:
Código HTML:
Ver original
  1. <form method="post" action="recepcion.php"><!-- En minusculas, no cambia nada, pero es mas prolijo;) -->
  2.             <table border =1><tr>
  3.             <td>Nombre</td><td> <input type="text" name="nombres[]"></td><!-- Vas a cargar varios, por lo que todos deben tener el mismo nombre, y como es un conjunto de valores, no uno solo, se le agregan los corchetes, que indican que es un array -->
  4.             <td> Nota </td> <td> <input type="text" name="calificaciones[]" size="5"> </td><!-- Idem del anterior -->
  5.             </tr>
  6. <--
  7. A partir de aca, puedes agregar todas las filas que quieras, sean 2, 5, 20, 100 o N, las que quieras, el algoritmo funcionara para cualquier cantidad que agregues. puedes usar si quieres tu for  para meter la cantidad que quieras, da lo mismo.
  8. NOTA: si usas el for, el tr de arriba no va ya que el for los genera a todos iguales, es medio obvio, pero lo aclaro por las dudas.
  9. -->
  10.             <tr>
  11.                 <td>Nombre</td><td> <input type="text" name="nombres[]"></td> <!-- fijate que uso ciempre el mismo name -->
  12.             <td> Nota </td> <td> <input type="text" name="calificaciones[]" size="5"> </td><!-- y aca tambien, siempre los mismos dos names -->
  13.             </tr>
  14.             <tr>
  15.                 <td>Nombre</td><td> <input type="text" name="nombres[]"></td>
  16.             <td> Nota </td> <td> <input type="text" name="calificaciones[]" size="5"> </td>
  17.             </tr>
  18.             </table>
  19.             <input type="submit" value="enviar">
  20. </form> <!-- esto quizas lo recortaste accidentalmente, pero de bede ir -->

Paso a explicar, el atributo name es unico y lleva al nombre con el que identificaras el campo en php, pero en este caso (y muchos otros) tu no tienes un nombre, sino varios, y tu no tienes una nota, sino varias entonces lo que tienes es un arreglo de nombres y un arreglo de notas, los arreglos comparten un mismo nombre y difieren en su indice.

Similar a la sintaxis de php (aunque no tienen nada que ver unos con otros, ojo!) usar name="nombres[]" lo que hace es agregar un elemento al array nombres incrementando su indice, ¿Que significa? bueno, significa, a efectos practicos, que estas dos expreciones son equivalentes:

Código HTML:
Ver original
  1. <!--esto-->
  2. <input type="text" name="nombres[]">
  3. <input type="text" name="nombres[]">
  4. <input type="text" name="nombres[]">
  5.  
  6. <!-- es lo mismo que esto -->
  7. <input type="text" name="nombres[0]">
  8. <input type="text" name="nombres[1]">
  9. <input type="text" name="nombres[2]">

¿Se entiende la idea? usando la primer forma podemos repetir el codigo tantas veces como queramos y el navegador solo armara los indices, si lo hacemos de la segunda forma, nosotros tenemos que definir los indices explicitamente.
(No considero importante profundizar mas, si tienes dudas o no se entiende, preguntas)

Ahora bien, te dije al principio que $_REQUEST es un poco viejita y que hay variables "nuevas" para esto, (nuevas va entre comillas, porque hace mucho que estan disponibles, son mas recientes que $_REQUEST, nada mas)

Ahora, bien ¿cuales son, y como las usamos? tu formulario lo envias por POST asi que la variable a usar es la superglobal $_POST
Código PHP:
Ver original
  1. // Cambie algunos nombres de variables para que sea mas claro, nada mas.
  2.  
  3. $calificaciones = $_POST["calificaciones"]; // Esto lo hago solo con fines didacticos, en la practica puedes trabajar directamente con la superglobal, no necesitas copiar su contanido a otra variable, es una "mala practica" por llamarlo de alguna manera.
  4. $nombres = $_POST["nombres"]; // Idem anterior.
  5.  
  6. // Ahora, si te fijas, $calificaciones y $nombres no son valores fijos, sino que son arrays:
  7. var_dump($nombres);
  8. var_dump($calificaciones);
  9.  
  10. // Haces el calculo:
  11.  
  12. $resumen_notas = array("aplazados"=>array(), "desaprobados" => array(), "aprobados"=>array());
  13. foreach($calificaciones as $nro => $nota)
  14. {
  15.      if($nota >= 7)
  16.         $resumen_notas["aprobados"][] = $nombres[$nro];
  17.      elseif($nota >= 4)
  18.      //...
  19.      else
  20.      //...
  21. }
  22.  
  23. //Y ahora solo mostras la info:
  24. echo ("Aprobados (".count($resumen_notas["aprobados"]).") : ".(implode(", ", $resumen_notas["aprobados"])."<br>");
  25. // Idem para los otros 2.

en la parte de mostar podes hacer una tabla o lo que se te ocurra, yo lo puse asi para simplificar
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios

Última edición por NSD; 15/05/2014 a las 10:04
  #12 (permalink)  
Antiguo 15/05/2014, 12:00
Avatar de marco96_af  
Fecha de Ingreso: mayo-2014
Ubicación: Buenos Aires, Argentina
Mensajes: 23
Antigüedad: 9 años, 11 meses
Puntos: 0
Respuesta: PHP programación cantidad de aprobados

NSD, gracias, gracias y gracias. Pude resolverlo, y me salio perfectamente!

Gracias por tomarte el tiempo de explicármelo, tan detalladamente. La unica forma de programar es pasar horas intentandolo hasta que te salga, jaja.
Muchisimas graciass

Etiquetas: cantidad, formulario, programacion, variable
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 04:32.