{"id":5492,"date":"2023-11-20T15:59:35","date_gmt":"2023-11-20T14:59:35","guid":{"rendered":"https:\/\/msxitalia.org\/?p=5492"},"modified":"2023-11-20T15:59:35","modified_gmt":"2023-11-20T14:59:35","slug":"msx-basic-lezione-10","status":"publish","type":"post","link":"https:\/\/msxitalia.org\/en\/msx-basic-lezione-10\/","title":{"rendered":"MSX BASIC \u2013 lesson 10"},"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 10)<\/h1>\n<h2 style=\"text-align: center;\">FOR\/NEXT, READ, DATA, RESTORE<\/h2>\n<\/div>\n<p>Eccoci di nuovo qui a spiegare nuove funzioni del nostro ben amato MSX Basic.<br \/>\nIn questa puntata parler\u00f2&#8217; di un gruppo di funzioni che hanno un ruolo fondamentale nei nostri programmi. \u00c8 meglio conoscerli contemporaneamente, perch\u00e9&#8217; lavorano quasi sempre insieme, cio\u00e8&#8217; hanno bisogno una dell&#8217;altra.<\/p>\n<p>FOR\/NEXT<br \/>\nVi ricordate che in una delle puntate precedenti, in uno dei miei programmini, ho inserito un conteggio che terminava con verificarsi di una condizione (Lezione IF\/THEN\/ELSE). Questa funzione fa proprio questo, unifica tutte quelle istruzioni in una funzione o meglio un gruppo, ma come se fossero solo una perch\u00e9 devono &#8220;lavorare&#8221; per forza insieme. Essa esegue un ciclo con un inizio ed una fine, solo quando questo sara&#8217; finito salter\u00e0&#8217; fuori. Puo&#8217; eseguire un conteggio di numeri crescenti o decrescenti ed anche con passi diversi: FOR I=1 TO 10: PRINT I: NEXT I. La FOR e&#8217; il punto di partenza della variabile I che inizia da 1 e termina (TO) a 10. Esegue la stampa della I per 10 volte incrementando di 1. NEXT e&#8217; la fine, controlla la variabile se e&#8217; arrivata a 10 se no rimander\u00e0&#8217; l&#8217;esecuzione al FOR. Come ho detto sopra, possiamo cambiare il passo dell&#8217;incremento o decremento a nostro piacimento usando un altro pezzo del gruppo: STEP: FOR I=1 TO 10 STEP 2: PRINT I: NEXT I. Questa volta stamper\u00e0&#8217; 5 volte la variabile contando 2 numeri alla volta. Possiamo fare al contrario: FOR I=10 TO 1 STEP-1: PRINT I: NEXT I. Se vogliamo fare come sopra cio\u00e8 diminuire 2 numeri per volta, basta cambiare; STEP-1 a STEP-2. Devo puntualizzare che mentre per i numeri crescenti se usiamo l&#8217;incremento di un numero non e&#8217; necessario usare la STEP (lo fa per default), per quelli decrescenti si, altrimenti il programma rimarr\u00e0&#8217; inchiodato in un ciclo senza fine. Se il programma incontra un&#8217;altra FOR senza avere letto una NEXT lo terra&#8217; in memoria ma se incontrer\u00e0&#8217; 2 NEXT senza FOR segnaler\u00e0 l&#8217;errore. Si possono usare cicli dentro altri cicli, i cosiddetti cicli nidificati. Di seguito faro&#8217; un esempio con un miniprogramma di un ciclo nidificato semplice, solo con 2 funzioni FOR\/NEXT:<\/p>\n<pre>10 FOR I=0 TO 9\r\n20 FOR J=0 TO .9 STEP .1\r\n30 PRINT I;J;\" \";\r\n40 NEXT J: PRINT: NEXT I\r\n50 PRINT I<\/pre>\n<p>Stamper\u00e0&#8217; un contatore da 1 a 10 usando i decimali. Per ogni riga 10 numeri:1.0 1.1 1.2 fino 1.9 e poi nella riga successiva riprender\u00e0&#8217; con 2.0 eccetera. Il ciclo finir\u00e0&#8217; a 9.9, ma se proverete il programma vi accorgerete che la PRINT della linea 50 stamper\u00e0&#8217; il numero 10. Come mai avviene questo visto che la variabile I nel ciclo termina con 9? \u00c8 presto detto. \u00c8 la NEXT che aggiunge l&#8217;incremento e quando questa arriver\u00e0&#8217; all&#8217;ultimo conteggio, nel nostro caso il 9, salter\u00e0&#8217; all&#8217;istruzione successiva, conteggiando ancora un incremento.\u00a0 Perci\u00f2&#8217;, se si deve usare la variabile del ciclo nel proseguo del nostro programma, ricordate che sar\u00e0 maggiore o minore, asseconda i casi, del risultato di fine ciclo.<br \/>\nUn&#8217;altra cosa importante; quando si usano i cicli nidificati, ricordate di chiudere per primo sempre l&#8217;ultimo che avete creato.<br \/>\nSintassi: FOR Variabile = Numero iniziale TO Numero finale [STEP Numero]:<br \/>\nIstruzioni: NEXT [Variabile]. I numeri posso essere anche variabili.<\/p>\n<p>READ<\/p><\/div>\n<div class=\"xu06os2 x1ok221b\">Legge i dati dalla funzione DATA, possono essere numerici o alfanumerici. Usa il metodo sequenziale, una volta letto un numero non potr\u00e0&#8217; rileggerlo, non importa dove si trova, inizio o fine programma, esso sa sempre che dovr\u00e0&#8217; leggere quello dopo. READ segnaler\u00e0&#8217; errore se non trover\u00e0&#8217; dati da leggere.<br \/>\nSintassi: READ Variabile, variabile, &#8230;.<\/div>\n<div class=\"xu06os2 x1ok221b\">\nDATA<br \/>\nQuesta funzione \u00e8 come una ROM all&#8217;interno del Basic, I dati che si trovano dentro di essa possono essere solo letti. Questo \u00e8 permesso solo ed esclusivamente dalla funzione READ. Ogni dato deve essere separato da una virgola. Per tutti gli altri comandi e funzioni, viene trattata come una riga di commento. Puo&#8217; contenere numeri e stringhe. Possono essere anche mischiati, tutta sta a come e&#8217; stata impostata la funzione di lettura, READ.<br \/>\nEsempio:<br \/>\n10 DATA 1,MSX,3,NUMERO<br \/>\n20 READ A,A$,B,B$<br \/>\n30 PRINT A$;B;B$;A<br \/>\nSintassi: DATA Argomento, Argomento, &#8230;.<\/div>\n<div class=\"xu06os2 x1ok221b\">\nRESTORE<br \/>\n\u00c8 un comando che resetta la memoria dei dati letti con READ e DATA. Se viene usato senza argomenti, canceller\u00e0 tutto e inizier\u00e0&#8217; dalla prima linea DATA del programma,<br \/>\nse invece vogliamo far rileggere da un certo punto del nostro programma basta aggiungere il numero di linea, azzerer\u00e0&#8217; da quel punto in poi.<br \/>\nSintassi: RESTORE [Numero Linea]<br \/>\nPer fare capire meglio tutto quello che ho detto, ho creato un programma per riassumere tutte le funzioni spiegate in questa lezione. Sentitevi liberi di fare delle domande nei commenti, se non avete capito qualcosa. Sono a vostra completa disposizione.<\/div>\n<pre class=\"xu06os2 x1ok221b\">\r\n10 REM ** Conoscere i numeri Primi **\r\n10 SCREEN 0:CLS:DEFINT A-Z\r\n20 RESTORE 140:READ C$: READ E$: RESTORE\r\n30 INPUT \"Inserire un numero primo (MAX 200)\";N\r\n40 IF N&lt;1 OR N&gt;200 THEN 20\r\n50 FOR I=1 TO 45\r\n60 READ P: IF N=P THEN PRINT N; C$: END\r\n70 NEXT I: PRINT N; E$\r\n80 INPUT \"Vuoi Riprovare\";D$\r\n90 IF D$=\"s\" OR D$=\"S\" THEN RESTORE 110: GOTO 30\r\n100 IF D$=\"N\" OR D$=\"n\" THEN CLS: END ELSE 80\r\n110 DATA 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97\r\n120 DATA 101,103,107,109,113,127,131,137,139,149,151,157,163,173,179,181,191\r\n130 DATA 193,197,199\r\n140 DATA \"E' UN NUMERO PRIMO\",\"NON E' UN NUMERO PRIMO\"<\/pre>\n<div><\/div>\n<div class=\"xu06os2 x1ok221b\">Alla prossima, grazie a tutti.<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>RUBRICA &#8220;MSX BASIC&#8221; a cura di Orazio Cacciola (parte 10) FOR\/NEXT, READ, DATA, RESTORE Eccoci di nuovo qui a spiegare nuove funzioni del nostro ben amato MSX Basic. In questa puntata parler\u00f2&#8217; di un gruppo di funzioni che hanno un ruolo fondamentale nei nostri programmi. \u00c8 meglio conoscerli contemporaneamente, perch\u00e9&#8217; lavorano quasi sempre insieme, cio\u00e8&#8217; [&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-5492","post","type-post","status-publish","format-standard","hentry","category-msx-basic"],"_links":{"self":[{"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/posts\/5492","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=5492"}],"version-history":[{"count":2,"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/posts\/5492\/revisions"}],"predecessor-version":[{"id":5494,"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/posts\/5492\/revisions\/5494"}],"wp:attachment":[{"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/media?parent=5492"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/categories?post=5492"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/tags?post=5492"},{"taxonomy":"dipi_cpt_category","embeddable":true,"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/dipi_cpt_category?post=5492"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}