Foros del Web » Programando para Internet » PHP »

¿Como solicito una cantidad n de numeros y luego los ordeno en php?

Estas en el tema de ¿Como solicito una cantidad n de numeros y luego los ordeno en php? en el foro de PHP en Foros del Web. Necesito crear un programa que le pregunte al usuario cuantos numeros desea ordenar y que luego de eso me salga la opcion para introducir los ...
  #1 (permalink)  
Antiguo 20/08/2008, 13:42
 
Fecha de Ingreso: agosto-2008
Mensajes: 11
Antigüedad: 15 años, 8 meses
Puntos: 0
¿Como solicito una cantidad n de numeros y luego los ordeno en php?

Necesito crear un programa que le pregunte al usuario cuantos numeros desea ordenar y que luego de eso me salga la opcion para introducir los n numeros que se vayan a introducir. Esto en codigo php. La verdad se me ha hecho bastante dificil.-
  #2 (permalink)  
Antiguo 20/08/2008, 13:48
Avatar de Mort20  
Fecha de Ingreso: junio-2008
Ubicación: Roca Casterly
Mensajes: 141
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: ¿Como solicito una cantidad n de numeros y luego los ordeno en php?

Si lo quieres hacer en PHP deberás hacer primero un formulario dónde introduzca los números, luego recoges los datos por post o por get, ordenas y sacas el resultado.

Aunque imagino que lo que tu quieres es hacerlo dinámicamente, que el usuario pueda ir introduciendo y cambiando sin necesidad de ir pulsando enviar y esperar. Pero eso no es posible en PHP ya que es de cara al servidor. Para ello deberías usar un lenguaje de cara al cliente como JavaScript.
__________________
Un Lannister siempre cumple sus promesas
  #3 (permalink)  
Antiguo 20/08/2008, 13:53
 
Fecha de Ingreso: agosto-2008
Mensajes: 11
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: ¿Como solicito una cantidad n de numeros y luego los ordeno en php?

Me explico mejor. Entiendo que debo crear un formulario post o get que me recoga los datos. Sin embargo lo que deseo es que , el programa pregunte cuantos datos se van a ordenar y ese numero que introdusca el usuario sea el numero de cajas de texto que me salgan, por darte un ejemplo. No se si de esta manera se puede o si hay otra maner de hacerlo.--
  #4 (permalink)  
Antiguo 20/08/2008, 14:01
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: ¿Como solicito una cantidad n de numeros y luego los ordeno en php?

Puedes solicitar primeramente en un formulario cuántos números ordenar, luego enviarlo a un php que devuelva el formulario con los input con un bucle y que luego envíe a otro php que ordene los números.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #5 (permalink)  
Antiguo 20/08/2008, 14:02
Avatar de Mort20  
Fecha de Ingreso: junio-2008
Ubicación: Roca Casterly
Mensajes: 141
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: ¿Como solicito una cantidad n de numeros y luego los ordeno en php?

Ah, vale, yo pensaba en un simple "input" dónde se introdujesen los números separados por comas.
De todas formas es lo mismo, sólo que doblas la cantidad de formularios.
Para poner los distintos input para los números haz simplemente un for con el código de input. De nombre le pones, por ejemplo: numeros[$c] dónde $c es la clave del for actual. Así lo generas dinámicamente.

Luego en $_POST['numeros'] tendrías el array con todos los números.
__________________
Un Lannister siempre cumple sus promesas
  #6 (permalink)  
Antiguo 20/08/2008, 14:16
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: ¿Como solicito una cantidad n de numeros y luego los ordeno en php?

Aplicado a codigo seria algo como:

Código HTML:
<form action="calculo.php" method="post"><input type="text" name="nvalor" /><input type="submit" name="Enviar" vale="Enviar" /></form> 
En calculo tendrias:

Código PHP:
<?php
if(isset($_POST['Enviar']))
{
$cantidad = (int)$_POST['nvalor'];
echo 
'<form method="post" action="ordenar.php">';
for(
$i=1$i<=$cantidad$i++)
{
echo 
'Valor '.$i.': <input type="text" name="matriz['.$i.']" />'."<br>\n";
}
echo 
'<input type="submit" name="Ordenar" value="Ordenar" />';
echo 
'</form>';
}
?>
Luego en ordenar.php solamente seria toma cada valor con un foreach y luego ordenar el array con asort o la funcion que desees.
Esa parte te la dejo a ti.

Última edición por Ronruby; 20/08/2008 a las 14:54 Razón: Se me habia olvidado cerrar las etiquetas de formulario
  #7 (permalink)  
Antiguo 20/08/2008, 14:41
 
Fecha de Ingreso: agosto-2008
Mensajes: 11
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: ¿Como solicito una cantidad n de numeros y luego los ordeno en php?

Gracias por lo anterior, Justo lo que deseaba pero no he logrado lo que quiero hacer en totalidad. La verdad nunca he utilizado bucles foreach y los ordenamientos que he trabajado han sido estilos burbuja o seleccion, por lo que no se como podria hacer eso que me comentas. Ademas soy nuevo en php. Lei un poco pero no logro entender bien el punto.
  #8 (permalink)  
Antiguo 20/08/2008, 14:46
Avatar de Mort20  
Fecha de Ingreso: junio-2008
Ubicación: Roca Casterly
Mensajes: 141
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: ¿Como solicito una cantidad n de numeros y luego los ordeno en php?

Para ordenar tienes la función asort(); http://es2.php.net/manual/es/function.asort.php
Cuando ya tienes todos los números en un array simplemente la usas con él y ordenados.
__________________
Un Lannister siempre cumple sus promesas
  #9 (permalink)  
Antiguo 20/08/2008, 14:54
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: ¿Como solicito una cantidad n de numeros y luego los ordeno en php?

Se me habia olvidado algo de mi codigo. Ya lo modifique.
  #10 (permalink)  
Antiguo 20/08/2008, 15:19
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: ¿Como solicito una cantidad n de numeros y luego los ordeno en php?

Cita:
Iniciado por alialej Ver Mensaje
Gracias por lo anterior, Justo lo que deseaba pero no he logrado lo que quiero hacer en totalidad. La verdad nunca he utilizado bucles foreach y los ordenamientos que he trabajado han sido estilos burbuja o seleccion, por lo que no se como podria hacer eso que me comentas. Ademas soy nuevo en php. Lei un poco pero no logro entender bien el punto.
Código PHP:
<?php
//ordenar.php
asort($_POST['matriz']);
foreach(
$_POST['matriz'] as $valor)
{
    echo 
$valor."<br>\n";
}

?>
No es lo mas estetico xD Pero solo es una idea.
  #11 (permalink)  
Antiguo 20/08/2008, 15:58
 
Fecha de Ingreso: agosto-2008
Mensajes: 11
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: ¿Como solicito una cantidad n de numeros y luego los ordeno en php?

La verdad muchisimas gracias...Justo lo que necesitaba..sin ambargo estaba tratando junto con la ayuda anterior de hacer el ordenamiento tanto descendente como ascendente de los datos capturados. Tome en cuenta lo que me dijo ronruby e intente el metodo de ordenamiento de burbuja. Pero se me presenta el problema de que en ambos casos los ordena de manera descendente...Aqui dejo el codigo (teniendo en cuenta lo anterior este seria ordenar.php) para que me puedan decir cual es el posible error:

Código PHP:
<?php
$matriz
=$_REQUEST['matriz'];
$i=$_REQUEST['i'];
$j=$_REQUEST['j'];
$aux=$_REQUEST['aux'];
if(
$_REQUEST['Ordenar'])
{
  for(
$i=1;$i<5;$i++)
  {
    for(
$j=1;$j<5;$j++)
    {
      if(
$matriz[$j+1]>$matriz[$j])
      {
        
$aux=$matriz[$j+1];
        
$matriz[$j+1]=$matriz[$j];
        
$matriz[$j]=$aux;
      }
     }
   }
}   
   
printf("<br> **LOS NUMEROS ORDENADOS DE FORMA ASCENDENTE**\n\n<br> ");
   for(
$i=1;$i<=5;$i++)
   {
   
printf("<br>[%d]<br>",$matriz[$i]);
   }
if(
$_REQUEST['Ordenar'])
{
  for(
$i=1;$i<5;$i++)
  {
    for(
$j=1;$j<5;$j++)
    {
      if(
$matriz[$j+1]>$matriz[$j])
      {
        
$aux=$matriz[$j+1];
        
$matriz[$j+1]=$matriz[$j];
        
$matriz[$j]=$aux;
      }
     }
   }
}   
   
printf("<br> **LOS NUMEROS ORDENADOS DE FORMA DESCENDENTE**\n\n<br> ");
   for(
$i=1;$i<=5;$i++)
   {
   
printf("<br>[%d]<br>",$matriz[$i]);
   }
?>

Última edición por alialej; 20/08/2008 a las 16:24
  #12 (permalink)  
Antiguo 20/08/2008, 18:19
Avatar de Mort20  
Fecha de Ingreso: junio-2008
Ubicación: Roca Casterly
Mensajes: 141
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: ¿Como solicito una cantidad n de numeros y luego los ordeno en php?

Tu problema está claro que es que no entiendes como va el algorismo de la burbuja. Si te fijas en el cuerpo del 2º for mira cual es mayor y actúa en función de eso. Ahí es donde se define si se ordenará de forma ascendiente o descendiente.
De todas formas el algorismo de la burbuja es el peor de todos, puesto que es sumamente ineficiente. Aquí va uno mejor (el de ordenación por fusión, también llamado mergesort):

Código PHP:
<?php
function mergesort($arr) {
    
$sl round((count($arr)/2));
    
$sr count($arr)-$sl;
    
$l array_slice($arr0$sl);
    
$r array_slice($arr$sl);
 
    if(
$sl 1) {
        
$l mergesort($l);
    }
    if(
$sr 1) {
        
$r mergesort($r);
    }
    
$res merge($l$r);
    return 
$res;
 
}
 
function 
merge($l$r) {
    
$lc $rc $mc 0;
    
$res = array();
    
$cl count($l);
    
$cr count($r);
    while(
$lc $cl && $rc $cr) {
        if(
$l[$lc] < $r[$rc]) {
 
            
$res[$mc++] = $l[$lc++];
        }
        else {
            
$res[$mc++] = $r[$rc++];
        }
 
 
 
 
    }
    
$cl_t count($l);
    while(
$lc $cl_t) {
        
$res[$mc++] = $l[$lc++];
    }
    
$cr_t count($r);
    while(
$rc $cr_t) {
        
$res[$mc++] = $r[$rc++];
    }
    return 
$res;
}
?>
Para ejecutarlo sólo debes hacer: $array_a_ordenar = mergesort($array_a_ordenar);
Aquí queda ordenado de forma ascendiente.

Para cambiarlo la clave está en la función merge();
Esta función lo que hace es unir dos arrays, parecido a array_merge(); del PHP sólo que esta no cumple exactamente con lo que debería pues no ordena.
Esta fusión se hace de esta forma: teniendo en cuenta que sendos arrays están ordenados, se comprueba des del inicio hasta el final del array más corto qué elemento de ambos (es decir, array1[$c] y array2[$c]) es más pequeño. En función de eso pones un elemento u otro en tu array resultado ordenado, y avanzas un puntero u otro de arrays a fusionar para saber qué elementos se han colocado y cuales no. Una vez recorrido hasta el final uno de los dos arrays, se termina de agregar por el final el resto de elementos del array no recorrido del todo.

Hay algoritmos más eficientes, como el quicksort(); sin embargo este no es estable. Para tu caso te iría bien igual, pero para otros casos podría darte algún conflicto en los empates.
También hay otros estables bastante eficientes, como ordenación por selección, ordenación por inserción... Busca por google y encontrarás bastantes,
__________________
Un Lannister siempre cumple sus promesas
  #13 (permalink)  
Antiguo 20/08/2008, 18:42
 
Fecha de Ingreso: agosto-2008
Mensajes: 11
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: ¿Como solicito una cantidad n de numeros y luego los ordeno en php?

Ok . Ya vi mi error y gracias tambien por la recomendacion. La tomare en cuenta, agradecimientos a ti mort y a ronruby....Caso cerrado!!!
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 05:37.