SoloCodigo

Programación General => Delphi => Mensaje iniciado por: Perrero en Sábado 6 de Mayo de 2006, 00:03

Título: Sobre Random
Publicado por: Perrero en Sábado 6 de Mayo de 2006, 00:03
Como puedo hacer para que el random no me genere un numero que ya fue generado anteriormente???  :huh:
Título: Re: Sobre Random
Publicado por: Enko en Sábado 6 de Mayo de 2006, 00:12
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.
Título: Re: Sobre Random
Publicado por: Enko en Sábado 6 de Mayo de 2006, 00:17
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.