elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  numeros al azar
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: numeros al azar  (Leído 8,898 veces)
mapers


Desconectado Desconectado

Mensajes: 638


Ver Perfil
numeros al azar
« en: 7 Agosto 2010, 00:43 am »

holas gente del foro quisiera que me ayuden con este problema que tengo esque la funcion  rand casi siempre me bota los mismos numero   quisiera que me dijeran como poder hacer que me bote numeros distinos...o existe otro metodo para sacar numeros al azar
ademas porque siempre me salen que (tiempo 2  -tiempo 1) siempre me salen  0 en todos los casos
Código
  1.  
  2.  
  3. #include <cstdlib>
  4. #include <iostream>
  5. #include <stdio.h>
  6. #include<stdlib.h>
  7. #include <time.h>
  8.  
  9. using namespace std;
  10.  
  11. int vector[1000000];
  12.  
  13. bool isEven(int n)
  14. {
  15.    int math = n%2;
  16.    if(math==0)
  17.    return true;
  18.    else
  19.    return false;
  20. }
  21. unsigned int ciclo(unsigned int curValue, unsigned int count)
  22. {
  23.    if(curValue == 1) return count;
  24.  
  25.    if(isEven(curValue))
  26.  
  27.    return ciclo(curValue/2, count+1);
  28.  
  29.    else
  30.  
  31.    return ciclo((curValue*3)+1, count+1);
  32. }
  33.  
  34.  
  35. unsigned int maxCiclo(unsigned long comienzo, unsigned long fin)
  36. {
  37.    unsigned int curMax = 0;
  38.  
  39.    if(comienzo> fin)
  40.  
  41.    swap(comienzo, fin);//swap intercambia los valores si start> stop
  42.  
  43.    for(unsigned int i=comienzo; i<=fin;i++)
  44.    {
  45.        unsigned int tempciclo;
  46.  
  47.        if(vector[i] == 0)
  48.        {
  49.            tempciclo = ciclo(i, 1);
  50.  
  51.           vector[i] = tempciclo;
  52.        }
  53.        else tempciclo = vector[i];
  54.  
  55.        if(tempciclo>curMax)
  56.  
  57.        curMax = tempciclo;
  58.    }
  59.  
  60.    return curMax;
  61. }
  62.  
  63.  
  64. int getMilisegundos(clock_t c)
  65. {
  66. int tiempo=0;
  67. tiempo = (int)((c/(double)CLOCKS_PER_SEC)*1000) ;
  68. return tiempo;
  69. }
  70.  
  71.  
  72.  
  73.  
  74. int main(int argc, char *argv[])
  75.  
  76.    {
  77.  
  78.        clock_t t1, t2;
  79.        srand(time(NULL));
  80.    unsigned int comienzo;
  81.    unsigned int fin;
  82.  
  83.    for(int i=0;i<1000;i++)
  84.    {
  85.  
  86.        t1 = clock();
  87.    comienzo=i+1;
  88.    fin=(rand() % 10000);      
  89.        maxCiclo(comienzo, fin);
  90.         t2 = clock();
  91.        printf("%d   %d   %f \n",comienzo,fin,getMilisegundos(t2-t1));
  92.        t1=t2=0;
  93.  
  94. }
  95.  
  96.  
  97.  
  98.    system("PAUSE");
  99. }
  100.  


« Última modificación: 7 Agosto 2010, 12:26 pm por mapers » En línea

Anco

Desconectado Desconectado

Mensajes: 28



Ver Perfil
Re: numeros al azar
« Respuesta #1 en: 7 Agosto 2010, 01:46 am »

Compara los numeros que te arroja la funcion rand, y si uno es igual al anterior has que se repita la funcion.


En línea

???
mapers


Desconectado Desconectado

Mensajes: 638


Ver Perfil
Re: numeros al azar
« Respuesta #2 en: 7 Agosto 2010, 03:25 am »

como asi me podrian ayudar a corregir esto ayudenme con la parte de medir el tiempo en milisegundos .........
En línea

[L]ord [R]NA


Desconectado Desconectado

Mensajes: 1.513

El Dictador y Verdugo de H-Sec


Ver Perfil WWW
Re: numeros al azar
« Respuesta #3 en: 7 Agosto 2010, 07:35 am »

Explica bien que es lo que quieres hacer porque a mi no me repite secuencia de numeros y no lo he modificado
En línea

mapers


Desconectado Desconectado

Mensajes: 638


Ver Perfil
Re: numeros al azar
« Respuesta #4 en: 7 Agosto 2010, 12:27 pm »

mi duda es porque siempre  sale tiempo 0 en todos los casos que se dan .......
me podrian ayudar a corregir esa parte ....eso numas gracias
En línea

Akai


Desconectado Desconectado

Mensajes: 823



Ver Perfil
Re: numeros al azar
« Respuesta #5 en: 7 Agosto 2010, 13:15 pm »

prueba a hacer lo siguiente:

Código
  1.        t1 = clock();
  2.    comienzo=i+1;
  3. for(j=0;j<10;j++){    
  4. fin=(rand() % 10000);      
  5.        maxCiclo(comienzo, fin);
  6. }
  7.         t2 = clock();
  8.        printf("%d   %d   %f \n",comienzo,fin,getMilisegundos(t2-t1/10));
  9.        t1=t2=0;

de esta forma debería funcionarte. Realizas 10 veces la búsqueda y luego obtienes el tiempo. Debido a la velocidad de los procesadores actuales, el realizar el cálculo con una sola iteración, en este caso te da tiempos infinitesimales.
En línea

mapers


Desconectado Desconectado

Mensajes: 638


Ver Perfil
Re: numeros al azar
« Respuesta #6 en: 7 Agosto 2010, 14:00 pm »

nada igual no sale nada a ver pueder correjirll completo porfa°°°
En línea

Akai


Desconectado Desconectado

Mensajes: 823



Ver Perfil
Re: numeros al azar
« Respuesta #7 en: 8 Agosto 2010, 23:26 pm »

Tu problema está en la conversión de tiempos que realizas. La función getMilisegundos no produce el resultado que tu deseas, por tanto, para obtener el resultado que tu buscas al medir el tiempo entre t1 y t2 y que se exprese en milisegundos una opción sería la siguiente:

Código
  1. 1000*(t2-t1)/CLOCKS_PER_SEC)
« Última modificación: 9 Agosto 2010, 15:30 pm por Akai » En línea

mapers


Desconectado Desconectado

Mensajes: 638


Ver Perfil
Re: numeros al azar
« Respuesta #8 en: 10 Agosto 2010, 02:48 am »

mira lo hize asi y me sigue saliendo numeros constantes y asi no deve ser inclusive hasta puros ceros.... chekalo
Código
  1.  
  2. #include <cstdlib>
  3. #include <iostream>
  4. #include <stdio.h>
  5. #include<stdlib.h>
  6. #include <time.h>
  7. #include "windows.h"
  8.  
  9. using namespace std;
  10.  
  11. int vector[1000000];
  12.  
  13. bool isEven(int n)
  14. {
  15.    int math = n%2;
  16.    if(math==0)
  17.    return true;
  18.    else
  19.    return false;
  20. }
  21. unsigned int ciclo(unsigned int curValue, unsigned int count)
  22. {
  23.    if(curValue == 1) return count;
  24.  
  25.    if(isEven(curValue))
  26.  
  27.    return ciclo(curValue/2, count+1);
  28.  
  29.    else
  30.  
  31.    return ciclo((curValue*3)+1, count+1);
  32. }
  33.  
  34.  
  35. unsigned int maxCiclo(unsigned long comienzo, unsigned long fin)
  36. {
  37.    unsigned int curMax = 0;
  38.  
  39.    if(comienzo> fin)
  40.  
  41.    swap(comienzo, fin);//swap intercambia los valores si start> stop
  42.  
  43.    for(unsigned int i=comienzo; i<=fin;i++)
  44.    {
  45.        unsigned int tempciclo;
  46.  
  47.        if(vector[i] == 0)
  48.        {
  49.            tempciclo = ciclo(i, 1);
  50.  
  51.           vector[i] = tempciclo;
  52.        }
  53.        else tempciclo = vector[i];
  54.  
  55.        if(tempciclo>curMax)
  56.  
  57.        curMax = tempciclo;
  58.    }
  59.  
  60.    return curMax;
  61. }
  62.  
  63.  
  64.  
  65.  
  66. double getMilisegundos(clock_t c)
  67. {
  68.    int tiempo=0;
  69.    tiempo = (int)((c/(double)CLOCKS_PER_SEC)*1000) ;
  70.    if(tiempo == 0){
  71.        printf("Warning!: el procesamiento tomó menos de 1 milisegundo, retornando cantidad de clicks");
  72.        return c;
  73.    }
  74.    return tiempo;
  75. }
  76.  
  77.  
  78.  
  79. int main(int argc, char *argv[])
  80.  
  81.    {
  82.      // freopen ("mapers.txt","w",stdout);
  83.  
  84.  
  85.        clock_t t1, t2;
  86.        srand(time(NULL));
  87.    unsigned int comienzo;
  88.    unsigned int fin;
  89.    int i=0;
  90.  
  91. for(i=0;i<1000;i++)
  92. {
  93.  
  94.        t1 = clock();
  95.  
  96.      comienzo=rand()%59663;
  97.  
  98.       fin=rand()%66666;
  99.          maxCiclo(comienzo, fin);
  100.          Sleep(20);
  101.  
  102.          t2 = clock();
  103.          printf("%d\n",t1);
  104.          printf("%d\n",t2);
  105.        printf("%d   %d   %.16g milisegundos\n",comienzo,fin,getMilisegundos( t2-t1) );
  106.  
  107.    }
  108.    system("pause");
  109. //return 0;
  110.  
  111. }
  112.  
  113.  
  114.  
  115.  
  116.  

Lh: No hagas doble post, la próxima borro.

mmm y me sigue saliendo puros ceros !!!
« Última modificación: 10 Agosto 2010, 20:57 pm por Littlehorse » En línea

luinuz

Desconectado Desconectado

Mensajes: 239


Ver Perfil WWW
Re: numeros al azar
« Respuesta #9 en: 10 Agosto 2010, 19:31 pm »

Código:
/**
 * Funcion que devuelve un numero aleatorio entre min y max
 */
int int_aleatorio(int min, int max) {
return ((max-min+1)/(RAND_MAX+1.0))*rand()+min;
}

Luego en el main o en la funciona que llame a int_aleatorio debes llamar a

Código:
srand(time(NULL));

Y listo.
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
¿Numero al azar?
Programación C/C++
Bledniss 3 4,325 Último mensaje 13 Abril 2011, 22:10 pm
por Oblivi0n
comando para crear azar?
Scripting
as if 6 5,570 Último mensaje 13 Septiembre 2011, 01:09 am
por leogtz
¿Generar numeros al 100% al azar?
Programación C/C++
meaf75 2 2,852 Último mensaje 13 Agosto 2016, 23:06 pm
por MessageBoxA
error en el orden de 4 números al azar de mayor a menor
Programación Visual Basic
creiko 0 2,970 Último mensaje 18 Septiembre 2016, 05:40 am
por creiko
Necesito ayuda con un generador de numeros al azar
Programación C/C++
JuanTheTropper 2 1,699 Último mensaje 5 Diciembre 2018, 05:11 am
por CalgaryCorpus
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines