Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Probrema con bucle infinito

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Probrema con bucle infinito Responder citando

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.. Crying or Very sad

Gracias
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Gracias,

perfecto... me has sacado un peso inmenso de encima... Wink
Un Saludo
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.