PDA

Visualizza la versione completa : [Pascal] Come fermare esecuzione programma al termine


Mark Lenders
12-02-2015, 01:59
Apro una nuova discussione come mi è stato consigliato e riscrivo il mio problema che ho con Pascal:

Per piacere, mi servirebbe un consiglio.
Ho fatto partire un programma con Pascal il quale si avvia correttamente, ma una volta finita la sua esecuzione invece di aspettare che io schiacci invio, torna subito al codice sorgente con una finestra che mi dice "exited with exitcode=201".
Qualcuno sa aiutarmi?

Questo è il codice:


program prova;

uses crt;


var
contatore, colonna, riga, colore: integer;


begin
clrscr;


contatore:=0;


repeat
colonna:= random (81);
riga:= random (26);
gotoxy(colonna, riga);
colore:=random (16);
if colore=YELLOW then
contatore:=contatore +1;
textcolor(colore);

write('█');
delay(100);
until contatore=10;


readln


end.

LeleFT
12-02-2015, 10:33
@Mark Lenders: il titolo della discussione deve dare un'idea del contenuto della stessa. Se scrivi "Problema con Pascal" non dai nessuna informazione, se non quella del inguaggio coinvolto (che è comunque obbligatorio indicare). Ho corretto io il titolo della discussione.


Ciao. :ciauz:

Mark Lenders
12-02-2015, 14:09
È vero! C'è scritto anche nel regolamento, ma mi era sfuggito.
Grazie.

LeleFT
12-02-2015, 14:45
Ora, io sono molto arrugginito per quanto riguarda il Pascal, ma... non mi pare corretto quel repeat/until. Nel senso che potrebbe anche ciclare all'infinito.

L'unica condizione di uscita è che la variabile contatore assuma valore 10... ma essa viene incrementata SE E SOLO SE la variabile colore (il cui valore è casuale) vale YELLOW (che non so quanto valga... credo 14, se non erro). Ora: chi ti garantisce che verrà mai estratto il valore YELLOW? E, soprattutto, chi ti garantisce che verrà estratto 10 volte quel valore?

C'è da dire che, sempre se non ricordo male, il generatore di numeri casuali va inizializzato mediante chiamata alla procedura Randomize (ma non ne sono sicuro).

PS: consiglio di indentare meglio... tutte le istruzioni dentro il repeat/until dovrebbero essere indentate; l'istruzione del ramo then dovrebbe essere indentata... altrimenti si fa davvero fatica a seguire il codice (ho smesso di programmare in BASIC con numeri di linea senza indentazione almeno 18 anni fa).

Ciao. :ciauz:

Mark Lenders
12-02-2015, 21:18
Ora, io sono molto arrugginito per quanto riguarda il Pascal, ma... non mi pare corretto quel repeat/until. Nel senso che potrebbe anche ciclare all'infinito.

L'unica condizione di uscita è che la variabile contatore assuma valore 10... ma essa viene incrementata SE E SOLO SE la variabile colore (il cui valore è casuale) vale YELLOW (che non so quanto valga... credo 14, se non erro). Ora: chi ti garantisce che verrà mai estratto il valore YELLOW? E, soprattutto, chi ti garantisce che verrà estratto 10 volte quel valore?


Beh sicuramente quando si stampano a video dei colori random, prima o poi ci si arriva per forza a dieci gialli. Infatto il programma funziona correttamente, il problema è che una volta eseguito il programma torna sulla pagina del cosice con il massaggio di errore....


C'è da dire che, sempre se non ricordo male, il generatore di numeri casuali va inizializzato mediante chiamata alla procedura Randomize (ma non ne sono sicuro).

Si in effetti è vero, ma funziona anche senza.
Per quel poco che ne so, l'unica differenza è che se non si inserisce il comando randomize tutte le volte che faccio partire il programma verrà eseguito nella stessa identica maniera della volta precedente, anche quella successiva e così via.


PS: consiglio di indentare meglio... tutte le istruzioni dentro il repeat/until dovrebbero essere indentate; l'istruzione del ramo then dovrebbe essere indentata... altrimenti si fa davvero fatica a seguire il codice (ho smesso di programmare in BASIC con numeri di linea senza indentazione almeno 18 anni fa).

Ciao. :ciauz:

Grazie del consiglio.

LeleFT
13-02-2015, 14:07
Beh sicuramente quando si stampano a video dei colori random, prima o poi ci si arriva per forza a dieci gialli.

Non darlo per scontato... una sequenza di numeri casuali perfettamente accettabile potrebbe anche non produrre alcun "14". E' raro, molto raro, ma è perfettamente lecito che ciò accada... quindi il tuo programma non terminerebbe.

Ad ogni modo, ho installato al volo il compilatore FreePascal e ho dato in pasto il tuo programma... avviato, si è fermato, ha atteso che io premessi INVIO e ha terminato senza alcun problema.

Probabilmente c'è qualcos'altro o sulla tua macchina, o sul tuo IDE, o da qualche altra parte.


Ciao. :ciauz:

Mark Lenders
13-02-2015, 14:20
Grazie, molto gentile!

Loading