Newsgroup: it.comp.lang.pascal
Titolo: vettore di numeri random [un po' lunghetto]

Ho un problema con l'inserimento di numeri casuali (diversi tra di loro) in
un vettore.
Assumendo
type
 dato = record
    numero : 1..90;
    ccar:boolean;
 end;
var
superenalotto: array [1..7] of dato;
i,x,j : integer;
randomize;
for i := 1 to 7 do (*scelta casuale ruote*)
superenalotto[i].numero := random (10) +1;
superenalotto[1].ccar:=true;
Il pezzo di prog incriminato è questo
repeat  (*controllo ruote ===>non funziona<===*)
 for j :=1 to 6 do
  for x := j+1 to 7 do
   if superenalotto[j].numero = superenalotto[x].numero
       then
        begin
         repeat
          superenalotto[x].numero:=random (10)+1;
         until superenalotto[x].numero<>superenalotto[j].numero;
         superenalotto[x].ccar:=false;
        end
       else
        superenalotto[x].ccar:=true;
 if superenalotto[1].ccar
  and superenalotto[2].ccar
  and superenalotto[3].ccar
  and superenalotto[4].ccar
  and superenalotto[5].ccar
  and superenalotto[6].ccar
  and superenalotto[7].ccar
  then
   cruote:=true;
until cruote;
Il fatto è che io ho bisogno di sette valori diversi tra loro e qualche
volta questo pezzo di prog mi da appunto valori uguali.
C'è qualche buon'anima che mi da una mano?
grazie mille
--
ciao
--->Igor <---





Per fare quel controllo bastano solo 
pochissime righe di programma:


 


program 
estrazione;


uses 
crt;


var superenalotto: 
array[1..7] of byte;


      i: byte;


 


function esiste(n: byte): 
boolean; 
(* funzione che controlla se nel vettore esiste 
già quel numero*)


var i: byte; trovato: 
boolean;


begin


        trovato := 
false;


        for i:=1 to 7 
do


            if 
superenalotto[i]=n then trovato := true;


        esiste := 
trovato;


end;


 


procedure 
CreaNumeri;


var  I,Num: Byte;


begin


        for i:=1 to 7 
do


            
superenalotto[i]:=0;


 


        for i:=1 to 7 
do


             
repeat


                    
superenalotto[i] := random(90)+1;


            
until not (esiste( superenalotto[i]));


End;


 


begin                                   
(*programma  principale*)


 


        
clrscr;


        
randomize;


        
creanumeri;                
(*crea i numeri*)


 


end.



|Per fare quel controllo bastano solo pochissime righe di programma:
[cut]
Lo provo subitissimo: a prima vista sembra un beeel pezzo di programma
Grazie mille


Please, no postare in html!

 ha scritto nel messaggio
news:000701c02f0c$37165f60$b18f1597@DARKBYTE...
[cut]
|function esiste(n: byte): boolean; (* funzione che controlla se nel vettore
esiste già quel numero*)
|var i: byte; trovato: boolean;
|begin
|        trovato := false;
|        for i:=1 to 7 do
|            if superenalotto[i]=n then trovato := true;
|        esiste := trovato;
|end;
[cut]
Così com'era la funx mi dava un loop infinito (controllava un valore con sè
stesso), quindi ho aggiunto due cosette
nella funx
function esiste (n:integer;index:integer): boolean;
 var
 i : integer;
 trovato : boolean;
 begin
  trovato : false;
  for i := 1 to 7 do
   if i <>index then
    if n = superenalotto[i]
     then
      trovato:= true;
esiste:=trovato;
end;
.......
e nel main program
randomize
for i := 1 to 7 do
 superenalotto[i]:=0;
for i := 1 to 7 do
 repeat
 superenalotto[i]:=random (10)+1;
until not(esiste(superenalotto[i],i));
ti ringrazio per l'aiuto che mi hai dato