Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Sto provando a compilare un programma di lanci di dado ma non riesco a capire perchè ad ogni lancio mi venga riproposto lo stasso numero,sapete darmi una mano??
Codice sorgente - presumibilmente Delphi
program dado;
uses crt;
var r,n,e,faccia,lanci,esiti:integer;
begin
repeat clrscr;
writeln('Questo programma simula lanci di dadi casualmente');
write('Scegli il numero di facce del dado ');
readln(faccia);sound(394);delay(500);nosound;
write('Ben fatto!Adesso scegli quanti lanci vuoi fare ');
readln(lanci);sound(394);delay(500);nosound;
writeln('ELABORAZIONE IN CORSO...ATTENDI...');delay(2000);
for n:=1 to lanci do
BEGIN
CLRSCR;
RANDOMIZE;
e:=RANDOM(faccia)+1;
end;
for n:=1 to lanci dowriteln('lancio numero',n,'=',e);
Il tuo bug fa troppo ridere , ti metterai a ridere pure tu dopo che te l'avro spiegato.
Ti commento il tuo codice cosi capisci.
Codice sorgente - presumibilmente Delphi
program dado;
uses crt;
var r,n,e,faccia,lanci,esiti:integer;
/* dichiari tutte le varibile e gli uses e sin qui tutto ok */
begin
repeat clrscr;/* Qua metti un repeat nel caso l'utente voglia eseguire una seconda volta il programma OK */
writeln('Questo programma simula lanci di dadi casualmente');
write('Scegli il numero di facce del dado ');
readln(faccia);sound(394);delay(500);nosound;
write('Ben fatto!Adesso scegli quanti lanci vuoi fare ');
readln(lanci);sound(394);delay(500);nosound;
writeln('ELABORAZIONE IN CORSO...ATTENDI...');delay(2000);
/* Hai scritto cosa fa il programma */
for n:=1 to lanci do
BEGIN /*fai partire un ciclo for OK */
CLRSCR; /*sto clrscr qua secondo me non ci fa niente, gia alla seconda esecuzione del ciclo la schermata è pulita BOH ! */
RANDOMIZE;
e:=RANDOM(faccia)+1; /* Il random va bene OK */
end;
for n:=1 to lanci do writeln('lancio numero',n,'=',e); /* Ecco qua il BUG, gli stai dicendo di scrivere lanci volte la stessa frase, perchè "e" non viene calcolato in quel ciclo e quindi ha l'ultimo valore del ciclo precedente */
readln(r);
until r=0;/* se l'utente non lo sa che deve scrivere 0 per uscire come farà ? */
end.
Spero che ora hai capito il BUG, ti scrivo il codice giusto.
Codice sorgente - presumibilmente Delphi
program dado;
uses crt;
var r,n,e,faccia,lanci,esiti:integer;
begin
repeat clrscr;
writeln('Questo programma simula lanci di dadi casualmente');
write('Scegli il numero di facce del dado ');
readln(faccia);sound(394);delay(500);nosound;
write('Ben fatto!Adesso scegli quanti lanci vuoi fare ');
readln(lanci);sound(394);delay(500);nosound;
writeln('ELABORAZIONE IN CORSO...ATTENDI...');delay(2000);
/* se vuoi il clrscr lo meti qui */
for n:=1 to lanci do
BEGIN
/* ho tolto il clrscr seno ogni numero casuale che scriveva dopo veniva cancellato */
RANDOMIZE;
e:=RANDOM(faccia)+1;
writeln('lancio numero',n,'=',e);/* ho messo qui il write*/
end;
/* Questo forlo tolto (for n:=1 to lanci dowriteln('lancio numero',n,'=',e);)*/
write('Se vuoi uscire dal programma scrivi 0 altrime srivi un'altro numero');
readln(r);
until r=0; end.
Il programma non lo provato ma dovrebbe funzionare, nel caso da errore nei commenti, eliminali.
maury ti ha risolto il problema più grosso lasciando però una svista, dopo però total ti ha detto di fare una piccola modifica, cioè di spostare la scritta randomize nel posto adatto, e invece di farlo e compilare il programma chiedi di nuovo il codice servito????
se non hai capito quello cha ha detto Il Totem te lo riformulo meglio io... per il resto fallo tu non venire a richiedere il codice quando ti è stato spiegato come fare....
devi semplicemente spostare la scritta RANDOMIZE da dentro al ciclo all'inizio del programma, tra il begin e il repeat... ecco tutto
Ultima modifica effettuata da Anonymous il 29/08/2007 alle 14:12