Oppure

Loading
19/11/11 19:01
lorenzoscarrone
ho fatto questo programma per estrarre delle persone per fare le programmate di una materia ma oltre a nn riuscire a estrarre tutti i 26 componenti della mia classe mi presenta sempre una stessa sequenza;
ecco il codice:

program  programmate;
{
::::: funzionamento :::::
ogni persona ha un led: valore boolean e un numero: numero registro;
il random() estrae numeri "a caso" e ogni volta che viene estratta una persona
spegne il led = false cosi da nn essere estratto 2 volte
::::: problema :::::
mi estrae solo 14 numeri
}
uses wincrt,graph;
var a:array[0..26]of integer;
    b:array[0..26]of boolean;
    i,n,k:longint;

begin
a[1]:=0;b[16]:=true;     //lampadine e numeri
a[2]:=1;b[1]:=true;
a[3]:=0;b[2]:=true;
a[4]:=0;b[3]:=true;
a[5]:=0;b[4]:=true;
a[6]:=0;b[5]:=true;
a[7]:=0;b[6]:=true;
a[8]:=0;b[7]:=true;
a[9]:=0;b[8]:=true;
a[10]:=0;b[9]:=true;
a[11]:=0;b[10]:=true;
a[12]:=13;b[11]:=true;
a[13]:=13;b[12]:=true;
a[14]:=14;b[13]:=true;
a[15]:=15;b[14]:=true;
a[16]:=16;b[15]:=true;
a[17]:=17;b[17]:=true;
a[18]:=18;b[18]:=true;
a[19]:=19;b[19]:=true;
a[20]:=20;b[20]:=true;
a[21]:=21;b[21]:=true;
a[22]:=22;b[22]:=true;
a[23]:=23;b[23]:=true;
a[24]:=24;b[24]:=true;
a[25]:=25;b[25]:=true;
a[26]:=26;b[26]:=true;

repeat
i:=trunc((26*(26+1))/2);
n:=(random(i));

if(a[trunc(n)]=trunc(n))and(b[trunc(n)]=true)then
begin
k:=k+1; //contatore estrazioni
writeln(trunc(n),' - la posizione - ',k);
b[trunc(n)]:=false;  //spegnimento lampadine
end;

until k=26;

end.
Ultima modifica effettuata da Phi 19/12/11 21:19
aaa
19/11/11 20:26
Poggi Marco
Ciao!

La sequenza delle estrazioni è sempre la medesima perché l' istruzione random va inizializzata.
Devi inserire il comando randomize prima di utilizzare random.

Il range di selezione dell' elemento è errato. Devi impostarlo a 27, ovvero la dimensione dell' array.

All' interno dell' if, non avviene nesun scambio; le estrazioni non vengono registrate.

Come mai imponi la condizione:
if(a[trunc(n)]=trunc(n))and(b[trunc(n)]=true)then 

basta
if(a[n]=n)and(b[n)=true)then 

o, meglio:
if b[n] then 
aaa
15/12/11 14:55
rikitheking
Non fare poi tutto quel codice per un array! fai un ciclo! è tutto più leggibile e lavoro in meno per il programmatore
aaa