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

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema con srand() y rand()
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Problema con srand() y rand()  (Leído 3,948 veces)
JonaLamper


Desconectado Desconectado

Mensajes: 394



Ver Perfil
Problema con srand() y rand()
« en: 14 Enero 2014, 23:45 pm »

Se acabó, no aguanto más. Llevo 35 minutos intentando solucionar esto y no veo dónde está el fallo. Lo único que quiero conseguir es generar números aleatorios mediante un procedimiento Void. Y no sé por qué, siempre me genera el mismo número, soy incapaz de ver el maldito error.

Código
  1. ]
  2. #include <iostream>
  3. #include <string>
  4. #include <fstream>
  5. #include <ctime>
  6. #include <cstdlib>
  7. using namespace std;
  8.  
  9. void generar(int codigo);
  10.  
  11. int main() {
  12.  
  13. int codigo;
  14. int num;
  15. srand(time(NULL));
  16. // num = rand() % 51;
  17.  
  18. generar(codigo);
  19.  
  20. codigo = num;
  21.  
  22. cout << "numero aleatorio: " << codigo;
  23.  
  24.   return 0;
  25. }
  26.  
  27. void generar(int codigo) {
  28. // int clave = 1;
  29. // int longitud = 4;
  30. int num;
  31.  
  32. num = rand() % 51;
  33.   // for (int i = 2; i < longitud; i++) {
  34.        // clave = clave * 10 + (rand() % 3 + 1);
  35.    // }
  36. }

Gracias y ojala me ayudéis porque me estoy volviendo loco (seguro que después es una tontería, para variar...)

Pd: ignorar los comentarios  :xD


« Última modificación: 15 Enero 2014, 00:41 am por JonaLamper » En línea

Utilizar palabras para hablar de palabras es como utilizar un lápiz para hacer un dibujo de ese lápiz sobre el mismo lápiz.
xiruko


Desconectado Desconectado

Mensajes: 438


Ver Perfil
Re: Problema con srand() y rand()
« Respuesta #1 en: 15 Enero 2014, 00:01 am »

Citar
Se acabó, no aguanto más. Llevo 35 minutos...

Si quieres seguir en esto me parece que tendrás que aprender a tener un poco más de paciencia... xD

Y bueno en cuanto al código, no sé de que te sorprendes si nunca cambias el valor de la variable 'codigo'. O imprimes dentro de la función la variable local 'num', o pasas la variable 'codigo' por referencia a la función para así poder modificar su valor. Esta última opción te quedaría así:

Código
  1. #include <iostream>
  2. #include <string>
  3. #include <ctime>
  4. #include <cstdlib>
  5. using namespace std;
  6.  
  7. void generar(int *c);
  8.  
  9. int main()
  10. {
  11.    int codigo;
  12.    srand(time(NULL));
  13.  
  14.    generar(&codigo);
  15.    cout << "numero aleatorio: " << codigo;
  16.  
  17.    return 0;
  18. }
  19.  
  20. void generar(int *c)
  21. {
  22.    *c = rand() % 51;
  23. }

Aunque hacer una función para eso pues como que tampoco haría falta... Pero bueno eso ya es cosa tuya.

Saludos.


En línea

JonaLamper


Desconectado Desconectado

Mensajes: 394



Ver Perfil
Re: Problema con srand() y rand()
« Respuesta #2 en: 15 Enero 2014, 00:34 am »

Muchas gracias. No veía el ponerle un parámetro por referencia al procedimiento  :-\

Ya... pero son las normas de la práctica xD

Oye, cómo haces para que al insertar un código, reconozca que se trata de C++ (por ejemplo)?
En línea

Utilizar palabras para hablar de palabras es como utilizar un lápiz para hacer un dibujo de ese lápiz sobre el mismo lápiz.
xiruko


Desconectado Desconectado

Mensajes: 438


Ver Perfil
Re: Problema con srand() y rand()
« Respuesta #3 en: 15 Enero 2014, 00:38 am »

De nada.

Respecto a lo del código en colores, cuando editas un mensaje tienes una pestaña con el nombre de GeSHi que despliega todas las etiquetas para varios lenguajes de programación. En el caso de C++ tendrías que pegar el código entre las etiquetas [ code=cpp] ... [ /code], sin espacios claro.

Saludos.
En línea

JonaLamper


Desconectado Desconectado

Mensajes: 394



Ver Perfil
Re: Problema con srand() y rand()
« Respuesta #4 en: 21 Enero 2014, 17:20 pm »

Pongo aquí mi duda para no abrir otro tema.

Es posible generar un número con srand (en mi caso, de longitud 4 e intervalo [0,5]) y asegurarse de en esos 4 dígitos, no hay ninguno repetido?

He pensando en guardar el valor anterior generado y compararlo con el nuevo... pero no sé si es una buena idea, porque dicho número generado va dentro de un array.
En línea

Utilizar palabras para hablar de palabras es como utilizar un lápiz para hacer un dibujo de ese lápiz sobre el mismo lápiz.
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Problema con srand() y rand()
« Respuesta #5 en: 21 Enero 2014, 17:46 pm »

Recuerda que Srand no genera número aleatorio. Pone la semilla para Rand.

Si te quieres asegurar, deberás hacerlo a mano, con una función, por ejemplo.

Citar
de longitud 4 e intervalo [0,5]

Longitud 4 e intervalo 0,5 el qué?
En línea

JonaLamper


Desconectado Desconectado

Mensajes: 394



Ver Perfil
Re: Problema con srand() y rand()
« Respuesta #6 en: 21 Enero 2014, 21:46 pm »

Recuerda que Srand no genera número aleatorio. Pone la semilla para Rand.

Si te quieres asegurar, deberás hacerlo a mano, con una función, por ejemplo.

Longitud 4 e intervalo 0,5 el qué?

El código generado (mediante una función que contiene un For, por ejemplo).
En línea

Utilizar palabras para hablar de palabras es como utilizar un lápiz para hacer un dibujo de ese lápiz sobre el mismo lápiz.
xiruko


Desconectado Desconectado

Mensajes: 438


Ver Perfil
Re: Problema con srand() y rand()
« Respuesta #7 en: 21 Enero 2014, 23:39 pm »

Longitud 4, números entre [0,5] y sin repetir? Te refieres a números tipo: 1234 5432 etc? Es que no queda muy claro tal y como lo dices pero diría que es eso.

Si es así, podrías hacer un array de enteros con todas las posibilidades tipo:

Código
  1. int combinaciones[]={1234, 2341, 3412, 2341, 1235, 2351, 3512, 5123, ...};
  2. int tam=sizeof(combinaciones)/sizeof(combinaciones[0]);

Y luego para generar un número u otro podrías hacer:

Código
  1. int generar(int *p, int tam)
  2. {
  3.    return p[rand()%tam];
  4. }

Claro que también podrías rellenar el array con un par de ciclos for para ahorrárte el escribirlos a mano. O también podrías declarar el array de enteros dentro de la función y así te ahorras esos parámetros... En fin, era solo una idea.

Saludos.
« Última modificación: 21 Enero 2014, 23:43 pm por xiruko » En línea

JonaLamper


Desconectado Desconectado

Mensajes: 394



Ver Perfil
Re: Problema con srand() y rand()
« Respuesta #8 en: 22 Enero 2014, 00:17 am »

Uh... no se me había ocurrido la idea de hacer un array con todas las posibilidades. Buena idea ^^
En línea

Utilizar palabras para hablar de palabras es como utilizar un lápiz para hacer un dibujo de ese lápiz sobre el mismo lápiz.
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re:
« Respuesta #9 en: 22 Enero 2014, 09:10 am »

Son 360 posibilidades. Mejor haz una funcion que lo verifique.

Enviado desde mi ST21i mediante Tapatalk
En línea

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

Ir a:  
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines