Inform e Glulx/Le basi di Inform/For, break e continue

Wikibooks, manuali e libri di testo liberi.
Indice del libro

Un altro ciclo da esaminare è il for. Ecco un esempio che ne illustra il funzionamento:

! Esempio sull’utilizzo del ciclo FOR – versione 1

Include "Parser"; Include "VerbLib"; Include "Replace";
[ Funz_princip; ClearScreen(); ! pulisce lo schermo Domanda(); print "^Premi un tasto per uscire^"; KeyCharPrimitive(); ! legge un carattere dalla tastiera ];
[ Domanda x count; for (count = 0: count<5: count++) { print "^", count , "^"; print "Ogni quanti anni compare la cometa di Halley? "; x = GetNumber(2); if (x == 76) { print "La risposta @`e esatta!!!^"; count = 5; } else print "Spiacente, la risposta non @`e esatta...^"; } ];
[ Initialise; Funz_princip(); quit; ! fine del programma ];
Include "Io"; Include "ItalianG";

Questo ciclo è suddiviso in tre parti; la prima (count = 0) assegna il valore 0 alla variabile count; la seconda (count < 5) fa in modo che il ciclo vada avanti fino a quando la variabile count contiene un valore minore di 5; la terza (count++) incrementa di 1 il valore di count fino a quando non arriva a essere uguale a 5. A quel punto il programma termina.

Quando l’utente risponde correttamente alla domanda prima che i cinque tentativi a disposizione siano terminati, alla variabile count viene assegnato il valore 5, che fa così terminare il ciclo e di conseguenza anche il programma. Senza questo piccolo stratagemma, se l’utente indovina ad esempio la risposta al secondo tentativo, il ciclo va avanti ancora tre volte (e viene quindi richiesta la domanda per altre tre volte).

Anche il comando if ha adesso delle istruzioni racchiuse da delle parentesi graffe; questo accade perché le istruzioni che gli appartengono sono più di una, al contrario di quello che avviene per l’istruzione else.

Il comando break si usa per fermare un ciclo, qualunque sia la sua condizione:

! Esempio sull’utilizzo del ciclo FOR – versione 2

Include "Parser"; Include "VerbLib"; Include "Replace";
[ Funz_princip; ClearScreen(); ! pulisce lo schermo Domanda(); print "^Premi un tasto per uscire^"; KeyCharPrimitive(); ! legge un carattere dalla tastiera ];
[ Domanda x count; for (count=0: count<5: count++) { print "^", count , "^"; print "Ogni quanti anni compare la cometa di Halley? "; x = GetNumber(2); if (x == 76) { print "La risposta @`e esatta!!!^"; break; } else print "Spiacente, la risposta non @`e esatta...^"; } ];
[ Initialise; Funz_princip(); quit; ! fine del programma ];
Include "Io"; Include "ItalianG";

il risultato è esattamente identico a quello di prima, solo questa volta abbiamo usato l’istruzione break al posto di count=5. Un altro tipico utilizzo di questa istruzione si ha quando abbiamo a che fare con un ciclo infinito:

! Esempio sull’utilizzo del ciclo FOR – versione 3

Include "Parser"; Include "VerbLib"; Include "Replace";
[ Funz_princip; ClearScreen(); ! pulisce lo schermo Domanda(); print "^Premi un tasto per uscire^"; KeyCharPrimitive(); ! legge un carattere dalla tastiera ];
[ Domanda x; for ( : : ) { print "Ogni quanti anni compare la cometa di Halley? "; x = GetNumber(2); if (x == 76) { print "La risposta @`e esatta!!!^"; break; } else print "Spiacente, la risposta non @`e esatta...^"; } ];
[ Initialise; Funz_princip(); quit; ! fine del programma ];
Include "Io"; Include "ItalianG";

In questo esempio, il computer continua a ripetere la domanda fino a quando l’utente non dà la risposta giusta. Il "merito" di tutto questo è dato dal ciclo for definito senza condizioni tra le sue parentesi (for ( : : )).

Ecco ora un altro esempio che utilizza invece l’istruzione continue:

! Esempio che utilizza l’istruzione continue

Include "Parser"; Include "VerbLib"; Include "Replace";
[ Funz_princip k; ClearScreen(); ! pulisce lo schermo for (k=1: k<=10: k++) { if (k == 5) { k = 8; continue; } print k, " "; } print "^Premi un tasto per uscire^"; KeyCharPrimitive(); ! legge un carattere dalla tastiera ];
[ Initialise; Funz_princip(); quit; ! fine del programma ];
Include "ItalianG";

quando la variabile k è uguale a 5, le viene assegnato il valore 8; il ciclo continua, saltando però i numeri 5, 6 e 7 per k == 5. Il risultato in output (quello che appare sul video) è: 1 2 3 4 9 10[1].

Note[modifica]

  1. Cliccate qui per scaricare i listati di questi esercizi (i file 3.10_1.inf, 3.10_2.inf, 3.10_3.inf e 3.10_4.inf).