Foros del Web » Programando para Internet » PHP »

Array y numeros aleatorios...

Estas en el tema de Array y numeros aleatorios... en el foro de PHP en Foros del Web. Buenas a todos, antes de nada me presento pues soy nuevo en el foro, que alguna que otra vez ya me sirvió de ayuda, pero ...
  #1 (permalink)  
Antiguo 30/01/2011, 06:18
 
Fecha de Ingreso: enero-2011
Mensajes: 8
Antigüedad: 13 años, 2 meses
Puntos: 0
Array y numeros aleatorios...

Buenas a todos, antes de nada me presento pues soy nuevo en el foro, que alguna que otra vez ya me sirvió de ayuda, pero en esta ocasión tras buscar y buscar más bien estoy hecho un lío y necesito que me echen una manilla; pues bien el problema es el siguiente:

Un ejercicio que me pide:

Crea una tabla de una fila y 6 columnas, y en cada celda que contenga un numero aleatorio del 1 al 49, evitando la posibilidad de que este se repita. Se sugiere que antes del proceso de construcción de tabla se generen los números aleatorios (con la función mt_rand) y se guarden en un array escalar de forma que cada vez que genere uno compruebe si existe en el array ya, en caso de que exista no se almacena y se genera un nuevo numero.

Bien antes de nada una de mis primeras dudas: lo de la tabla de 1x6 es igual que un array de 6 elementos, ¿no?.

Os dejo el código que llevo realizado hasta el momento, porque es que no consigo comprobar tras mil y un intentos si se repite o no el dichoso numero ni como regenerarlo después:

-------------------------------------------------------------------------------------------------------
<html>
<head>
<title>Ejercicio tablas 4</title>
</head>
<body>
<?

for($i=0;$i<6;$i++)
{
$var=mt_rand(1,49);
$a[$i]=$var;

/*Aquí se supone que se entra a comparar elementos y a regenerar el numero, ¿no?, por favor iluminadme*/
}

echo "<table border=1>";
echo "<tr>";
for($i=0;$i<6;$i++)
{
echo "<td>";
echo $a[$i];
echo "</td>";
}
echo "</tr>";
echo "</table>";

?>
</body>
</html>
-------------------------------------------------------------------------------------------------------

PD: Como programador no valgo un duro, comprendo las cosas pero a la hora de hacerlas no se hacer nada.

Gracias.
  #2 (permalink)  
Antiguo 30/01/2011, 07:43
 
Fecha de Ingreso: enero-2011
Ubicación: sergigp.com
Mensajes: 7
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: Array y numeros aleatorios...

Buenas zxmanu,

Cuando generas el numero aleatorio deberias comparar con los que ya tienes, en caso de que los tengas deberias generar otro número aleatorio. Cuando el numero aleatorio no lo tienes, lo guardas.

Código PHP:
        for ($i 0$i 6$i++) {
            
$numAleatorio mt_rand(149);
            foreach (
$arrayNumerosAleatorios as $valor) {
                
//comprobamos si lo tenemos
                
if ($valor == $numAleatorio) {
                    
//lo tenemos ya en el array
                    
$numAleatorio mt_rand(149); //volvemos a buscar
                    
$x 0//reiniciamos la búsqueda
                
}
            }
            
$arrayNumerosAleatorios[$i] = $numAleatorio;
        }
        
print_r($arrayNumerosAleatorios); 
Una vez tienes el array con los numeros solo hace falta que lo recorras con un foreach para rellenar la tabla.

Código HTML:
<table>
<tr>
<?php foreach ($arrayNumerosAleatorios as $valor){?>
<td>
<?php echo $valor; ?>
</td>
<?php }?>
</tr>
</table> 
De esta manera no mezclas codigo HTML y PHP, lo que es una buena práctica :)
  #3 (permalink)  
Antiguo 30/01/2011, 08:24
Avatar de portalmana  
Fecha de Ingreso: septiembre-2007
Ubicación: Montevideo-Uruguay
Mensajes: 633
Antigüedad: 16 años, 6 meses
Puntos: 80
Respuesta: Array y numeros aleatorios...

Puedes obviar el foreach para ver si se repite o no, con la funcion in_array que verifica si un elemento esta o no presente en un arreglo.
Código PHP:
Ver original
  1. // retorna true si se encuentra o false si no
  2. in_array($numAleatorio, $arrayNumerosAleatorios )

Saludos
__________________
"La imaginación es más importante que el conocimiento. El conocimiento es limitado, mientras que la imaginación no" -- A.Einstein
objetivophp.com,twitter.com/objetivophp
  #4 (permalink)  
Antiguo 30/01/2011, 09:17
 
Fecha de Ingreso: enero-2011
Ubicación: sergigp.com
Mensajes: 7
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: Array y numeros aleatorios...

correcto portalmana :)

Entonces quedaria algo como

Código PHP:
while (in_array($numAleatorio$arrayNumerosAleatorios )){
$numAleatorio mt_rand(149); 

  #5 (permalink)  
Antiguo 30/01/2011, 09:56
Avatar de portalmana  
Fecha de Ingreso: septiembre-2007
Ubicación: Montevideo-Uruguay
Mensajes: 633
Antigüedad: 16 años, 6 meses
Puntos: 80
Respuesta: Array y numeros aleatorios...

Si mas o menos quedaría así

Código PHP:
Ver original
  1. $arrayNumerosAleatorios = array();
  2.  
  3. for ($i = 0; $i < 6; $i++) {
  4.     while (in_array($numAleatorio = mt_rand(1, 49), $arrayNumerosAleatorios )){}
  5.     $arrayNumerosAleatorios[$i] = $numAleatorio;
  6. }
  7.  
  8. echo '<pre>';
  9. print_r($arrayNumerosAleatorios);
  10. echo '</pre>';
  11.  
  12. // Me gusta mas esta segunda forma
  13. $arrayNumerosAleatorios = array();
  14.  
  15. for ($i = 0; $i < 6; $i++) {
  16.     do {
  17.         $numAleatorio = mt_rand(1, 49);
  18.     } while (in_array($numAleatorio, $arrayNumerosAleatorios));
  19.     $arrayNumerosAleatorios[$i] = $numAleatorio;
  20. }
  21.  
  22. echo '<pre>';
  23. print_r($arrayNumerosAleatorios);
  24. echo '</pre>';

Saludos
__________________
"La imaginación es más importante que el conocimiento. El conocimiento es limitado, mientras que la imaginación no" -- A.Einstein
objetivophp.com,twitter.com/objetivophp
  #6 (permalink)  
Antiguo 30/01/2011, 11:06
 
Fecha de Ingreso: enero-2011
Mensajes: 8
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: Array y numeros aleatorios...

Muchas gracias tanto a SergiGP como a Portalmana por ayudarme y sacarme de más de un dolor de cabeza que me llevaba dando esto, el caso es que son ejercicios que desde mi perspectiva a fin de cuentas no son muy difíciles, pero que aún entendiendo bastante bien el código que me habéis planteado me cuestan realizar por mi mismo la misma vida, siempre he sido así con el tema de programación sea cual sea el lenguaje (Java,C,php..)

Por cierto en PHP además estoy recién empezando y más o menos me desenvuelvo pero ya os digo, soy un desastre...
  #7 (permalink)  
Antiguo 30/01/2011, 11:16
 
Fecha de Ingreso: enero-2011
Mensajes: 8
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: Array y numeros aleatorios...

Por cierto SergiGP, tengo una duda respecto a tu código y es que no entiendo este fragmento:

Código PHP:
if ($valor == $numAleatorio) {
                    
//lo tenemos ya en el array
                    
$numAleatorio mt_rand(149); //volvemos a buscar
                    
$x 0//reiniciamos la búsqueda
                

¿La variable "$x" en que influye?, es que la veo ahí sola y me he liado un poco.


EDIT: Lo he probado sin al variable $x y parece ir a la perfección.
EDIT 2: Tengo que realizar otro ejercicio de una tabla (array bidimensional) y tengo que contar el numero de veces que se repite el contenido de una tabla, ¿como se llama la función de contar en los arrays?

Última edición por zxmanu_3; 30/01/2011 a las 11:44
  #8 (permalink)  
Antiguo 30/01/2011, 15:00
Avatar de portalmana  
Fecha de Ingreso: septiembre-2007
Ubicación: Montevideo-Uruguay
Mensajes: 633
Antigüedad: 16 años, 6 meses
Puntos: 80
Respuesta: Array y numeros aleatorios...

Mira le linea de $x=0; para mi no hace nada en este código. Pero lo mas importante es que ese código te puede llegar a repetir un numero. Pues si se repite un numero se fija y pide uno nuevo, pero si este segundo numero se llegara a repetir ya no hace nada..
Con lo cual te quedaría un numero repetido.

Saludos
__________________
"La imaginación es más importante que el conocimiento. El conocimiento es limitado, mientras que la imaginación no" -- A.Einstein
objetivophp.com,twitter.com/objetivophp

Etiquetas: numeros, aleatoria
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 23:12.