Foros del Web » Programando para Internet » PHP »

Problema con programa aleatorio de horarios

Estas en el tema de Problema con programa aleatorio de horarios en el foro de PHP en Foros del Web. Hola a todos, Estoy creando un generador de horarios escolares aleatorios, y me ha ocurrido un problema serio. el programa es este que os pongo ...
  #1 (permalink)  
Antiguo 05/08/2008, 04:20
 
Fecha de Ingreso: diciembre-2005
Ubicación: BCN
Mensajes: 165
Antigüedad: 18 años, 3 meses
Puntos: 2
Problema con programa aleatorio de horarios

Hola a todos,
Estoy creando un generador de horarios escolares aleatorios, y me ha ocurrido un problema serio.

el programa es este que os pongo a continuacion:

Código PHP:
 <?
$i
=1//Declaramos i para el contador de materias
$mat=0;
//Contador de materias que tenemos
while ( $_POST["m".$i] != "" )
{
$mat++;
$i++;
}
//Comprobamos si la hora del patio es correcta
//Declaramos todas las variables de hora
$patio_h $_POST[hora_in_pat_h];
$patio_m $_POST[hora_in_pat_m];
$dur_pat_h $_POST[dur_pat_h];
$dur_pat_m $_POST[dur_pat_m];
$clase_h $_POST[hora_in_h];
$clase_m $_POST[hora_in_m];
$dur_clas_h $_POST[dur_clas_h];
$dur_clas_m $_POST[dur_clas_m];

//Empezamos a distribuir las materias
$cad=0;

for(
$i=1$i<=$mat$i++)
{
    
$materia="m".$i;
    
$pos=rand(1$mat);
    
$busca substr_count("$cad"$pos);
        
        if (
$busca == 0
        {
        
$orden[$pos]=$_POST["m".$i];
        
$cad=$cad.$pos;
        }else{
                while ( 
$busca != )
                {
                
$pos=rand(1$mat);
                
$busca substr_count("$cad"$pos);
                }
        
$orden[$pos]=$_POST["m".$i];
        
$cad=$cad.$pos;
        }
}
echo 
$cad;
echo 
"<br>";
//Una vez tenemos asignadoas los puestos a las materias, los mostramos

for($i=1;$i<=$mat+1;$i++)
{
$n=$i;
if( 
$i >= $i_patio )
{
$n--;
}

echo 
$horas[$i];
echo 
" - ";

    if ( 
$i == $i_patio )
        {
        echo 
"PATIO";
        }else{
        echo 
$orden[$n];
        }

echo 
"<br>";
}


?>
El caso es que desde un form externo yo le introduzco las diferentes asignaturas que quiero que tenga el programa, asi, en cuanto le doy a enviar, el programa las recibe y las empieza a distribuir con el sistema de distribucion aleatoria que he hecho que es este que se ve mas arriba:

Código PHP:
for($i=1$i<=$mat$i++)
{
    
$materia="m".$i;
    
$pos=rand(1$mat);
    
$busca substr_count("$cad"$pos);
        
        if (
$busca == 0
        {
        
$orden[$pos]=$_POST["m".$i];
        
$cad=$cad.$pos;
        }else{
                while ( 
$busca != )
                {
                
$pos=rand(1$mat);
                
$busca substr_count("$cad"$pos);
                }
        
$orden[$pos]=$_POST["m".$i];
        
$cad=$cad.$pos;
        }

todo funciona a la perfeccion, hasta ahora solo lo habia probado con 6 asignaturas y todas salian ordenadas muy rapidamente.
Pero hoy, he empezado a poner nuevas asignaturas y he descubierto que lo maximo que me permite el programa son 10 asignaturas.

A partir de 11, el programa se bloquea y pasados 30 segundos me muestra este mensaje de error:

Fatal error: Maximum execution time of 30 seconds exceeded in C:\AppServ\www\TR\p3.php on line 116

o

Fatal error: Maximum execution time of 30 seconds exceeded in C:\AppServ\www\TR\p3.php on line 117

Esta linea es la linea roja que indico mas abajo:

while ( $busca != 0 )
{
$pos=rand(1, $mat);
$busca = substr_count("$cad", $pos);

}

Eso es todo, solo una cosa mas, hay aveces en las que si que me lo coje todo, y me lo arroja. Lo unico que se me ocurre, es que el sistema de aletoriedad sea muy engorrososo y no se encuentre una salida.

Bueno espero que me ayuden, muchas gracias!

saludos,
  #2 (permalink)  
Antiguo 05/08/2008, 06:31
Avatar de desendoll  
Fecha de Ingreso: mayo-2008
Mensajes: 340
Antigüedad: 15 años, 10 meses
Puntos: 3
Respuesta: Problema con programa aleatorio de horarios

utiliza rm_rand() que es mas rápido, y si no funciona:
Cita:
@ignore_user_abort();
@set_magic_quotes_runtime(0);
@set_time_limit(0);
__________________
Francesc Jimenez
  #3 (permalink)  
Antiguo 05/08/2008, 07:06
 
Fecha de Ingreso: diciembre-2005
Ubicación: BCN
Mensajes: 165
Antigüedad: 18 años, 3 meses
Puntos: 2
Respuesta: Problema con programa aleatorio de horarios

perdona pero donde tengo que poner lo de:
@ignore_user_abort();
@set_magic_quotes_runtime(0);
@set_time_limit(0);

porcierto, el rm_rand no funciona.

saludos
  #4 (permalink)  
Antiguo 05/08/2008, 07:13
Avatar de desendoll  
Fecha de Ingreso: mayo-2008
Mensajes: 340
Antigüedad: 15 años, 10 meses
Puntos: 3
Respuesta: Problema con programa aleatorio de horarios

es mt_rand() los ignore y set al principio... no esta de mas que mires la pagina php.net
__________________
Francesc Jimenez
  #5 (permalink)  
Antiguo 05/08/2008, 07:47
 
Fecha de Ingreso: diciembre-2005
Ubicación: BCN
Mensajes: 165
Antigüedad: 18 años, 3 meses
Puntos: 2
Respuesta: Problema con programa aleatorio de horarios

ya lo probé, pero sigue sin funcionar nada....

lo mejor sera idear otro modo de asignacion automática.

Saludos
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 08:56.