13/08/09 14:17
Gians
Ho qualche problema con una procedura ma non riesco a capire dove... in compilazione non ci sono errori ma eseguendo il programma a un certo punto si blocca e il ciclo repeat..until non si conclude. Ho pensato che il problema potesse risiedere nell'uso della funzione random, perché aggiungendo un writeln(extr), il valore estratto, prima di entrare nell'if, ho visto che vengono estratti sempre gli stessi 4 numeri. Ora, avendo impostato la cosa in modo che lo stesso numero non possa essere estratto più di 9 volte, e volendo ripetere il ciclo 54 volte, se si estraggono solo 4 numeri il programma si blocca per forza perché non possono essere estratti nuovi numeri e non si può raggiungere il 54.
Però, ho provato a creare un programma indipendente con la sola funzione random dichiarata nello stesso mod0, e lì non ci sono problemi, per cui... cosa posso aver sbagliato? Altra nota, prima la variabile extr era byte e in quel modo estraeva solo due numeri, la cosa mi sembra veramente molto strana... avete idee? Grazie mille per l'aiuto
Però, ho provato a creare un programma indipendente con la sola funzione random dichiarata nello stesso mod0, e lì non ci sono problemi, per cui... cosa posso aver sbagliato? Altra nota, prima la variabile extr era byte e in quel modo estraeva solo due numeri, la cosa mi sembra veramente molto strana... avete idee? Grazie mille per l'aiuto
procedure BuildCube; var rand_cube:cube; count,in_count,face:byte; extr_count:array[1..9] of byte; extr:integer; begin count:=0; in_count:=0; randomize; repeat extr:=random(8)+1; if extr_count[extr] < 9 then begin count:=count+1; writeln(extr); extr_count[extr]:=extr_count[extr]+1; if in_count=8 then face:=count div 9 else face:=(count div 9)+1; if in_count=9 then in_count:=1 else in_count:=in_count+1; { rand_cube.faces[face][in_count]:=extr;} end; until count > 53; end;
aaa