Autor
|
Tema: numeros al azar (Leído 8,759 veces)
|
mapers
Desconectado
Mensajes: 638
|
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 #include <cstdlib> #include <iostream> #include <stdio.h> #include<stdlib.h> #include <time.h> using namespace std; int vector[1000000]; bool isEven(int n) { int math = n%2; if(math==0) return true; else return false; } unsigned int ciclo(unsigned int curValue, unsigned int count) { if(curValue == 1) return count; if(isEven(curValue)) return ciclo(curValue/2, count+1); else return ciclo((curValue*3)+1, count+1); } unsigned int maxCiclo(unsigned long comienzo, unsigned long fin) { unsigned int curMax = 0; if(comienzo> fin) swap(comienzo, fin);//swap intercambia los valores si start> stop for(unsigned int i=comienzo; i<=fin;i++) { unsigned int tempciclo; if(vector[i] == 0) { tempciclo = ciclo(i, 1); vector[i] = tempciclo; } else tempciclo = vector[i]; if(tempciclo>curMax) curMax = tempciclo; } return curMax; } int getMilisegundos(clock_t c) { int tiempo=0; tiempo = (int)((c/(double)CLOCKS_PER_SEC)*1000) ; return tiempo; } int main(int argc, char *argv[]) { clock_t t1, t2; srand(time(NULL)); unsigned int comienzo; unsigned int fin; for(int i=0;i<1000;i++) { t1 = clock(); comienzo=i+1; fin=(rand() % 10000); maxCiclo(comienzo, fin); t2 = clock(); printf("%d %d %f \n",comienzo,fin,getMilisegundos(t2-t1)); t1=t2=0; } system("PAUSE"); }
|
|
« Última modificación: 7 Agosto 2010, 12:26 pm por mapers »
|
En línea
|
|
|
|
Anco
Desconectado
Mensajes: 28
|
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
Mensajes: 638
|
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
Mensajes: 1.513
El Dictador y Verdugo de H-Sec
|
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
Mensajes: 638
|
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
Mensajes: 823
|
prueba a hacer lo siguiente: comienzo=i+1; for(j=0;j<10;j++){ maxCiclo(comienzo, fin); } printf("%d %d %f \n",comienzo ,fin ,getMilisegundos (t2 -t1 /10)); 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
Mensajes: 638
|
nada igual no sale nada a ver pueder correjirll completo porfa°°°
|
|
|
En línea
|
|
|
|
Akai
Desconectado
Mensajes: 823
|
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: 1000*(t2-t1)/CLOCKS_PER_SEC)
|
|
« Última modificación: 9 Agosto 2010, 15:30 pm por Akai »
|
En línea
|
|
|
|
mapers
Desconectado
Mensajes: 638
|
mira lo hize asi y me sigue saliendo numeros constantes y asi no deve ser inclusive hasta puros ceros.... chekalo #include <cstdlib> #include <iostream> #include <stdio.h> #include<stdlib.h> #include <time.h> #include "windows.h" using namespace std; int vector[1000000]; bool isEven(int n) { int math = n%2; if(math==0) return true; else return false; } unsigned int ciclo(unsigned int curValue, unsigned int count) { if(curValue == 1) return count; if(isEven(curValue)) return ciclo(curValue/2, count+1); else return ciclo((curValue*3)+1, count+1); } unsigned int maxCiclo(unsigned long comienzo, unsigned long fin) { unsigned int curMax = 0; if(comienzo> fin) swap(comienzo, fin);//swap intercambia los valores si start> stop for(unsigned int i=comienzo; i<=fin;i++) { unsigned int tempciclo; if(vector[i] == 0) { tempciclo = ciclo(i, 1); vector[i] = tempciclo; } else tempciclo = vector[i]; if(tempciclo>curMax) curMax = tempciclo; } return curMax; } double getMilisegundos(clock_t c) { int tiempo=0; tiempo = (int)((c/(double)CLOCKS_PER_SEC)*1000) ; if(tiempo == 0){ printf("Warning!: el procesamiento tomó menos de 1 milisegundo, retornando cantidad de clicks"); return c; } return tiempo; } int main(int argc, char *argv[]) { // freopen ("mapers.txt","w",stdout); clock_t t1, t2; srand(time(NULL)); unsigned int comienzo; unsigned int fin; int i=0; for(i=0;i<1000;i++) { t1 = clock(); comienzo=rand()%59663; fin=rand()%66666; maxCiclo(comienzo, fin); Sleep(20); t2 = clock(); printf("%d\n",t1); printf("%d\n",t2); printf("%d %d %.16g milisegundos\n",comienzo,fin,getMilisegundos( t2-t1) ); } system("pause"); //return 0; }
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
|
/** * 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 Y listo.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
¿Numero al azar?
Programación C/C++
|
Bledniss
|
3
|
4,285
|
13 Abril 2011, 22:10 pm
por Oblivi0n
|
|
|
comando para crear azar?
Scripting
|
as if
|
6
|
5,517
|
13 Septiembre 2011, 01:09 am
por leogtz
|
|
|
¿Generar numeros al 100% al azar?
Programación C/C++
|
meaf75
|
2
|
2,643
|
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,761
|
18 Septiembre 2016, 05:40 am
por creiko
|
|
|
Necesito ayuda con un generador de numeros al azar
Programación C/C++
|
JuanTheTropper
|
2
|
1,658
|
5 Diciembre 2018, 05:11 am
por CalgaryCorpus
|
|