Foros del Web » Programando para Internet » PHP »

error en bucle!!

Estas en el tema de error en bucle!! en el foro de PHP en Foros del Web. holas, estoy trtamdo de hacer que a partir de un numero aleatorio se generen 20 numeros diferentes, pero no me funciona siempre me sale el ...
  #1 (permalink)  
Antiguo 22/07/2009, 00:58
Avatar de cadrogui  
Fecha de Ingreso: junio-2003
Mensajes: 875
Antigüedad: 20 años, 10 meses
Puntos: 5
error en bucle!!

holas, estoy trtamdo de hacer que a partir de un numero aleatorio se generen 20 numeros diferentes, pero no me funciona siempre me sale el mismo numero 20 veces.. ahi el code...

Código PHP:
<?

$NroTarjeta 
rand(100,999);  // obtengo un numero aleatorio 
   

// matriz

   
for ($contador 1$contador <= 20$contador++) 
   { 
   
         
$Z = ($NroTarjeta 1); 
        
$n =  pow($NroTarjeta,(1/3));
        
$nRnd ceil($n); // redondeo el valor de n
        
$ValorLetra = ($nRnd $Z); // cada letra vale n redondeado por z
        
$ValorLetraRed substr($ValorLetra,2); // reduzco la cantidad de caracteres a 2
        
$NroChar strlen($ValorLetraRed); // obtengo el numero de caracteres de la cadena
                
        
if ($NroChar == "1"// si es igual a 1 osea 1 digito
            

                echo 
"arreglado <br>";
                   
$NroCharFix = ($ValorLetraRed 10); // sumo 10 para subirlo a 2 digitos
                
echo "valor final = " .$NroCharFix"<br>";
            } else {
            
                echo 
"valor final = " .$ValorLetraRed"<br>";

            }
        
   }


?>
espero me den una mano,

gracias,.
__________________
La mejor manera de aprender es por medio de un aprendizaje significativo....

http://www.cocert.cl
  #2 (permalink)  
Antiguo 22/07/2009, 02:30
 
Fecha de Ingreso: enero-2008
Mensajes: 381
Antigüedad: 16 años, 3 meses
Puntos: 19
Respuesta: error en bucle!!

Has puesto $NroTarjeta = rand(100,999); fuera del bucle por lo que siempre sera el mismo numero. Simplemente ponlo dentro para que cada vez que se recorra el bucle asigne otro valor a $NroTarjeta

Si tiene que ser obligatoriamente no repetido, ve añadiendo todos los numeros generados a un array y despues haces un blucle para comprobar si no esta en el array.

Código PHP:

$NrosGen 
= new Array();

// matriz

   
for ($contador 1$contador <= 20$contador++) 
   { 
        do 
$NroTarjeta rand(100,999);  // obtengo un numero aleatorio    
        
while (!in_array($NrosGen)); // comprueba si ya ha sido usado 
        
$NrosGen[] = $NroTarjeta// Añade al siguiente valor disponible del array el numero generado.
        
$Z = ($NroTarjeta 1); 
        
$n =  pow($NroTarjeta,(1/3));
        
$nRnd ceil($n); // redondeo el valor de n
        
$ValorLetra = ($nRnd $Z); // cada letra vale n redondeado por z
        
$ValorLetraRed substr($ValorLetra,2); // reduzco la cantidad de caracteres a 2
        
$NroChar strlen($ValorLetraRed); // obtengo el numero de caracteres de la cadena
                
        
if ($NroChar == "1"// si es igual a 1 osea 1 digito
            

                echo 
"arreglado <br>";
                   
$NroCharFix = ($ValorLetraRed 10); // sumo 10 para subirlo a 2 digitos
                
echo "valor final = " .$NroCharFix"<br>";
            } else {
            
                echo 
"valor final = " .$ValorLetraRed"<br>";

            }
        
   } 
Tampoco entiendo porque haces tantas operaciones, pero será para algo que necesites.
  #3 (permalink)  
Antiguo 22/07/2009, 10:03
Avatar de cadrogui  
Fecha de Ingreso: junio-2003
Mensajes: 875
Antigüedad: 20 años, 10 meses
Puntos: 5
Respuesta: error en bucle!!

gracias por la respuesta, pero lo que busco es que solamente se utilice 1 vez el numero aleatorio y que dentro del bucle se generen 20 numeros para despues meterlos dentro de un array!!!, ya que en posterior debo realizar la comprobacion de los 20 numeros generados a partir del nro que se genero en un comienzo, el cual despues es guardado en la bd, por ejemplo, si obtengo el 553 y sus 4 primeros numeros generados son 34 - 22 -65 - 43, mediante operaciones matematicas debo obtener esos mismos numeros


salu2
__________________
La mejor manera de aprender es por medio de un aprendizaje significativo....

http://www.cocert.cl
  #4 (permalink)  
Antiguo 22/07/2009, 12:15
Avatar de cadrogui  
Fecha de Ingreso: junio-2003
Mensajes: 875
Antigüedad: 20 años, 10 meses
Puntos: 5
Respuesta: error en bucle!!

he logrado que me genere los 20 numeros!!!!! ahora me falta meterlos en un array.

Código PHP:
$NroTarjeta rand(100,999);  
   
   for (
$contador 1$contador <= 10$contador++) 
   { 

        
//do {
        
        
$NroTarjeta $NroTarjeta 2;
        
// $NrosGen[] = $NroTarjeta; // Añade al siguiente valor disponible del array el numero generado.
        //} while (!in_array($NrosGen)); // comprueba si ya ha sido usado 
        
        
         
        
$Z = ($NroTarjeta 1); 
        
$n =  pow($NroTarjeta,(1/3));
        
$nRnd ceil($n); 
        
$ValorLetra = ($nRnd $Z); 
        
$ValorLetraRed substr($ValorLetra,2,2); 
        
$NroChar strlen($ValorLetraRed); 
                
        if (
$NroChar == "1"
            { 
                echo 
"arreglado - ";
                   
$NroCharFix = ($ValorLetraRed 10); 
                echo 
"valor final = " .$NroCharFix"<br>";
                
                for (
$val 1$val <= 1$val++)
                {
                
$matriz = array($val => $NroCharFix);
                echo 
"valor de la matriz " .$matriz[$val];
                }

                
                
            } else {
            
                
//echo "valor final = " .$ValorLetraRed. "<br>";
                
                
for ($val 1$val <= 1$val++)
                {
                    
$matriz = array($val => $ValorLetraRed);
                    echo 
"valor de la matriz " .$matriz[$val] ."<br>";
                    
//echo "<b> Valor 4 de la matriz: </b> <br>" .$matriz[4];
                
}


            }
                    
   } 

el unci problema es que cuando trato de recuperar un valor espacifico de la matriz en el caso de la linea comenctada 4 no me recupera nada, alguna sugerencia????


muchas gracias,.
__________________
La mejor manera de aprender es por medio de un aprendizaje significativo....

http://www.cocert.cl

Última edición por cadrogui; 22/07/2009 a las 13:24
  #5 (permalink)  
Antiguo 24/07/2009, 09:43
 
Fecha de Ingreso: enero-2008
Mensajes: 381
Antigüedad: 16 años, 3 meses
Puntos: 19
Respuesta: error en bucle!!

¿Ya lo has solucionado?

Si no es asi, creo que tienes un error de concepto.

Si haces esto:

for ($val = 1; $val <= 1; $val++)
{
$matriz = array($val => $ValorLetraRed);
echo "valor de la matriz " .$matriz[$val] ."<br>";
echo "<b> Valor 4 de la matriz: </b> <br>" .$matriz[4];
}

Es lo mismo que si le quitas el for, es inutil. Lo que hace php cuando lo ejecuta es:

1. Ejecutar la primera declaracion -> $var valdra 1
2. Comprueba si se cumple la segunda declaracion (condicion) -> En este caso si se cumple
3. Ejecutar el codigo que hay dentro del for
4. Ejecutar la tercera declaracion -> $var valdra 2
5. Comprobar si se cumple la segunda declaracion (condicion -> No se cumple ya que 2 no es menor ni igual a 1

Entonces lo que hay dentro del for se ejecuta una sola vez y en esa vez $var valdra 1, por lo que ese array siempre tendra unicamente un valor.

Creo que hay esta el error, si no entiendes lo que digo buscar informacion sobre el bucle for.

Saludos.
  #6 (permalink)  
Antiguo 24/07/2009, 09:57
 
Fecha de Ingreso: enero-2008
Mensajes: 381
Antigüedad: 16 años, 3 meses
Puntos: 19
Respuesta: error en bucle!!

Hola, he revidado el codigo y le he cambiado varias cosas. Si tienes dudas sobre los arrays puede entrar aqui

Si no es eso lo que quieres hacer dimelo.

Código PHP:
<?php 
$NrosGen 
= Array();
$NroTarjeta rand(100,999);  
   
   for (
$contador 1$contador <= 20$contador++) 
   { 

        
//do {
        
        
$NroTarjeta $NroTarjeta 2;
        
// $NrosGen[] = $NroTarjeta; // Añade al siguiente valor disponible del array el numero generado.
        //} while (!in_array($NrosGen)); // comprueba si ya ha sido usado 
        
        
         
        
$Z = ($NroTarjeta 1); 
        
$n =  pow($NroTarjeta,(1/3));
        
$nRnd ceil($n); 
        
$ValorLetra = ($nRnd $Z); 
        
$ValorLetraRed substr($ValorLetra,2,2); 
        
$NroChar strlen($ValorLetraRed); 
                
        if (
$NroChar == "1"$ValorLetraRed += 10
        
$NrosGen[] = $ValorLetraRed;
   }  
   
echo 
"<p>"print_r($NrosGen);
?>
  #7 (permalink)  
Antiguo 28/07/2009, 16:04
Avatar de cadrogui  
Fecha de Ingreso: junio-2003
Mensajes: 875
Antigüedad: 20 años, 10 meses
Puntos: 5
Respuesta: error en bucle!!

muchas gracias, me di cuenta gracias a ti que tenia mal declarado el array por que a mi al momento de ejecutarlo me mostraba lo siguiente:

Valor 0 de la matriz: 10
Valor 1 de la matriz:
Valor 2 de la matriz:
Valor 3 de la matriz:
Valor 4 de la matriz:
Valor 5 de la matriz:
Valor 6 de la matriz:
Valor 0 de la matriz: 10
Valor 1 de la matriz: 10
Valor 2 de la matriz:
Valor 3 de la matriz:
Valor 4 de la matriz:
Valor 5 de la matriz:
Valor 6 de la matriz:
Valor 0 de la matriz: 10
Valor 1 de la matriz: 10
Valor 2 de la matriz: 10
Valor 3 de la matriz:
Valor 4 de la matriz:
Valor 5 de la matriz:
Valor 6 de la matriz:
Valor 6 de la matriz:
Valor 0 de la matriz: 10
Valor 1 de la matriz: 10
Valor 2 de la matriz: 10
Valor 3 de la matriz: 67
Valor 4 de la matriz:
Valor 5 de la matriz:
Valor 6 de la matriz:
Valor 0 de la matriz: 10
Valor 1 de la matriz: 10
Valor 2 de la matriz: 10
Valor 3 de la matriz: 67
Valor 4 de la matriz: 67
Valor 5 de la matriz:
Valor 6 de la matriz:
Valor 0 de la matriz: 10
Valor 1 de la matriz: 10
Valor 2 de la matriz: 10
Valor 3 de la matriz: 67
Valor 4 de la matriz: 67
Valor 5 de la matriz: 67
Valor 6 de la matriz:
Valor 6 de la matriz:
Valor 0 de la matriz: 10
Valor 1 de la matriz: 10
Valor 2 de la matriz: 10
Valor 3 de la matriz: 67
Valor 4 de la matriz: 67
Valor 5 de la matriz: 67
Valor 6 de la matriz: 25
Valor 0 de la matriz: 10
Valor 1 de la matriz: 10
Valor 2 de la matriz: 10
Valor 3 de la matriz: 67
Valor 4 de la matriz: 67
Valor 5 de la matriz: 67
Valor 6 de la matriz: 25
Valor 0 de la matriz: 10
Valor 1 de la matriz: 10
Valor 2 de la matriz: 10
Valor 3 de la matriz: 67
Valor 4 de la matriz: 67
Valor 5 de la matriz: 67
Valor 6 de la matriz: 25
Valor 6 de la matriz: 25

ahora la pregunta... como hago para separar en variables individuales los valores del array?, debido a que al momento de tratar de obtener un solo valor

Código PHP:
echo print_r($NrosGen[2]); 
me muestra un valor de 3 cifras.....

gracias.
__________________
La mejor manera de aprender es por medio de un aprendizaje significativo....

http://www.cocert.cl
  #8 (permalink)  
Antiguo 28/07/2009, 16:11
Avatar de cadrogui  
Fecha de Ingreso: junio-2003
Mensajes: 875
Antigüedad: 20 años, 10 meses
Puntos: 5
Respuesta: error en bucle!!

creo que una opcion seria esta:

Código PHP:
echo substr(print_r($NrosGen[4]),2,2); 
pd: despues de agregarle un bucle me muestra lo siguiente:

89valor: 0
77valor: 1
35valor: 2
52valor: 3
90valor: 4
95valor: 5
42valor: 6
60valor: 7
72valor: 8
47valor: 9
36valor: 10
75valor: 11
82valor: 12
12valor: 13
47valor: 14
60valor: 15
39valor: 16
95valor: 17
68valor: 18
85valor: 19
valor: 20

Código PHP:
for ($i 0$i <= 20$i++)


$matriz substr(print_r($NrosGen[$i]),2,2);

echo 
"valor: " .$i" " .$matriz"<br>";


la pregunta es por que me muestra el valor de $matriz al comienzo de la cadena???
la segunda pregunta es: como hago para dividir el array en 4 de 5 cada uno, osea una matriz de 4x5, ya que debo asignarles valor a tales variables

la idea final es hacer lo siguiente:

https://be.cajasegovia.es/images/Coo...so%2006-07.JPG

salu2 y gracias.
__________________
La mejor manera de aprender es por medio de un aprendizaje significativo....

http://www.cocert.cl

Última edición por cadrogui; 28/07/2009 a las 17:29
  #9 (permalink)  
Antiguo 29/07/2009, 09:22
 
Fecha de Ingreso: enero-2008
Mensajes: 381
Antigüedad: 16 años, 3 meses
Puntos: 19
Respuesta: error en bucle!!

Pero print_r casi solo se utiliza para comprobar la matriz en el momento de desarrollo. (Es solo para comprobar que esta todo bien,)

Ya esta la matriz decladarada, con todos sus valores, quitale el print_r y accede a la matriz como se hace normalmente
  #10 (permalink)  
Antiguo 29/07/2009, 19:36
Avatar de cadrogui  
Fecha de Ingreso: junio-2003
Mensajes: 875
Antigüedad: 20 años, 10 meses
Puntos: 5
Respuesta: error en bucle!!

ejaleeee, gracias man!!!!

salu2
__________________
La mejor manera de aprender es por medio de un aprendizaje significativo....

http://www.cocert.cl
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 09:33.