{"id":5486,"date":"2023-11-20T15:42:41","date_gmt":"2023-11-20T14:42:41","guid":{"rendered":"https:\/\/msxitalia.org\/?p=5486"},"modified":"2023-11-20T15:42:41","modified_gmt":"2023-11-20T14:42:41","slug":"msx-basic-lezione-8","status":"publish","type":"post","link":"https:\/\/msxitalia.org\/en\/msx-basic-lezione-8\/","title":{"rendered":"MSX BASIC \u2013 lesson 8"},"content":{"rendered":"<div class=\"\" dir=\"auto\">\n<div id=\":r49d:\" class=\"x1iorvi4 x1pi30zi x1swvt13 xjkvuk6\" data-ad-comet-preview=\"message\" data-ad-preview=\"message\">\n<div class=\"x78zum5 xdt5ytf xz62fqu x16ldp7u\">\n<div class=\"xu06os2 x1ok221b\">\n<div class=\"xdj266r x11i5rnm xat24cr x1mh8g0r x1vvkbs x126k92a\">\n<h1 dir=\"auto\"><img decoding=\"async\" data-src=\"https:\/\/msxitalia.org\/wp-content\/uploads\/2023\/11\/Corso-Basic-MSX1-OC-300x225.jpg\" class=\"size-medium wp-image-5338 aligncenter lazyload\" src=\"data:image\/gif;base64,R0lGODlhAQABAIAAAAAAAP\/\/\/yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\" alt=\"\" width=\"300\" height=\"225\" \/><noscript><img decoding=\"async\" class=\"size-medium wp-image-5338 aligncenter\" src=\"https:\/\/msxitalia.org\/wp-content\/uploads\/2023\/11\/Corso-Basic-MSX1-OC-300x225.jpg\" alt=\"\" width=\"300\" height=\"225\"><\/noscript><\/h1>\n<h1 dir=\"auto\" style=\"text-align: center;\">RUBRICA &#8220;MSX BASIC&#8221; a cura di Orazio Cacciola (parte 8)<\/h1>\n<h2 style=\"text-align: center;\">La Funzione IF\/THEN\/ELSE<\/h2>\n<\/div>\n<p>Un caro saluto a tutti. Eccoci di nuovo qui per continuare la spiegazione sui vari comandi e funzioni del nostro Basic MSX.<br \/>\nCome ho scritto sul titolo, oggi parler\u00f2 di una delle pi\u00f9 importanti funzioni del nostro ben amato MSX: IF\/THEN\/ELSE. \u00c8 fondamentale nei nostri programmi ed \u00e8 come il cacio sui maccheroni (risata). Sicuramente chi ha avuto sotto mano una rivista con dei listati si sar\u00e0 accorto che \u00e8 sempre presente. Sono pochissimi i casi dove non viene utilizzata.<\/p>\n<p>IF\/THEN\/ELSE viene usata quando il nostro MSX deve decidere il percorso da fare su due o pi\u00f9 opzioni. Possiamo dire che \u00e8 una funzione a condizioni.<br \/>\nEssa pu\u00f2 essere semplice o complessa, cio\u00e8 pi\u00f9 sono gli argomenti che dovr\u00e0 controllare pi\u00f9 diventa complessa.<br \/>\nFaccio un esempio molto semplice per fare capire il modo d&#8217;uso:<\/p>\n<pre>10 SCREEN 0:CLS: A=0\r\n20 A=A+1: PRINT A\r\n30 IF A=10 THEN PRINT \"Conteggio terminato\":END ELSE 20<\/pre>\n<p>Sulla linea 10 oltre aver impostato lo schermo come testo e cancellato tutto con CLS (\u00e9 un comando che ripulisce lo schermo), ho inizializzato la variabile A.<br \/>\nSulla riga 20 aggiungo 1 alla variabile e la stampo sullo schermo.<br \/>\nSulla 30, faccio controllare se il valore della variabile A \u00e8 uguale a 10. Se questo \u00e8 vero esegue il THEN, stampando la frase &#8220;Conteggio terminato&#8221; e chiude il programma con END (Comando che serve a terminare il programma). Se invece \u00e8 falsa esegue l&#8217;istruzione ELSE, che manda l&#8217;esecuzione alla riga precedente, in poche parole, ripeter\u00e0 il ciclo finch\u00e9 la condizione non sar\u00e0 vera. Non \u00e8 un obbligo usare la ELSE, pu\u00f2 essere anche omessa, infatti la useremo quando, nella nostra linea IF\/THEN, dovremo per forza eseguire una delle 2 soluzioni.<\/p>\n<p>Sintassi: IF &lt;espressione&gt; THEN espressione [ELSE &lt;espressione&gt;]<br \/>\nEspressione pu\u00f2 essere una variabile sia numerica che alfanumerica, o un numero di riga dove rimandare il programma. Pu\u00f2 anche essere il calcolo di 2 o pi\u00f9 valori, il controllo di 2 stringhe, anche con espressioni logiche e di relazione.<br \/>\nRicordiamoci che i confronti devono essere variabili o costanti dello stesso tipo, non posso fare un controllo tra una variabile numerica e l&#8217;altra a stringa, l&#8217;MSX segnalerebbe un messaggio d&#8217;errore.<br \/>\nFacciamo un altro esempio con un formato pi\u00f9 complesso, dove user\u00f2 quasi tutti gli argomenti che ho menzionato sopra.<br \/>\nVogliamo, che il nostro MSX, inserendo un numero da tastiera, ci dica come catalogarlo. Di seguito spiegher\u00f2 riga per riga.<\/p>\n<pre>10 SCREEN 0: CLS\r\n20 INPUT \"Inserire un numero,(Max 500)\";N$\r\n30 N=VAL(N$)\r\n40 IF N$&lt;\"0\" OR N$&gt;\"9\" OR N&gt;500 THEN 20\r\n50 IF N MOD 2=0 THEN PRINT \"E' un numero pari\" ELSE PRINT \"E' un numero dispari\"\r\n60 IF N&lt;10 THEN PRINT \"E' un numero che rientra nelle unit\u00e0\" ELSE IF N&gt;9 AND N&lt;\r\n100 THEN PRINT \"Numero che rientra nelle decine\" ELSE IF N&gt;99 then PRINT \"Il\r\nnumero rientra nelle centinaia\"\r\n70 IF (N&gt;99 AND N&lt;150) OR (N&gt;199 AND N&lt;250) OR (N&gt;299 AND N&lt;349) OR (N&gt;399\u00a0AND N&lt;450) THEN PRINT \"Il numero rientra nella prima met\u00e0 delle centinaia\"\r\nELSE IF N&gt;=0 AND N&lt;50 PRINT \"Il numero rientra nella prima meta' delle decine\"\r\nELSE \"Seconda met\u00e0\"\r\n80 INPUT \"Vuoi continuare (S\/N)\";R$\r\n90 IF R$=\"S\" OR R$=\"s\" THEN 10 ELSE IF R$=\"N\" OR R$=\"n\" THEN END ELSE 80<\/pre>\n<p>La riga 10 gi\u00e0 sapete cosa fa. La 20 aspetta un inserimento da tastiera con la funzione INPUT (Non ho ancora parlato di questa, ma lo far\u00f2 nelle prossime puntate).<br \/>\nLa 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\u00e0 alla linea 20 chiedendo di inserire nuovamente il numero.<br \/>\nNel 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\u00e0 spiegato in seguito) e il terzo che sia superiore a 500.<br \/>\nLa 50 controlla con la funzione MOD il resto di N, difatti se questo \u00e8 0 stampa la prima se no quella dopo la ELSE.<br \/>\nLa 60 controlla dove catalogare il numero; unit\u00e0, decine o centinaia. Infatti far\u00e0 il controllo con gli operatori di relazione, stampando l&#8217;opzione vera.<br \/>\nLa 70 \u00e8 pi\u00f9 complessa. Come vedete ho usato le parentesi tonde. Queste valgono come le operazioni matematiche, cio\u00e8 hanno priorit\u00e0 su tutto. Perci\u00f2 verranno<br \/>\neseguite per prime. Controller\u00e0 prima tutte le AND (visto che sono dentro le parentesi), se una di queste \u00e8 vera, visto che il secondo controllo \u00e8 con OR, stamper\u00e0 la dicitura dopo la PRINT. Se invece tutte le AND sono false passer\u00e0 alla seconda IF che controller\u00e0 se N rientra nei limiti specificati, se anche questa risulter\u00e0 falsa stamper\u00e0 l&#8217;ultima ELSE. Come avete visto, ho messo pi\u00f9 IF in una linea di programma come ho fatto nella linea precedente, questo \u00e8 fattibile.<br \/>\nPotete mettere tutte le IF che volete basta non superare i 255 caratteri per linea.<br \/>\nRicordiamoci che dopo la IF viene sempre la ELSE e se una dei 2 risulter\u00e0 vera, salter\u00e0 direttamente linea successiva evitando di controllare tutto il resto.<br \/>\nLa linea 80, un altro inserimento da testiera. Stavolta la richiesta \u00e8 specifica, solo 2 caratteri.<br \/>\nLa 90 controlla se sono stati inseriti i caratteri richiesti. Il controllo viene fatto sulle lettere maiuscole e minuscole. Se una delle 2 risulter\u00e0 vera andr\u00e0<br \/>\nalla linea programma specificata o terminer\u00e0 il programma altrimenti se abbiamo digitato qualcosa di diverso, ripeter\u00e0 la domanda.<\/p>\n<p>Ci sono tanti altri utilizzi per usare la IF\/THEN, ma questi si impareranno quando si avr\u00e0 la padronanza del linguaggio, anzi sarete voi stessi a creare algoritmi sempre pi\u00f9 complessi per i vostri lunghi programmi.<\/p>\n<p>Grazie a tutti e alla prossima<\/p>\n<pre><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>RUBRICA &#8220;MSX BASIC&#8221; 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\u00f2 di una delle pi\u00f9 importanti funzioni del nostro ben amato MSX: IF\/THEN\/ELSE. \u00c8 [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_et_pb_use_builder":"","_et_pb_old_content":"","_et_gb_content_width":"","footnotes":""},"categories":[14],"tags":[],"dipi_cpt_category":[],"class_list":["post-5486","post","type-post","status-publish","format-standard","hentry","category-msx-basic"],"_links":{"self":[{"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/posts\/5486","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/comments?post=5486"}],"version-history":[{"count":2,"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/posts\/5486\/revisions"}],"predecessor-version":[{"id":5488,"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/posts\/5486\/revisions\/5488"}],"wp:attachment":[{"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/media?parent=5486"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/categories?post=5486"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/tags?post=5486"},{"taxonomy":"dipi_cpt_category","embeddable":true,"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/dipi_cpt_category?post=5486"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}