Foros del Web » Programando para Internet » PHP »

problemas con bucles

Estas en el tema de problemas con bucles en el foro de PHP en Foros del Web. Saludos! mi problema consiste en que genero un array con 20 numeros aleatorios, con la funcion rand(), y quiero almacenar en otro array de destino ...
  #1 (permalink)  
Antiguo 09/04/2008, 06:31
 
Fecha de Ingreso: abril-2008
Mensajes: 2
Antigüedad: 16 años, 7 meses
Puntos: 0
problemas con bucles

Saludos! mi problema consiste en que genero un array con 20 numeros aleatorios, con la funcion rand(), y quiero almacenar en otro array de destino otros 20 numeros que no se repitan dentro del primer array. Utilizo un bucle while pero no funciona... se queda bloqueado... ¿alguien me podria dar alguna solución?

GRACIAS POR LA AYUDA!

_________________________________________________
<?PHP

$array_numeros = array ();
$array_numeros_comp = array();


for( $i = 0; $i <= 19 ; $i++){

//crea un numero al azar de 1 a 20
//lo imprime
$k = $i;
print(" ");
$j = rand (1, 30);
$array_numeros[$i] = $j; //los numeros generados se guardan aqui
print (" ");
print ($array_numeros[$i]);



}

print ("\n ______________\n");




for ( $i = 0; $i <= 19 ; $i++) {

for ($k = $i; $k <= 19; $k++) {

while ($array_numeros[$i] == $array_numeros_comp[$k]){
$j = rand(1, 30);
$array_numeros[$k] = $j;



}

}
}



foreach ($array_numeros_comp as $v) {
print ($v);
print (" ");
}

?>

_________________________________________________
  #2 (permalink)  
Antiguo 09/04/2008, 07:30
 
Fecha de Ingreso: enero-2008
Mensajes: 381
Antigüedad: 16 años, 10 meses
Puntos: 19
Re: problemas con bucles

una pregunta...

como vas a crear 40 numero no repetidos de numeros aleatorios del 1 al 30???
  #3 (permalink)  
Antiguo 09/04/2008, 08:30
(Desactivado)
 
Fecha de Ingreso: diciembre-2006
Mensajes: 529
Antigüedad: 17 años, 11 meses
Puntos: 11
Re: problemas con bucles

Hola El-FeNiX!

Claro... debes usar un rango más amplio en rand(), por ejemplo rand(0,1000);
Ya tienes muchas más posibilidades.

Otra cosa... no veo muy óptimo lo que haces en el segundo while, recorres uno por uno los elementos del primer array para ver si hay aguna coincidencia.

Además ten en cuenta que en el primer array puede haber valores duplicados,
tampoco estas controlando eso.

Debemos buscar alguna manera para evitar ese trabajo para PHP y que sea más eficiente el código, por ejemplo:

Código PHP:
// Preparemos las matrices.
$array_numeros = array ();
$array_numeros_comp = array();
 
// Generemos el primer array
 
for( $i 1$i <= 20$i++){
 
 
do
{
$j rand (11000);
}
while(
in_array($j,$array_numeros))
 
$array_numeros[$i] = $j;
echo 
" $j "// estamos incluyendo el espacio antes y después
 

Fíjate que he utilizado la estructura do {...}while() que te garantiza que el
bucle va a ser recorrido al menos una vez y se seguirá repitiendo miesntras la condición dentro de while() sea correcta.

Lo que le dije a la estructura anterior en español es:

Genera un numero aleatorio, pero... si ese numero ya existe dentro del array $array_numeros, entonces volve a generarlo hasta que el nuevo numero $j no exista en el array.

Ahora vamos al segundo array, que, con el código que ya te mostré te puede imaginar de cómo va a ser:

Código PHP:
 
// Generemos el segundo array
 
for( $i 1$i <= 20$i++){
 
 
do
{
$j rand (11000);
}
while(
in_array($j,$array_numeros) || in_array($j,$array_numeros_comp))
 
$array_numeros_comp[$i] = $j;
echo 
" $j ";
 

Fíjate que ene ste caso en la condición dentro del while agregue que
si $j existe en el primer array o si $j existe en el segundo, que lo vuelva a generar.


Como consecuencia (y con este simple código ejemplificativo) tendrás dos arrays con 20 elementos cada uno y no repetitivos, ni entre los array ni entre ellos mismos.

Bueno amigo, espero haberte sido de ayuda parea optimizar tus códigos y para que sigamos aprendiendo juntos en esta gran comunidad.

Saludos
  #4 (permalink)  
Antiguo 10/04/2008, 11:13
 
Fecha de Ingreso: abril-2008
Mensajes: 2
Antigüedad: 16 años, 7 meses
Puntos: 0
Re: problemas con bucles

Problema solucionado!!


Gracias amigo!! ya esta resuelta mi duda y he aprendido a optimizar mi codigo!

Probé de tantas maneras distintas esto que al final ni me plantee optimizar el codigo. Gracias por todo Usermax y Fenix.
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 12:15.