Oppure

Loading
14/08/07 9:04
BigBacci
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??
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 do writeln('lancio numero',n,'=',e);
     readln(r);
     until r=0;
end.

:k:
aaa
17/08/07 8:42
Maury91
Il tuo bug fa troppo ridere :rotfl:, ti metterai a ridere pure tu dopo che te l'avro spiegato.
Ti commento il tuo codice cosi capisci.
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.

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 for lo tolto (for n:=1 to lanci do writeln('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.
aaa
17/08/07 12:48
BigBacci
continua a non andare,accidenti
aaa
17/08/07 12:57
Maury91
stai scherzando ?
aaa
17/08/07 13:43
BigBacci
a me da lo stesso errore di prima,ovvero sempre i soliti numeri
aaa
24/08/07 19:13
Il Totem
Devi mettere randomize fuori da ogni ciclo, all'inizio del programma, dopo begin.
aaa
24/08/07 21:04
Maury91
beh, non lo mai usato in un ciclo, perciò non ci ho badato :grr:
aaa
25/08/07 12:30
BigBacci
quindi il codice sorgente corretto com'è??
aaa