Autor
|
Tema: Srand para que den dos numeros diferentes? (Leído 9,242 veces)
|
Anastacio
Desconectado
Mensajes: 111
|
En un programa que estoy haciendo, necesito que se generen dos numeros aleatorios (Lo estoy haciendo con srand,), y uso time, para que me generen semillas diferentes unas de otras. El problema es que se generan dos en el mismo milisegundo, y siempre son exactamente iguales, uno del otro, ej: 9 9, 4 4, asi, sucesivamente. Como podria hacer?
Nota: Ya busque en google, en la guia del Dev C ++, en los ejemplos de los programas por internet y por Dev C ++.
Gracias de antemano.
|
|
|
En línea
|
You, stop to close my post, you were novice too!!!!!!!!!!!!
|
|
|
armizh
Desconectado
Mensajes: 187
His brain caught in a hole...
|
Podrias probar a realizar un srand, luego hacer un sleep, usleep, o delay o lo que tengas a mano (si usas algun sistema POSIX tienes usleep(), en Windows tienes Sleep() ) para esperar un segundo y realizar otro srand, ya que si usas time como semilla estarias tomando la misma semilla habiendo mas posibilidades de que salga el mismo resultado. Tambien puedes probar con utilizar time como semilla, pero relizando alguna operacion con time, p.ej. time*2, time+2, la cosa es que no vaya la misma semilla en el mismo milisegundo.
Saludos.
|
|
|
En línea
|
Visita mi blog: http://armizh.10h.us/Fnx, fork de FreeNOS: git clone https://github.com/armizh/Fnx
Hamster, Entorno Integrado de Desarrollo C/C++: git clone https://github.com/armizh/Hamster
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
En un programa que estoy haciendo, necesito que se generen dos numeros aleatorios (Lo estoy haciendo con srand,), y uso time, para que me generen semillas diferentes unas de otras.
...
Nota: Ya busque en google, en la guia del Dev C ++, en los ejemplos de los programas por internet y por Dev C ++. Por lo visto no buscaste en estos foros ya que hay temas relacionados con la operación que mencionas, uno de ellos es Ayuda en codigo que genera aleatorio. Y casi puedo asegurar que tu error es colocar la llamada a srand justo antes de la llamada a rand: esa es la única explicación para obtener dos veces el mismo numero con llamadas consecutivas a función. Un saludo
|
|
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
Anastacio
Desconectado
Mensajes: 111
|
Acabo de mirar algo, y parece que en esos momentos, si tu pones rand para imprimir, como si fuese una variable, te da el valor del numero aleatorio calculado por el Srand. Entonces, tambien podria poner un wait(1), para que espere un segundo. El sleep y el wait han de ser parecidos, no?
|
|
|
En línea
|
You, stop to close my post, you were novice too!!!!!!!!!!!!
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
si tu pones rand para imprimir, como si fuese una variable, te da el valor del numero aleatorio calculado por el Srand. No. "srand" solo define la semilla, el siguiente valor de la serie es calculado y retornado por la función "rand". Va de nuevo el consejo: un buen libro y adiós a la mayoría de los problemas. Entonces, tambien podria poner un wait(1), para que espere un segundo. El sleep y el wait han de ser parecidos, no? No tienes porque utilizar pausas entre llamadas a "rand", si se requiere es por algún error en el programa y mientras no publiques su código fuente sera difícil (sino imposible) ayudarte. Un saludo
|
|
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.966
Israel nunca torturó niños, ni lo volverá a hacer.
|
Me sumo a rir3760:
CONSEGUITE UN LIBRO "Anastacio".
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
Anastacio
Desconectado
Mensajes: 111
|
Ya he conseguido uno, y he estado leyendo largo rato. Aunque las explicaciones son poco sastifactorias (aun estoy intentando entender el tema de getchar y putchar), tal vez me ayude.
Si, srand define la semilla, y yo uso el horario para crear la semilla (con time). Entonces, al darle un segundo de intervalo entre la generacion de una semilla y la otra, te da un numero diferente. Estuve tratando con sleep y wait, pero como no se como se usan bien, probe con un getchar para hacer una pausa, y funciona perfecto, genera numeros distintos unos de otros.
|
|
|
En línea
|
You, stop to close my post, you were novice too!!!!!!!!!!!!
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.966
Israel nunca torturó niños, ni lo volverá a hacer.
|
Ya he conseguido uno, y he estado leyendo largo rato. Aunque las explicaciones son poco sastifactorias (aun estoy intentando entender el tema de getchar y putchar), tal vez me ayude. ¿Te resulta muy dificil llamar a un par de funciones? Tal vez debas reconsiderar el asunto y dedicarte a otra cosa mas sencilla. Si, srand define la semilla, y yo uso el horario para crear la semilla (con time). Entonces, al darle un segundo de intervalo entre la generacion de una semilla y la otra, te da un numero diferente. Estuve tratando con sleep y wait, pero como no se como se usan bien, probe con un getchar para hacer una pausa, y funciona perfecto, genera numeros distintos unos de otros. ¿No leiste lo que te dijo rir3760? No hace falta ninguna pausa.
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
Anastacio
Desconectado
Mensajes: 111
|
#include <stdio.h> #include <conio.h> #include <windows.h> #include <time.h>
int main() { int num1; int num2; int c; int resultadojugador; int resultado; int repetidor; int vida; int nivel; int contador; num1 = 0; num2 = 0; repetidor = 0; resultadojugador = 0; contador = 0; nivel = 0; vida = 5; resultado = 0; c = 0; system("color F1"); printf("Este programa prueba su Habilidad con las matematicas.\n"); printf("Elija un nivel\n"); printf("1.Facil\n"); printf("2.Medio\n"); printf("3.Dificil\n"); scanf("%d",&c); do{ if(c == 1) { nivel = 10; } if(c == 2) { nivel = 50; } if(c == 3) { nivel = 100; } do{ srand( (unsigned)time( NULL ) ); num1 = rand() % nivel; getchar(); srand( (unsigned)time( NULL ) ); num2 = rand() % nivel; getchar(); printf("\nEl primer numero es\n%d",num1); printf("\nEl segundo entero es\n%d",num2); printf("\nSume los dos numeros y escriba el resultado\n"); scanf("%d",&resultadojugador); resultado = num1 + num2; if(resultadojugador == resultado) { printf("Has ganado\n"); contador = contador + 1; printf("Numero de vidas restantes\n%d\n",vida); getchar(); } if(resultadojugador != resultado) { printf("Has perdido\n"); contador = contador + 1; vida = vida - 1; printf("Numero de vidas restantes\n%d\n",vida); getchar(); } }while(vida > 0, contador < 10); printf("¿Quieres continuar?\nSi quieres, presiona 1. Si quieres salir, presiona 2.\n"); scanf("%d\n",&repetidor); }while(repetidor == 1);
return 0;
} Ahi esta el Code.
Llamarlas no me cuesta. Entenderlas para que me servirian, me cuesta.
Saludos!
|
|
|
En línea
|
You, stop to close my post, you were novice too!!!!!!!!!!!!
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
[Problema] Programa para averiguar números pares entre 2 números
Programación Visual Basic
|
Dreamaker
|
3
|
5,839
|
21 Mayo 2010, 23:45 pm
por Shell Root
|
|
|
¿Problema con srand()?
Programación C/C++
|
Marovingio
|
3
|
3,542
|
15 Septiembre 2010, 05:51 am
por Littlehorse
|
|
|
programas con srand y rand
Programación C/C++
|
lokita_sarah
|
1
|
2,281
|
1 Diciembre 2011, 04:28 am
por ralymontes
|
|
|
Como utilizar dos veces la funcionn srand(time(NULL))
Programación C/C++
|
BJM
|
3
|
7,279
|
19 Enero 2013, 11:58 am
por Puntoinfinito
|
|
|
Duda cstdlib y srand (C++)
Programación C/C++
|
K-YreX
|
1
|
1,656
|
25 Noviembre 2018, 08:11 am
por AlbertoBSD
|
|