Inform e Glulx/Le basi di Inform/If (condition) then... else...
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))
➨ restituiscetrue
(la condizione è cioè soddisfatta) se il valore contenuto nella variabilea
è maggiore di 5 e se il valore contenuto nella variabileb
è minore di 10;||
detto anche "OR
" ➨ es:if ((a > 5) || (b < 10))
➨ restituiscetrue
se il valore contenuto nella variabilea
è maggiore di 5 oppure se il valore contenuto nella variabileb
è 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))
➨ restituiscetrue
se il valore contenuto nella variabilea
è minore di 5 (la condizione viene cioè negata e di conseguenza invertita).
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 | modifica sorgente]