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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  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,954 veces)
amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re:
« Respuesta #10 en: 22 Enero 2014, 11:46 am »

Son 360 posibilidades. Mejor haz una funcion que lo verifique.
Con 4 cifras son 24 posibilidades (4 x 3 x 2 x 1).

En cuanto al tema en cuestión te dejo otra propuesta más generica:

Código
  1. // Prototipos...
  2.  
  3. bool comprobarCoincidencias(int a,int array[],unsigned int tam);
  4. void generarNumeros(int Vector[],unsigned int tam, int max = RAND_MAX,int min = 0);
  5.  
  6. // Otro codigo...
  7.  
  8. // Declaracion de las funciones
  9.  
  10. void generarNumeros(int Vector[],unsigned int tam, int max,int min)
  11. {
  12.   // Se presupone que Vector tendrá al menos el tamaño de tam.
  13.  
  14.   if (tam == 0) return;
  15.  
  16.   Vector[0] = rand();
  17.  
  18.   for (unsigned int i = 1; i < tam;i++)
  19.   {
  20.          do
  21.          {
  22.              Vector[i] = (rand()%max)+min;
  23.          } while (comprobarCoincidencias(Vector[i],Vector,i));
  24.   }
  25. }
  26.  
  27. bool comprobarCoincidencias(int a,int array[],unsigned int tam)
  28. {
  29.    for (unsigned int j = 0; j < tam;j++)
  30.    {
  31.          if (array[j] == a) return true;
  32.    }
  33.  
  34.    return false;
  35. }

No lo he probado pero debería funcionar. Tienes que pasarle el vector que quieres que te rellene, el numero de cifras y el máximo/menor (no inclusivo) valor que puede coger cada cifra. En este caso el maximo sería 10 porque quieres números del 0-9 supongo.

Por cierto:
Código
  1. void generarNumeros(int Vector[],unsigned int tam, int max = RAND_MAX,int min = 0);

Los "=" son son argumentos por defecto. Si no le dices nada el compilador te los rellena automaticamente:

Código
  1. generarNumeros(vector,tam);      // max = RAND_MAX y min = 0
  2. generarNumeros(vector,tam,10);   // max = 10 y min = 0
  3. generarNumeros(vector,tam,10,1); // max = 10 y min = 1


« Última modificación: 22 Enero 2014, 11:49 am por amchacon » En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re:
« Respuesta #11 en: 22 Enero 2014, 14:28 pm »

Con 4 cifras y 6 posibilidades, son 360. 6*5*4*3.

Enviado desde mi ST21i mediante Tapatalk


En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re:
« Respuesta #12 en: 22 Enero 2014, 15:13 pm »

Con 4 cifras y 6 posibilidades, son 360. 6*5*4*3.
Huy es verdad, menudo despiste :silbar:
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re:
« Respuesta #13 en: 22 Enero 2014, 16:34 pm »

Con 4 cifras son 24 posibilidades (4 x 3 x 2 x 1).

En cuanto al tema en cuestión te dejo otra propuesta más generica:

Código
  1. // Prototipos...
  2.  
  3. bool comprobarCoincidencias(int a,int array[],unsigned int tam);
  4. void generarNumeros(int Vector[],unsigned int tam, int max = RAND_MAX,int min = 0);
  5.  
  6. // Otro codigo...
  7.  
  8. // Declaracion de las funciones
  9.  
  10. void generarNumeros(int Vector[],unsigned int tam, int max,int min)
  11. {
  12.   // Se presupone que Vector tendrá al menos el tamaño de tam.
  13.  
  14.   if (tam == 0) return;
  15.  
  16.   Vector[0] = rand();
  17.  
  18.   for (unsigned int i = 1; i < tam;i++)
  19.   {
  20.          do
  21.          {
  22.              Vector[i] = (rand()%max)+min;
  23.          } while (comprobarCoincidencias(Vector[i],Vector,i));
  24.   }
  25. }
  26.  
  27. bool comprobarCoincidencias(int a,int array[],unsigned int tam)
  28. {
  29.    for (unsigned int j = 0; j < tam;j++)
  30.    {
  31.          if (array[j] == a) return true;
  32.    }
  33.  
  34.    return false;
  35. }

No lo he probado pero debería funcionar. Tienes que pasarle el vector que quieres que te rellene, el numero de cifras y el máximo/menor (no inclusivo) valor que puede coger cada cifra. En este caso el maximo sería 10 porque quieres números del 0-9 supongo.

Por cierto:
Código
  1. void generarNumeros(int Vector[],unsigned int tam, int max = RAND_MAX,int min = 0);

Los "=" son son argumentos por defecto. Si no le dices nada el compilador te los rellena automaticamente:

Código
  1. generarNumeros(vector,tam);      // max = RAND_MAX y min = 0
  2. generarNumeros(vector,tam,10);   // max = 10 y min = 0
  3. generarNumeros(vector,tam,10,1); // max = 10 y min = 1

También puedes hacer una función más genérica, pasándole un array con las cifras permitidas, y un int con el número de cifras del número que quieres generar.
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