Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
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:
Codice sorgente - presumibilmente Delphi
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]ofinteger;
b:array[0..26]ofboolean;
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 il 19/12/2011 alle 22:19
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:
Codice sorgente - presumibilmente Plain Text
if(a[trunc(n)]=trunc(n))and(b[trunc(n)]=true)then
basta
Codice sorgente - presumibilmente Plain Text
if(a[n]=n)and(b[n)=true)then
o, meglio:
Codice sorgente - presumibilmente Pascal
if b[n]then
" if(a[trunc(n)]=trunc(n))and(b[trunc(n)]=true)then ": siccome non riuscivo a fa funzionare il programma avevo assegnato a n :extended nella sezione random - lorenzoscarrone - 19/11/11 22:50
poi nn ho capito in ke senso nn avviene nessuno scambio nella sezione if, b[n]:=false; nn è sufficiente a limitare l'utilizzo della variabili da parte del programma ? - lorenzoscarrone - 19/11/11 23:02
Non avviene nessuna registrazione, nel senso che il vettore a rimane invariato, comunque il programma funziona. - Poggi Marco - 20/11/11 12:31
grazie Marco, per l'aiuto! - lorenzoscarrone - 20/11/11 13:24
Non fare poi tutto quel codice per un array! fai un ciclo! è tutto più leggibile e lavoro in meno per il programmatore
Avevo fat to tt quel casino xké all'inizio nn riuscivo a Farlo funzionare con il for to do poi ho trovato l'errore cmq Graz - lorenzoscarrone - 18/12/11 12:50