• Domingo 22 de Diciembre de 2024, 09:26

Autor Tema:  Sobre Random  (Leído 1215 veces)

Perrero

  • Miembro MUY activo
  • ***
  • Mensajes: 209
    • Ver Perfil
Sobre Random
« en: Sábado 6 de Mayo de 2006, 00:03 »
0
Como puedo hacer para que el random no me genere un numero que ya fue generado anteriormente???  :huh:

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Sobre Random
« Respuesta #1 en: Sábado 6 de Mayo de 2006, 00:12 »
0
Forma dificil y tediosa (no recomendada):

Metes los numeros generados en un arreglo y cada vez que generas un numero, te fijas si ya esta en el arreglo.


Forma mejor pero mas restringida:

Generas un vector que contenga todos los numeros que necesitas. Por ejemplo un Arreglo de 60 elementos con los numeros del 1 al 60
Código: Text
  1.  
  2. var
  3.    Arreglo: array[1..60] of integer;
  4.    var i: Integer;
  5. begin
  6.   for i:=1 to 60 Arreglo[i] := i;
  7. end;
  8.  
  9.  
Luego, mediante random mezclas los numeros del arreglo intercambiandolos.
(supongo que podras hacer una funcion que intercamibe el valor de dos numeros,
la voy a llamar Intercambiar(A , B ).  a  ' a ' le asignda el valor de 'b' y a 'b' el valor de 'a'.
Código: Text
  1.  
  2. for i:=1 to 60 do
  3.   Intercambiar(Arreglo[i], Arreglo[Random(60)+1]);
  4.  
  5.  

Listo, tenes un arreglo con numeros del 1 al 60 intercambiados aleatoreamente.
Es como mezclar un mazo de naipes.

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Sobre Random
« Respuesta #2 en: Sábado 6 de Mayo de 2006, 00:17 »
0
Tambien así podes mezclar Matrices, en el ejemplo 10x10:
Código: Text
  1.  
  2. for i:=1 to 10 do
  3.   for j:=1 to 10 do
  4.       Intercambiar(Matriz[i,j], Matriz[Random(10)+1, Random(10)+1]);
  5.  
  6.  

el procedimiento intercambiar ser'ia
Código: Text
  1.  
  2. procedrue Intercambiar(var A,B: Integer);
  3. var
  4.      C:Integer;
  5. begin
  6.    C := A;
  7.    A := B;
  8.    B := C;
  9. end;
  10.  
  11.