Newsgroup: it.comp.lang.pascal
Titolo: ciclo random

ciao a tutti
Attraverso un ciclo tiro fuori da 6 a 20 numeri casuali
che possono variare a 0 a 99.
Vorrei però che i numeri siano tutti diversi uno dall'altro.
ReadLn(VAR);
For i:=0 to VAR do
WriteLn(Random(99));
qualcuno mi sà dire come posso fare?
ciao
erik

 ha scritto nel messaggio
news:hslSa.1667$SN1....@news2.tin.it...

memorizzi i numeri in un vettore e
al posto di writeln(random(99))
metti i=random(99)
e poi confronti il numero risultante con quelli nel vettore,
se risulta che non c'era in quelli di prima puoi salvare i nel vettore
altrimenti invochi ancora random.
Questo procedimento lo metti in un ciclo che termina quando una variabile
boolean
è true (all'inizio del ciclo deve essere posta a false) e viene posta tale
quando viene memorizzato
il risultato di random nel vettore(cioè quando il numero non era già
presente).
Ciao

Vorrei però che i numeri siano tutti diversi uno dall'altro.
Var X : Array [ 0 .. 99 ] of Boolean; Y : Byte;
For Y := 0 to 99
  Do X [ Y ] := False
Repeat
   Y := Random ( 99 );
Until NOT X [ Y ]
X [ Y ] := True;
Y e il tuo numero
Il Razziatore,
The Only Good Windows is an uninstalled Windows
-----------------------------------------------
E-MAILs : IlRazziat...@NOSPAMnetscape.net
ICQ     : 67552596
-----------------------------------------------
Founder of MediaPlayer Project
http://mpp.iwebland.com

 Il Razziatore,
-----------
aspetta non mi pare sia giusto così come hai fatto (anche se io non ci sono
riuscito)
mi pare tu programmi in delphi quindi ti  posto esattamente cioò che devo
fare.
All'evento OnTimer
la variabile,ossia l'Edit1.text,decide,a run time, quanti numeri devono
venire fuori.
le possibilità variano da 6 a 20 e i numeri vengono aggiunti ad un memo
e ,zero escluso,sono casuali (Random(99) )
Quindi io avrei fatto così all'inizio
var i:integer;
begin
For i:=0 To StrToInt(Edit1.Text) do
Memo1.Lines:add(IntToStr(Random(99)));
Naturalmente nasce la possibilità checi sia un (clone)
quindi  ho provato così
var
i:Integer;
Ar : Array [0..20] Of integer;
begin
For i:=0 To StrToInt(Edit1.Text) do
Ar[i]:=Random(99);
A questo punto io mi trovo con le mie variabili non ancora definitive ma il
problema rimane non mi riesce di confrontarle.
Probabilmente sbaglio nel modo in cui ho provato a confrontare(che non stò a
postare) comunque tutte le volte che mi pare di esserci arrivato mi accorgo
che c'è qualcosa che non và .
ciao
erik

erik ha scritto:

Io farei così:
aggiungi al tuo programma una variabile set
Var
     s : set of integer;
     VAR,x : integer;
....
s:=[];  (* Svuota l'insieme *)
For i:=0 to VAR do
Begin
   x:=Random(99);
   while x in s do
    x:=Random(99); (* finché x è nell'insieme è un numero gia estratto *)
   s:=s+[x];       (* agginge x all'insieme *)
   Writeln(x)
end;

fare.
[CUT]
per semplicita mi apro delphi e dopo un po' di test:
implementation
{$R *.DFM}
Var X : Array [ 0 .. 99 ] of Boolean;
Procedure TForm1.Button1Click(Sender: TObject);
Var Y, I : Byte;
Begin
  Memo1.Lines.Clear;
  For Y := 0 to 99
    Do X [ Y ] := False;
  For I := 1 To StrToInt ( Edit1.Text )
    Do Begin
      Repeat
        Y := Random ( 99 );
      Until NOT X [ Y ];
      X [ Y ] := True;
      Memo1.Lines.Add ( IntToStr ( Y ) );
    End;
End;
end.
