• Domingo 15 de Diciembre de 2024, 23:51

Autor Tema:  Numeros Aleatorios  (Leído 1732 veces)

Maestrofinal

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Numeros Aleatorios
« en: Sábado 17 de Abril de 2004, 20:02 »
0
Soy nuevo en esto y quisiera saber como poder generar numeros aleatorios. En que libreria esta dicha funcion? Como se hace una instruccion para que salga el numero?

Juanacas

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Numeros Aleatorios
« Respuesta #1 en: Sábado 17 de Abril de 2004, 20:13 »
0
Hola, amigo
En C++, las librerias que tienes que utilizar si no me equivoco son:

#include <stdlib.h>
#include <time.h>

y la forma de sacar un numero aleatorio seria por ejemplo esta:

randomize();
num=random(100)+1;

siendo randomize obligatorio en alguna de las zonas de tu programa.

Espero haberte ayudado. Saludos.

 :kicking:

Maestrofinal

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: Numeros Aleatorios
« Respuesta #2 en: Sábado 17 de Abril de 2004, 20:21 »
0
Pues no me sale. Segun tus indicaciones creo q esto deberia estar bien (aunke puede q me ekivoque q sera lo mas segur):

#include<time.h>
#include<conio.h>
#include<stdlib.h>
main()
{
randomize();
num=random(100)+1;
printf("%d",num);
getch();
}

Si alguien puede echarme una mano: decirme q fallos tiene o como lo hariais lo agradecere.

Nagisa

  • Miembro MUY activo
  • ***
  • Mensajes: 119
  • Nacionalidad: es
    • Ver Perfil
Re: Numeros Aleatorios
« Respuesta #3 en: Domingo 18 de Abril de 2004, 00:46 »
0
Aqui tienes una forma que funciona con el compilador gcc (las funciones de libreria varian segun el compilador):


# include <stdio.h>
# include <stdlib.h>
# include <time.h>
# define MAX 6

int main(void){
  int n;
  int i = 10;
  while(i--){
    srand ( (unsigned) time (NULL) );
    n = rand() % MAX + 1;
    printf("%d\n", n);
    getch();
  }
}

Por si no lo sabes, los numeros aleatorios no existen en los lenguajes de programacion. Lo que se usa en su lugar son numeros pseudoaleatorios. Esto son obtenidos con funciones especiales a las cuales le pasas un numero (recursivas : un caso inicial al que se le llama semilla y lo puedes elegir; y el resto se basa en el resultado del anterior) y te devuelven otro. Aunque parezca poco aleatorio, la secuencia de numeros que obtienes pasa pruebas de numeros aleatorios (no existe un patron especifico que se adapte a la secuencia).

srand lo que te hace es iniciarte la semilla del generador de numeros aleatorios. Le pasas como el resultado de time.

rand lo que hace es devolver el siguiente numero de la secuencia.

Supongo que el resto sabes lo que hace, no?
   

Maestrofinal

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: Numeros Aleatorios
« Respuesta #4 en: Domingo 18 de Abril de 2004, 01:25 »
0
muchas gracias ya consegui q funcionara  :D  :D  Al final este fue el resultado (simple pero asi voy aprendiendo):

# include <stdio.h>
# include <stdlib.h>
# include <time.h>
# include <conio.h>

int main(void){      
int n,a;
int i = 60;
while(i--){
srand ( (unsigned) time (NULL) );
n = rand() %100 + 1;
}
printf("Introduce un numero entre 1 y 100:\n");
scanf ("%d",&a);
if (a==n) printf("ACERTASTE\n");
if (a<n) printf("Mayor\n");
if (a>n) printf("Menor\n");
while (a!=n){
scanf ("%d",&a);
if (a==n) printf("\nACERTASTE!!!!!!!!!\n");
if (a<n) printf("Mayor\n");
if (a>n) printf("Menor\n");
}
getch();
}

Nagisa

  • Miembro MUY activo
  • ***
  • Mensajes: 119
  • Nacionalidad: es
    • Ver Perfil
Re: Numeros Aleatorios
« Respuesta #5 en: Domingo 18 de Abril de 2004, 13:29 »
0
Bueno... realmente para generar el numero aleatorio no es necesario que hagas esto:

int i = 60;
while(i--){
srand ( (unsigned) time (NULL) );
n = rand() %100 + 1;
}



Con que hagas

srand ( (unsigned) time (NULL) );
n = rand() %100 + 1;

te vale; yo lo que postee era un programita que muestra 'i' numeros aleatorios (para que no quedara tan soso).

Es mas, srand() puedes hacerlo una unica vez, asi que yo podria haberlo sacado del bucle.
   

Maestrofinal

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: Numeros Aleatorios
« Respuesta #6 en: Domingo 18 de Abril de 2004, 19:24 »
0
Muchas gracias xq eso me parecia un poco raro y me desorientaba porque a mi con 1 solo me bastaba. :lol:

Maestrofinal

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: Numeros Aleatorios
« Respuesta #7 en: Lunes 19 de Abril de 2004, 20:00 »
0
Sigo progresando e intentando meter nuevas funciones para no pegarme matadas a programar (bendito GOTO :lol: ).
Ahora tengo otro problemilla con mi programa:

# include <stdio.h>
# include <stdlib.h>
# include <time.h>
# include <conio.h>

int main(void){      
inicio:int x,a;
char b;
srand ((unsigned)time(NULL));
x = rand() %100 + 1;              

printf("Introduce un numero entre 1 y 100:\n");
juego:scanf("%d",&a);
if (a==x) printf("ACERTASTE!!!!!!\n\n");
if (a<x) printf("Mayor\n");
if (a>x) printf("Menor\n");
if (a<1) printf("Burro, te dije a partir de 1\n");
if (a>100) printf("Burro, te dije hasta 100\n");

while (a!=x){
goto juego;
}
printf("Volver a jugar(s/n):");
scanf("%d",B);

switch(b=getchar()) {
case 's': goto inicio; break;
case 'n': printf("\nQue te sea leve, adios XD"); break;
    }
getch();
}


Pues bien, esto es lo que me pasa: cuando me pregunta lo de introducir numero y meto una letra empieza a dar 1 de los mensajes de mayor, menor, burro... hasta el infinito. Quisiera saber como hacer que no pase.

Gracias por adelantado.

Nagisa

  • Miembro MUY activo
  • ***
  • Mensajes: 119
  • Nacionalidad: es
    • Ver Perfil
Re: Numeros Aleatorios
« Respuesta #8 en: Martes 20 de Abril de 2004, 00:35 »
0
Bien... no estoy seguro, y que me corrija alguien si me equivoco pero creo que el fallo es el  siguiente:

Tu le pides a scanf que te tome algo y lo trate como numero. Si le pasas una letra, scanf la coje y no la coje, es decir , acepta la entrada y la trata como numero, y vuelve a por un numero, pero la letra sigue alli (no ha avanzado en el buffer de entrada por que no tomo un numero), asi que la coje y vuelta a empezar. De ahi que te muestre infinitos mensajes.

La naturaleza del mensaje quizas sea debida a que en cada vuelta redeclaras las variables, y recuerda que C no las inicializa por defecto, asi que valen cualquier cosa (y posiblemente en entero sea mayor que 100). Para comprobar lo que te digo, haz un printf("%d\n", a); despues de cada comprobacion, y asi ves lo que has metido al pulsar la letra (yo lo he hecho y 'w' -> 4008536).

La solucion a este problema es algo complicada : leer los numeros como caracteres. No es complicada en si, aunque si que añade bastante codigo para algo que seria tan facil si el usuario no fuera tan torpe ^__^

Una cosa mas:

donde pone
printf("Volver a jugar(s/n):");
scanf("%d",B);

supongo que es un :

printf("Volver a jugar(s/n):");
scanf("%d",b );

y deberia ser un
printf("Volver a jugar(s/n):");
scanf("%c",&b );        <------- b lo has declarado como char!!

aunque de todos modos no entiendo por que lo haces, si en el switch haces un  b = getchar()


Espero haberte ayudado  :hola: