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

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Srand para que den dos numeros diferentes?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Srand para que den dos numeros diferentes?  (Leído 8,652 veces)
Anastacio

Desconectado Desconectado

Mensajes: 111



Ver Perfil
Srand para que den dos numeros diferentes?
« en: 16 Febrero 2012, 20:35 pm »

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 Desconectado

Mensajes: 187

His brain caught in a hole...


Ver Perfil WWW
Re: Srand para que den dos numeros diferentes?
« Respuesta #1 en: 16 Febrero 2012, 20:49 pm »

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:
Código
  1. git clone https://github.com/armizh/Fnx
Hamster, Entorno Integrado de Desarrollo C/C++:
Código
  1. git clone https://github.com/armizh/Hamster
Akai


Desconectado Desconectado

Mensajes: 823



Ver Perfil
Re: Srand para que den dos numeros diferentes?
« Respuesta #2 en: 16 Febrero 2012, 22:12 pm »

mira la referencia de srand:

http://cplusplus.com/reference/clibrary/cstdlib/srand/

El procedimiento es:

1)Usa el tiempo actual como semilla
2) saca el número
3) cambia la semilla, vuelva al paso 2.
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Srand para que den dos numeros diferentes?
« Respuesta #3 en: 17 Febrero 2012, 01:22 am »

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 Desconectado

Mensajes: 111



Ver Perfil
Re: Srand para que den dos numeros diferentes?
« Respuesta #4 en: 17 Febrero 2012, 13:43 pm »

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 Desconectado

Mensajes: 1.639


Ver Perfil
Re: Srand para que den dos numeros diferentes?
« Respuesta #5 en: 17 Febrero 2012, 17:09 pm »

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 Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Srand para que den dos numeros diferentes?
« Respuesta #6 en: 17 Febrero 2012, 17:42 pm »

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 Desconectado

Mensajes: 111



Ver Perfil
Re: Srand para que den dos numeros diferentes?
« Respuesta #7 en: 19 Febrero 2012, 17:10 pm »

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 Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Srand para que den dos numeros diferentes?
« Respuesta #8 en: 19 Febrero 2012, 17:24 pm »

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 Desconectado

Mensajes: 111



Ver Perfil
Re: Srand para que den dos numeros diferentes?
« Respuesta #9 en: 19 Febrero 2012, 19:41 pm »

#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!!!!!!!!!!!!
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

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,658 Último mensaje 21 Mayo 2010, 23:45 pm
por Shell Root
¿Problema con srand()?
Programación C/C++
Marovingio 3 3,304 Último mensaje 15 Septiembre 2010, 05:51 am
por Littlehorse
programas con srand y rand
Programación C/C++
lokita_sarah 1 2,133 Último mensaje 1 Diciembre 2011, 04:28 am
por ralymontes
Como utilizar dos veces la funcionn srand(time(NULL))
Programación C/C++
BJM 3 7,051 Último mensaje 19 Enero 2013, 11:58 am
por Puntoinfinito
Duda cstdlib y srand (C++)
Programación C/C++
K-YreX 1 1,441 Último mensaje 25 Noviembre 2018, 08:11 am
por AlbertoBSD
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines