MSX BASIC – lezione 8

da | Nov 20, 2023 | MSX BASIC | 0 commenti

RUBRICA “MSX BASIC” a cura di Orazio Cacciola (parte 8)

La Funzione IF/THEN/ELSE

Un caro saluto a tutti. Eccoci di nuovo qui per continuare la spiegazione sui vari comandi e funzioni del nostro Basic MSX.
Come ho scritto sul titolo, oggi parlerò di una delle più importanti funzioni del nostro ben amato MSX: IF/THEN/ELSE. È fondamentale nei nostri programmi ed è come il cacio sui maccheroni (risata). Sicuramente chi ha avuto sotto mano una rivista con dei listati si sarà accorto che è sempre presente. Sono pochissimi i casi dove non viene utilizzata.

IF/THEN/ELSE viene usata quando il nostro MSX deve decidere il percorso da fare su due o più opzioni. Possiamo dire che è una funzione a condizioni.
Essa può essere semplice o complessa, cioè più sono gli argomenti che dovrà controllare più diventa complessa.
Faccio un esempio molto semplice per fare capire il modo d’uso:

10 SCREEN 0:CLS: A=0
20 A=A+1: PRINT A
30 IF A=10 THEN PRINT "Conteggio terminato":END ELSE 20

Sulla linea 10 oltre aver impostato lo schermo come testo e cancellato tutto con CLS (é un comando che ripulisce lo schermo), ho inizializzato la variabile A.
Sulla riga 20 aggiungo 1 alla variabile e la stampo sullo schermo.
Sulla 30, faccio controllare se il valore della variabile A è uguale a 10. Se questo è vero esegue il THEN, stampando la frase “Conteggio terminato” e chiude il programma con END (Comando che serve a terminare il programma). Se invece è falsa esegue l’istruzione ELSE, che manda l’esecuzione alla riga precedente, in poche parole, ripeterà il ciclo finché la condizione non sarà vera. Non è un obbligo usare la ELSE, può essere anche omessa, infatti la useremo quando, nella nostra linea IF/THEN, dovremo per forza eseguire una delle 2 soluzioni.

Sintassi: IF <espressione> THEN espressione [ELSE <espressione>]
Espressione può essere una variabile sia numerica che alfanumerica, o un numero di riga dove rimandare il programma. Può anche essere il calcolo di 2 o più valori, il controllo di 2 stringhe, anche con espressioni logiche e di relazione.
Ricordiamoci che i confronti devono essere variabili o costanti dello stesso tipo, non posso fare un controllo tra una variabile numerica e l’altra a stringa, l’MSX segnalerebbe un messaggio d’errore.
Facciamo un altro esempio con un formato più complesso, dove userò quasi tutti gli argomenti che ho menzionato sopra.
Vogliamo, che il nostro MSX, inserendo un numero da tastiera, ci dica come catalogarlo. Di seguito spiegherò riga per riga.

10 SCREEN 0: CLS
20 INPUT "Inserire un numero,(Max 500)";N$
30 N=VAL(N$)
40 IF N$<"0" OR N$>"9" OR N>500 THEN 20
50 IF N MOD 2=0 THEN PRINT "E' un numero pari" ELSE PRINT "E' un numero dispari"
60 IF N<10 THEN PRINT "E' un numero che rientra nelle unità" ELSE IF N>9 AND N<
100 THEN PRINT "Numero che rientra nelle decine" ELSE IF N>99 then PRINT "Il
numero rientra nelle centinaia"
70 IF (N>99 AND N<150) OR (N>199 AND N<250) OR (N>299 AND N<349) OR (N>399 AND N<450) THEN PRINT "Il numero rientra nella prima metà delle centinaia"
ELSE IF N>=0 AND N<50 PRINT "Il numero rientra nella prima meta' delle decine"
ELSE "Seconda metà"
80 INPUT "Vuoi continuare (S/N)";R$
90 IF R$="S" OR R$="s" THEN 10 ELSE IF R$="N" OR R$="n" THEN END ELSE 80

La riga 10 già sapete cosa fa. La 20 aspetta un inserimento da tastiera con la funzione INPUT (Non ho ancora parlato di questa, ma lo farò nelle prossime puntate).
La 30, crea la variabile numerica N da N$, usando la funzione VAL. La 40 fa 3 controlli, per il proseguimento del programma dovranno essere tutte false se no ritornerà alla linea 20 chiedendo di inserire nuovamente il numero.
Nel primo e nel secondo, controlla il primo carattere della variabile N$ che non sia un numero (il controllo viene effettuato con il codice ASCII del carattere, questo verrà spiegato in seguito) e il terzo che sia superiore a 500.
La 50 controlla con la funzione MOD il resto di N, difatti se questo è 0 stampa la prima se no quella dopo la ELSE.
La 60 controlla dove catalogare il numero; unità, decine o centinaia. Infatti farà il controllo con gli operatori di relazione, stampando l’opzione vera.
La 70 è più complessa. Come vedete ho usato le parentesi tonde. Queste valgono come le operazioni matematiche, cioè hanno priorità su tutto. Perciò verranno
eseguite per prime. Controllerà prima tutte le AND (visto che sono dentro le parentesi), se una di queste è vera, visto che il secondo controllo è con OR, stamperà la dicitura dopo la PRINT. Se invece tutte le AND sono false passerà alla seconda IF che controllerà se N rientra nei limiti specificati, se anche questa risulterà falsa stamperà l’ultima ELSE. Come avete visto, ho messo più IF in una linea di programma come ho fatto nella linea precedente, questo è fattibile.
Potete mettere tutte le IF che volete basta non superare i 255 caratteri per linea.
Ricordiamoci che dopo la IF viene sempre la ELSE e se una dei 2 risulterà vera, salterà direttamente linea successiva evitando di controllare tutto il resto.
La linea 80, un altro inserimento da testiera. Stavolta la richiesta è specifica, solo 2 caratteri.
La 90 controlla se sono stati inseriti i caratteri richiesti. Il controllo viene fatto sulle lettere maiuscole e minuscole. Se una delle 2 risulterà vera andrà
alla linea programma specificata o terminerà il programma altrimenti se abbiamo digitato qualcosa di diverso, ripeterà la domanda.

Ci sono tanti altri utilizzi per usare la IF/THEN, ma questi si impareranno quando si avrà la padronanza del linguaggio, anzi sarete voi stessi a creare algoritmi sempre più complessi per i vostri lunghi programmi.

Grazie a tutti e alla prossima

0 commenti

Invia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

LEZIONE 26 – INTERVAL ON, RND ED ALTRI

LEZIONE 26 – INTERVAL ON, RND ED ALTRI

Buongiorno a tutti, In questa puntata parlerò di un interrupt importante, specialmente per i giochi, quando vogliamo far apparire un nemico all'improvviso o un oggetto utile, ma anche per creare un cronometro o un orologio e tante altre cose. Il COMANDO sfrutta il...

it_ITIT_IT