Inform e Glulx/Le basi di Inform/If (condition) then... else...

Wikibooks, manuali e libri di testo liberi.
Jump to navigation Jump to search
Indice del libro

Nella stesura di un programma, le scelte sono quasi sempre d’obbligo, proprio come avviene in questo esempio:

! Esempio sull’utilizzo dell’istruzione IF THEN – 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; print "^Ogni quanti anni compare la cometa di Halley? "; x = GetNumber(2); if (x == 76) print "La risposta @`e esatta!!!^"; ];
[ Initialise; Funz_princip(); quit; ! fine del programma ];
Include "Io"; Include "ItalianG";

Tradotta in italiano, l’istruzione if (condition) then suona più o meno così: se (condizione) allora. In questo caso, se il numero introdotto dall’utente è proprio 76, allora il programma stampa a video "La risposta è esatta!!!", altrimenti prosegue senza visualizzare nulla.
Fate molta attenzione a non confondere l’operatore = con l’operatore ==; il primo, come già sapete da quanto visto finora, assegna un certo valore a una variabile, mentre il secondo verifica che un certo valore (in questo esempio 76) sia uguale a un altro (in questo caso il valore contenuto nella variabile x, ovvero il numero digitato dall’utente mediante l’istruzione Getnumber). Gli altri operatori sono:

  • (a ~= b)  ➨  a è diverso da b
  • (a > b)  ➨  a è maggiore di b
  • (a < b)  ➨  a è minore di b
  • (a >= b)  ➨  a è maggiore o uguale a b
  • (a <= b)  ➨  a è minore o uguale a b

È anche possibile usarli insieme, ma in questo caso bisogna utilizzare anche gli operatori logici, nell’ordine:

  • && detto anche "AND"  ➨  es: if ((a > 5) && (b < 10))  ➨  restituisce true (la condizione è cioè soddisfatta) se il valore contenuto nella variabile a è maggiore di 5 e se il valore contenuto nella variabile b è minore di 10;
  • || detto anche "OR"  ➨  es: if ((a > 5) || (b < 10))  ➨  restituisce true se il valore contenuto nella variabile a è maggiore di 5 oppure se il valore contenuto nella variabile b è minore di 10.
    Questo operatore non deve essere confuso con l’operatore (non logico) or che viene usato per testare più valori in una volta sola (ad es.: if (a == 2 or 3 or 4) print...);
  • ~~ detto anche "NOT"  ➨  es: if (~~ (a > 5))  ➨  restituisce true se il valore contenuto nella variabile a è minore di 5 (la condizione viene cioè negata e di conseguenza invertita).
Inform e Glulx-sp.gif

Così com’è, il nostro esempio stampa un messaggio nel caso in cui l’utente risponda correttamente alla domanda. E se invece sbaglia?
Non è un’idea così malvagia, quella di modificare il nostro programma in modo tale che stampi un messaggio anche nel caso di una risposta errata da parte dell’utente. Ecco una possibile soluzione:

! Esempio sull’utilizzo dell’istruzione IF THEN - 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; print "^Ogni quanti anni compare la cometa di Halley? "; x = GetNumber(2); if (x == 76) print "La risposta @`e esatta!!!^"; else print "Spiacente, la risposta non @`e esatta...^"; ];
[ Initialise; Funz_princip(); quit; ! fine del programma ];
Include "Io"; Include "ItalianG";

di nuovo c’è solo l’istruzione else, che in italiano significa altrimenti e viene usata solo insieme all’istruzione if-then. Ecco quello che accade: se il numero digitato dall’utente è uguale a 76 viene stampato il messaggio "La risposta è esatta!!!", mentre se è diverso da 76 viene stampato il messaggio "Spiacente, la risposta non è esatta..."[1].

Note[modifica]

  1. Cliccate qui per scaricare i listati di questi due esercizi (i file 3.08_1.inf e 3.08_2.inf).