Problema con srand() y rand()

Iniciado por JonaLamper, 14 Enero 2014, 23:45 PM

0 Miembros y 1 Visitante están viendo este tema.

amchacon

Re:
#10
Cita de: ivancea96 en 22 Enero 2014, 09:10 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 (cpp) [Seleccionar]
// Prototipos...

bool comprobarCoincidencias(int a,int array[],unsigned int tam);
void generarNumeros(int Vector[],unsigned int tam, int max = RAND_MAX,int min = 0);

// Otro codigo...

// Declaracion de las funciones

void generarNumeros(int Vector[],unsigned int tam, int max,int min)
{
  // Se presupone que Vector tendrá al menos el tamaño de tam.
 
  if (tam == 0) return;
 
  Vector[0] = rand();

  for (unsigned int i = 1; i < tam;i++)
  {
         do
         {
             Vector[i] = (rand()%max)+min;
         } while (comprobarCoincidencias(Vector[i],Vector,i));
  }
}

bool comprobarCoincidencias(int a,int array[],unsigned int tam)
{
   for (unsigned int j = 0; j < tam;j++)
   {
         if (array[j] == a) return true;
   }

   return false;
}


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 (cpp) [Seleccionar]
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 (cpp) [Seleccionar]
generarNumeros(vector,tam);      // max = RAND_MAX y min = 0
generarNumeros(vector,tam,10);   // max = 10 y min = 0
generarNumeros(vector,tam,10,1); // max = 10 y min = 1
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

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

Enviado desde mi ST21i mediante Tapatalk

amchacon

Cita de: ivancea96 en 22 Enero 2014, 14:28 PM
Con 4 cifras y 6 posibilidades, son 360. 6*5*4*3.
Huy es verdad, menudo despiste :silbar:
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

Cita de: amchacon en 22 Enero 2014, 11:46 AM
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 (cpp) [Seleccionar]
// Prototipos...

bool comprobarCoincidencias(int a,int array[],unsigned int tam);
void generarNumeros(int Vector[],unsigned int tam, int max = RAND_MAX,int min = 0);

// Otro codigo...

// Declaracion de las funciones

void generarNumeros(int Vector[],unsigned int tam, int max,int min)
{
  // Se presupone que Vector tendrá al menos el tamaño de tam.
 
  if (tam == 0) return;
 
  Vector[0] = rand();

  for (unsigned int i = 1; i < tam;i++)
  {
         do
         {
             Vector[i] = (rand()%max)+min;
         } while (comprobarCoincidencias(Vector[i],Vector,i));
  }
}

bool comprobarCoincidencias(int a,int array[],unsigned int tam)
{
   for (unsigned int j = 0; j < tam;j++)
   {
         if (array[j] == a) return true;
   }

   return false;
}


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 (cpp) [Seleccionar]
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 (cpp) [Seleccionar]
generarNumeros(vector,tam);      // max = RAND_MAX y min = 0
generarNumeros(vector,tam,10);   // max = 10 y min = 0
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.