Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Pascal - Ho un problema nel far funzionare questo programma
Forum - Pascal - Ho un problema nel far funzionare questo programma

Avatar
lorenzoscarrone (Normal User)
Pro


Messaggi: 92
Iscritto: 16/11/2011

Segnala al moderatore
Postato alle 20:01
Sabato, 19/11/2011
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

  1. program  programmate;
  2. {
  3. ::::: funzionamento :::::
  4. ogni persona ha un led: valore boolean e un numero: numero registro;
  5. il random() estrae numeri "a caso" e ogni volta che viene estratta una persona
  6. spegne il led = false cosi da nn essere estratto 2 volte
  7. ::::: problema :::::
  8. mi estrae solo 14 numeri
  9. }
  10. uses wincrt,graph;
  11. var a:array[0..26]of integer;
  12.     b:array[0..26]of boolean;
  13.     i,n,k:longint;
  14.  
  15. begin
  16. a[1]:=0;b[16]:=true;     //lampadine e numeri
  17. a[2]:=1;b[1]:=true;
  18. a[3]:=0;b[2]:=true;
  19. a[4]:=0;b[3]:=true;
  20. a[5]:=0;b[4]:=true;
  21. a[6]:=0;b[5]:=true;
  22. a[7]:=0;b[6]:=true;
  23. a[8]:=0;b[7]:=true;
  24. a[9]:=0;b[8]:=true;
  25. a[10]:=0;b[9]:=true;
  26. a[11]:=0;b[10]:=true;
  27. a[12]:=13;b[11]:=true;
  28. a[13]:=13;b[12]:=true;
  29. a[14]:=14;b[13]:=true;
  30. a[15]:=15;b[14]:=true;
  31. a[16]:=16;b[15]:=true;
  32. a[17]:=17;b[17]:=true;
  33. a[18]:=18;b[18]:=true;
  34. a[19]:=19;b[19]:=true;
  35. a[20]:=20;b[20]:=true;
  36. a[21]:=21;b[21]:=true;
  37. a[22]:=22;b[22]:=true;
  38. a[23]:=23;b[23]:=true;
  39. a[24]:=24;b[24]:=true;
  40. a[25]:=25;b[25]:=true;
  41. a[26]:=26;b[26]:=true;
  42.  
  43. repeat
  44. i:=trunc((26*(26+1))/2);
  45. n:=(random(i));
  46.  
  47. if(a[trunc(n)]=trunc(n))and(b[trunc(n)]=true)then
  48. begin
  49. k:=k+1; //contatore estrazioni
  50. writeln(trunc(n),' - la posizione - ',k);
  51. b[trunc(n)]:=false;  //spegnimento lampadine
  52. end;
  53.  
  54. until k=26;
  55.  
  56. end.


Ultima modifica effettuata da Phi il 19/12/2011 alle 22:19
PM
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Up
1
Down
V
Segnala al moderatore
Postato alle 21:26
Sabato, 19/11/2011
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:
Codice sorgente - presumibilmente Plain Text

  1. if(a[trunc(n)]=trunc(n))and(b[trunc(n)]=true)then


basta
Codice sorgente - presumibilmente Plain Text

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


o, meglio:
Codice sorgente - presumibilmente Pascal

  1. 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
PM
Avatar
rikitheking (Normal User)
Newbie


Messaggi: 8
Iscritto: 11/07/2011

Up
0
Down
V
Segnala al moderatore
Postato alle 15:55
Giovedì, 15/12/2011
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
PM