Foros del Web » Programando para Internet » PHP »

Algoritmo para el autorrellenado de una matriz

Estas en el tema de Algoritmo para el autorrellenado de una matriz en el foro de PHP en Foros del Web. Hola, Estoy intentando realizar un algoritmo algo complejo el cual quiero que me rellene una matriz de 9 columnas y 3 filas con 15 números ...
  #1 (permalink)  
Antiguo 01/05/2012, 12:27
 
Fecha de Ingreso: septiembre-2008
Mensajes: 36
Antigüedad: 16 años, 2 meses
Puntos: 4
Algoritmo para el autorrellenado de una matriz

Hola,

Estoy intentando realizar un algoritmo algo complejo el cual quiero que me rellene una matriz de 9 columnas y 3 filas con 15 números aleatorios del 1 al 90.

Condiciones:
  • Cada columna solo puede contener los digitos correspondientes a su decena, es decir:

    Columna 1 -> 1,2,3,4,5,6,7,8,9
    Columna 2 -> 10,11,12,13,14,15,16,17,18,19
    Columna 3 -> 20,21,22,23,24,25,26,27,28,29
    ......
    Columna 9 -> 80,81,82,83,84,85,86,87,88,89,90
  • Como mínumo cada columna debe contener 1 número.
  • Debe haber exactamente 15 digitos en la matriz.
  • Dentro de una columna de la matriz, hay 3 campos (cada una de las filas), bien pues siempre que haya más de 1 número en 1 columna, el número de arriba debe de ser superior al del medio y al de abajo y el del medio debe de ser superior al de abajo.

¿Alguien podría ayudarme?

Un saludo y muchas gracias.
  #2 (permalink)  
Antiguo 02/05/2012, 02:51
Avatar de santris  
Fecha de Ingreso: agosto-2009
Ubicación: Sant Feliu de Llobregat
Mensajes: 955
Antigüedad: 15 años, 3 meses
Puntos: 66
Respuesta: Algoritmo para el autorrellenado de una matriz

El código es un poco largo pero ando mal en expresiones regulares....

Código PHP:
<?php
ini_set 
("display_errors","1" );
error_reporting(E_ALL);
function 
dame_num($min$max){
    
$num rand($min$max);
    return 
$num;
}
function 
dame_posiciones(){
    
$resultado='';
    
$nums=array();
    for(
$i=1$i<=12$i++){
    
$num dame_num(127);
        if(
in_array($num$nums) || in_array($num+9$nums) || in_array($num-9$nums))
            
$i--;    
        else
            
$nums[$i]=$num;
    }
    foreach(
$nums as $valor){
        
$resultado .= $valor."-";
    }
    return 
$resultado;
}
$nums dame_posiciones();
$posiciones=explode('-'$nums);
$sum=4;
$p=1;
for(
$i=1;$i<=3;$i++){//filas
    
$sum--;
    for(
$j=0;$j<=8;$j++){//columnas        
        
if($j==0){
            
$min $sum*3;
            
$max $sum*3-3;
        }
        else{
            
$min $j.$sum*3;
            
$max $j.$sum*3-3;
        }
        
$num dame_num($min$max);
        if(
in_array($p$posiciones))
            
$arr[$i][$j]='00';
        else
            
$arr[$i][$j]=$num;
        
$p++;
    }
}
echo 
"..........modo1........................<br />";
for(
$i=1;$i<=3;$i++){
    for(
$j=0;$j<=8;$j++){
        echo 
$arr[$i][$j];
        echo 
" - ";
    }
    echo 
"<br />";
}
echo 
"..........modo2........................<br />";

for(
$i=1;$i<=3;$i++){
    for(
$j=0;$j<=8;$j++){
        if(
$i==|| $i==2){
            if(
$arr[$i+1][$j]>$arr[$i][$j]){
                
$mayor $arr[$i+1][$j];
                
$menor $arr[$i][$j];
                
$arr[$i][$j]= $mayor;
                
$arr[$i+1][$j]= $menor;    
            }
        }
        echo 
$arr[$i][$j];
        echo 
" - ";
    }
    echo 
"<br />";
}
?>
Podrias comentar para que sirve?? es un juego de azar??

saludos,
__________________
Tu álbum de cromos online!!
  #3 (permalink)  
Antiguo 02/05/2012, 10:10
 
Fecha de Ingreso: septiembre-2008
Mensajes: 36
Antigüedad: 16 años, 2 meses
Puntos: 4
Respuesta: Algoritmo para el autorrellenado de una matriz

Hola santris,

Muchas gracias! Funciona a las mil maravillas.

Comentarte que si, es para un juego de azar que estoy haciendo.

Por cierto, ¿Si quisiera que los números fueran de menor a mayor en las columnas en vez de mayor a menor cambiaría mucho el algoritmo? ¿Cómo sería?

Un saludo y muchas gracias nuevamente.
  #4 (permalink)  
Antiguo 02/05/2012, 10:31
Avatar de santris  
Fecha de Ingreso: agosto-2009
Ubicación: Sant Feliu de Llobregat
Mensajes: 955
Antigüedad: 15 años, 3 meses
Puntos: 66
Respuesta: Algoritmo para el autorrellenado de una matriz

Para el modo1 solo hay que cambiar la variable $sum=0; y dentro del for $sum++;

para el modo2 cambiar esta linea(59) '<' en lugar de '>':

if($arr[$i+1][$j]<$arr[$i][$j]){

saludos,
__________________
Tu álbum de cromos online!!
  #5 (permalink)  
Antiguo 10/05/2012, 01:27
 
Fecha de Ingreso: septiembre-2008
Mensajes: 36
Antigüedad: 16 años, 2 meses
Puntos: 4
Respuesta: Algoritmo para el autorrellenado de una matriz

Hola santris,

Muchisimas gracias.

Una última consulta, ¿Si quisiera que obligatoriamente hubieran 5 números por línea como sería?

Es decir, comenté que tenian que ser 15 numeros en total, pero se me olvidó decir que tienen que estar repartidos en 5 por cada una de las 3 líneas. ¿Eso es posible?

Un saludo y muchas gracias.

Etiquetas: matriz, rellenar, algoritmos
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:22.