• Martes 14 de Mayo de 2024, 02:28

Autor Tema:  Generar Un Nuimero (float) Aleatorio  (Leído 12708 veces)

Srgndl

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Generar Un Nuimero (float) Aleatorio
« en: Miércoles 19 de Marzo de 2008, 17:09 »
0
Alguien me podria explicar como puedo generar un float de forma aleatoria??

he probado con rand() pero me devuelve 0.00000.

ya he conseguido generar numeros aleatorios pero todos son muy similares.

el codigo donde utilizo el rand() es este:

el programa genera una matriz de 50*50 a partir de la suma de los valores de 2500 matrices de 50*50.

int main(void)
{
   float a[50][50],z;
   float m[50][50];
   int i,j;

   for(i=0;i<50;i++){
      for(j=0;j<50;j++){
         int k,l;
         for(k=0;k<50;k++){
            for(l=0;l<50;l++){
               srand(time(NULL));
               m[k][l]=1+rand();

            }
         }
         int suma=0;
         for(k=0;k<50;k++){
            for(l=0;l<50;l++){
               suma=suma+m[k][l];
            }
         }   
         a[j]=suma; //guardem el resultat de sumar la matriu
      }
   }
   printf("\nResultat.\n");
   for(i=0;i<50;i++){
      for(j=0;j<50;j++){
         printf("%f",a[j]);
         printf(" ");
      }
      printf("\n");
   }

return (0);
}


me genera numeros aleatorios pero todos son del tipo -XXXXXXXXX.00000000.
y se repiten mucho.

alguien me puede ayudar a solucionarlo???

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: Generar Un Nuimero (float) Aleatorio
« Respuesta #1 en: Miércoles 19 de Marzo de 2008, 20:03 »
0
La funcion srand(time(NULL)) la estas llamando dentro del ciclo, esta funcion solo la debes llamar una vez, y al principio del programa, para que te genere numeros diferentes.

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

Srgndl

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: Generar Un Nuimero (float) Aleatorio
« Respuesta #2 en: Jueves 20 de Marzo de 2008, 09:13 »
0
Gracias!!
Ya lo he cambiado pero  aun me salen numeros repetidos.
el srand lo he puesto despues del main!!

int main(void)
{
      srand(time(NULL));
.....


return (0);
}

carmamezo

  • Miembro MUY activo
  • ***
  • Mensajes: 232
    • Ver Perfil
Re: Generar Un Nuimero (float) Aleatorio
« Respuesta #3 en: Jueves 20 de Marzo de 2008, 11:17 »
0
Hola,

acabo de hacer una prueba y a mi me salen números distintos.... Aún así, si lo que quieres son número más distintos puedes hacer lo siguiente...
Código: Text
  1.  
  2. #include &#60;math.h&#62;
  3. #include &#60;time.h&#62;
  4. ...
  5. float valor;
  6. ...
  7. srand((unsigned)time(NULL));
  8. ...
  9. for(...)
  10. ...
  11. valor=(sin((float)rand())+1.0)*50.0;
  12. //esto genera números aleatorios entre 0 y 100.
  13. ...
  14.  
  15.  
No olvides que la función rand() devuelve enteros, de esta forma consigues número reales con decimales y algo bastante útil, como es poder regular el itervalo de los números aleatorios gracias a que la función sin() siempre devuelve un número real entre -1 y 1 (de todas formas la función rand() siempre devuelve números entre 0 y RAND_MAX, 0x7fff)...
Quizás tambien te ayude hacer una espera activa dentro de los bucles mediante un Sleep() sin cambiar nada.

Espero que te sirva.

Un saludo,
 :lightsabre:
No hay tonto más molesto que el ingenioso.

Srgndl

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: Generar Un Nuimero (float) Aleatorio
« Respuesta #4 en: Jueves 20 de Marzo de 2008, 12:10 »
0
Gracias!!

Me gusta la idea.

La he probada pero al compilar me dice undefined reference to 'sin'!!

Sabes a que se debe??

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: Generar Un Nuimero (float) Aleatorio
« Respuesta #5 en: Jueves 20 de Marzo de 2008, 18:44 »
0
Citar
La he probada pero al compilar me dice undefined reference to 'sin'!!

no te falta esto al principio de tu programa?

Código: Text
  1.  
  2. #include &#60;math.h&#62;
  3.  
  4.  

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

Srgndl

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: Generar Un Nuimero (float) Aleatorio
« Respuesta #6 en: Jueves 20 de Marzo de 2008, 19:38 »
0
no, ya he puesto el include de math.h!!

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: Generar Un Nuimero (float) Aleatorio
« Respuesta #7 en: Jueves 20 de Marzo de 2008, 20:52 »
0
Muy raro, porque ese error significa que no estas incuyendo la libreria, ignoro a que se deba entonces.

Hay otra forma de generar numeros aleatorios, en un rango especificado:

Código: Text
  1.  
  2. // Genera numeros aleatorios entre 1 y 100
  3. m[k][l]= rand() % 100 + 1;
  4.  
  5. // Genera numeros aleatorios entre 20 y 80
  6. m[k][l]= rand() % 80 + 20;
  7.  
  8.  

Aun asi, he analizado tu progama y creo que tu problema esta en la logica, y tambien en que la funcion rand() no genera aleatorios verdaderos, sino pseudoaleatorios, esto quiere decir que a la larga (o sea, en varias iteraciones, como en tu caso, que al ser de 50x50, iteras 2500 veces), estos numeros se repiten. Y ademas veo que tu calculas 2500 numeros, y luego sumas todos, y guardas esa suma de 2500 numeros en otra matriz, y lo repites otras 2500 veces, asi que me parece logico que como los aleatorios a la larga se repiten, y luego los sumas, obtienes sumas parecidas, y para empeorar las cosas, la funcion rand() solo genera numeros entre 0 y 32768, asi que pues aunque quieras obtener mas variedad de numeros, no la hay.

Si es demasiado importante para ti que genere aleatorios mas "aleatorios" valga la redundancia, entonces tienes que buscar otras librerias en C/C++, o hasta en ensamblador, que generen mejores aleatorios, en lugar de la libreria que viene por defecto en el compilador. O tambien existen listas de numeros aleatorios, podrias ponerlas en un archivo de texto, y alimentar tu porgrama con ellas.

Bueno, son solo ideas.

Saludos :)

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

Srgndl

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: Generar Un Nuimero (float) Aleatorio
« Respuesta #8 en: Jueves 20 de Marzo de 2008, 21:14 »
0
Gracias!!
La question era generar los numeros de forma aleatoria, no es la parte importante!!
lo dejare asi.

La parte importante es que ahora tengo que adecuar este codigo a PVM(paralel virtual machine), vamos que lo tengo que ejecutar en varios PC !!!

Gracias a todos.

PD: si alguien sabe de PVM y me kiere hechar una mano, k no se corte
o si alguien sabe pk me da ese error que me lo explike.