| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
neg1414 Master

Registrado: 31 Ene 2007Mensajes: 284
|
Publicado: Jue 04 Ene, 2018 5:36 pm Asunto: Probrema con bucle infinito |
|
|
Buenas..
Estoy trabajando con un algoritmo que maneja un monton de datos, el caso es que a veces funciona y otras veces NO en funcion de la cantidad de datos a tratar...
Acotando el problema (lo que me llevo varias horas) logre localizarlo... y descubrir que el programa se quedaba colgado en un bucle While del que no podia salir; lo curioso era que el bucle while estaba dentro de un bucle for y variando en este en solo un entero el valor de su condicion fin, el programa se colgaba o no..
Muestro el algoritmo simplificado al maximo ..
| Código: |
bool Vector[531441];
int Longitud = 32472; // FINALIZA
// int Longitud = 32473; //BUCLE WHILE INFINITO??
for(int i=0;i<Longitud;i++)
{
int n;
do
{
n = int(double(rand()/(double)RAND_MAX) * (double)(531441-1)); //Rango 0 - 531441
}while(Vector[n]);
Vector[n]= true;
}
|
Creo que el problema es que a la hora de generar el numero aleatorio, llega un momento en que se repiten los mismos numeros (indices del Vector) y Obiamente como vector ya les ha asignado true, no encuentra ningun indice que sea negativo y se vuelve un bucle infinito
Estoy o no en lo cierto ¿ tiene solucion? necesito que funcione si no tirare dias de trabajo a la papelera..
Gracias |
|
| Volver arriba |
|
 |
escafandra Master

Registrado: 29 Nov 2007Mensajes: 625Ubicación: Madrid - España
|
Publicado: Jue 04 Ene, 2018 6:08 pm Asunto: |
|
|
El problema es que RAND_MAX = 32767 y necesitas 531441 valores. Tratas de solventarlo cambiando la escala usando double pero lo conviertes a int con lo que tal cambio te provoca repeticiones.
¿Puedes usar random?
| Código: |
bool Vector[531441];
int Longitud = 32473;
for(int i=0;i<Longitud; i++){
int n;
do{
n = random(531441); //Rango 0 - 531440
}while(Vector[n]);
Vector[n]= true;
}
|
No olvides usar randomize al iniciar la aplicación-
De todas formas no recorres todos los vectores...
Saludos. |
|
| Volver arriba |
|
 |
neg1414 Master

Registrado: 31 Ene 2007Mensajes: 284
|
Publicado: Jue 04 Ene, 2018 8:56 pm Asunto: |
|
|
Gracias,
perfecto... me has sacado un peso inmenso de encima...
Un Saludo |
|
| Volver arriba |
|
 |
|