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 - Problema di numeri
Forum - Pascal - Problema di numeri

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
BigBacci (Normal User)
Newbie


Messaggi: 15
Iscritto: 08/06/2007

Segnala al moderatore
Postato alle 11:04
Martedì, 14/08/2007
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

  1. program dado;
  2. uses crt;
  3. var r,n,e,faccia,lanci,esiti:integer;
  4. begin
  5.      repeat clrscr;
  6.      writeln('Questo programma simula lanci di dadi casualmente');
  7.      write('Scegli il numero di facce del dado ');
  8.      readln(faccia);sound(394);delay(500);nosound;
  9.      write('Ben fatto!Adesso scegli quanti lanci vuoi fare ');
  10.      readln(lanci);sound(394);delay(500);nosound;
  11.      writeln('ELABORAZIONE IN CORSO...ATTENDI...');delay(2000);
  12.           for n:=1 to lanci do
  13.           BEGIN
  14.           CLRSCR;
  15.           RANDOMIZE;
  16.           e:=RANDOM(faccia)+1;
  17.           end;
  18.      for n:=1 to lanci do writeln('lancio numero',n,'=',e);
  19.      readln(r);
  20.      until r=0;
  21. end.


:k:

PM Quote
Avatar
Maury91 (Member)
Expert


Messaggi: 531
Iscritto: 18/09/2006

Segnala al moderatore
Postato alle 10:42
Venerdì, 17/08/2007
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.
Codice sorgente - presumibilmente Delphi

  1. program dado;
  2. uses crt;
  3. var r,n,e,faccia,lanci,esiti:integer;
  4. /* dichiari tutte le varibile e gli uses e sin qui tutto ok */
  5. begin
  6.      repeat clrscr; /* Qua metti un repeat nel caso l'utente voglia eseguire una seconda volta il programma OK */
  7.     writeln('Questo programma simula lanci di dadi casualmente');
  8.     write('Scegli il numero di facce del dado ');
  9.     readln(faccia);sound(394);delay(500);nosound;
  10.     write('Ben fatto!Adesso scegli quanti lanci vuoi fare ');
  11.     readln(lanci);sound(394);delay(500);nosound;
  12.     writeln('ELABORAZIONE IN CORSO...ATTENDI...');delay(2000);
  13. /* Hai scritto cosa fa il programma */
  14.          for n:=1 to lanci do
  15.          BEGIN /*fai partire un ciclo for OK */
  16.          CLRSCR; /*sto clrscr qua secondo me non ci fa niente, gia alla seconda esecuzione del ciclo la schermata è pulita BOH ! */
  17.          RANDOMIZE;
  18.          e:=RANDOM(faccia)+1; /* Il random va bene OK */
  19.          end;
  20.     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 */
  21.      readln(r);
  22.      until r=0; /* se l'utente non lo sa che deve scrivere 0 per uscire come farà ? */
  23. end.



Spero che ora hai capito il BUG, ti scrivo il codice giusto.

Codice sorgente - presumibilmente Delphi

  1. program dado;
  2. uses crt;
  3. var r,n,e,faccia,lanci,esiti:integer;
  4. begin
  5.      repeat clrscr;
  6.      writeln('Questo programma simula lanci di dadi casualmente');
  7.      write('Scegli il numero di facce del dado ');
  8.      readln(faccia);sound(394);delay(500);nosound;
  9.      write('Ben fatto!Adesso scegli quanti lanci vuoi fare ');
  10.      readln(lanci);sound(394);delay(500);nosound;
  11.      writeln('ELABORAZIONE IN CORSO...ATTENDI...');delay(2000);
  12. /* se vuoi il clrscr lo meti qui */
  13.           for n:=1 to lanci do
  14.           BEGIN
  15. /* ho tolto il clrscr seno ogni numero casuale che scriveva dopo veniva cancellato */
  16.           RANDOMIZE;
  17.           e:=RANDOM(faccia)+1;
  18.           writeln('lancio numero',n,'=',e); /* ho messo qui il write */
  19.           end;
  20. /* Questo for lo tolto (for n:=1 to lanci do writeln('lancio numero',n,'=',e);) */
  21.      write('Se vuoi uscire dal programma scrivi 0 altrime srivi un'altro numero');
  22.     readln(r);
  23.     until r=0; end.



Il programma non lo provato ma dovrebbe funzionare, nel caso da errore nei commenti, eliminali.

PM Quote
Avatar
BigBacci (Normal User)
Newbie


Messaggi: 15
Iscritto: 08/06/2007

Segnala al moderatore
Postato alle 14:48
Venerdì, 17/08/2007
continua a non andare,accidenti

PM Quote
Avatar
Maury91 (Member)
Expert


Messaggi: 531
Iscritto: 18/09/2006

Segnala al moderatore
Postato alle 14:57
Venerdì, 17/08/2007
stai scherzando ?

PM Quote
Avatar
BigBacci (Normal User)
Newbie


Messaggi: 15
Iscritto: 08/06/2007

Segnala al moderatore
Postato alle 15:43
Venerdì, 17/08/2007
a me da lo stesso errore di prima,ovvero sempre i soliti numeri

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 21:13
Venerdì, 24/08/2007
Devi mettere randomize fuori da ogni ciclo, all'inizio del programma, dopo begin.

PM Quote
Avatar
Maury91 (Member)
Expert


Messaggi: 531
Iscritto: 18/09/2006

Segnala al moderatore
Postato alle 23:04
Venerdì, 24/08/2007
beh, non lo mai usato in un ciclo, perciò non ci ho badato :grr:

PM Quote
Avatar
BigBacci (Normal User)
Newbie


Messaggi: 15
Iscritto: 08/06/2007

Segnala al moderatore
Postato alle 14:30
Sabato, 25/08/2007
quindi il codice sorgente corretto com'è??

PM Quote
Avatar
Anonymous (Member)
Guru


Messaggi: 1059
Iscritto: 30/07/2006

Segnala al moderatore
Postato alle 22:31
Sabato, 25/08/2007
Testo quotato

Postato originariamente da BigBacci:

quindi il codice sorgente corretto com'è??



ma vuoi tutto pronto????

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
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo