{"id":5499,"date":"2023-11-20T16:24:15","date_gmt":"2023-11-20T15:24:15","guid":{"rendered":"https:\/\/msxitalia.org\/?p=5499"},"modified":"2023-11-20T16:24:40","modified_gmt":"2023-11-20T15:24:40","slug":"msx-basic-lezione-12","status":"publish","type":"post","link":"https:\/\/msxitalia.org\/en\/msx-basic-lezione-12\/","title":{"rendered":"MSX BASIC \u2013 lesson 12"},"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=\"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 12)<\/h1>\n<h2 style=\"text-align: center;\">LE MATRICI. I COMANDI DIM\/ERASE e LE FUNZIONI CLEAR\/FRE<\/h2>\n<p>\u00c8 molto scomodo quando dobbiamo fare un programma che faccia uso di tante variabili che verranno usate diverse volte. Pensate ad una sequenza di costanti che vengono richiamati da diversi punti del programma o un archivio con nomi, indirizzi, ecc. Prendiamo come esempio il primo argomento menzionato, le costanti e facciamo finta che il nostro programma ne utilizzer\u00e0 20, perci\u00f2 ci toccher\u00e0 crearle. Visto che queste variabili avranno la stessa funzionalit\u00e0, per crearle potremmo usare una variabile che chiameremo C, seguita da un numero. Ad esempio:<br \/>\nC1,C2, C3, C4, e cos\u00ec via. Per\u00f2 sappiamo che il BASIC MSX memorizza solo i primi 2 caratteri delle variabili, perci\u00f2 visto che le variabili dovranno essere 20, usando il metodo descritto sopra, ci consente di utilizzare fino alla variabile C9 perch\u00e9 la C10 sar\u00e0 &#8216;vista&#8217; dal Basic come C1 ed andr\u00e0 a memorizzare il dato su quell&#8217;ultima, cancellando quello precedente. Perci\u00f2 per proseguire dobbiamo usare un&#8217;altra lettera. Pensate che casino. Ma fortunatamente c&#8217;\u00e8 la soluzione a tutto questo. Questa si chiama ARRAY O MATRICI. Le matrici vengono create quasi sempre all&#8217;inizio del programma, essi riservano dei cassetti nella memoria dove verranno memorizzati tutti i dati. Siamo noi a dire quanto di questi assetti vogliamo riservare, usando il comando DIM. Facciamo l&#8217;esempio di sopra: DIM C(19). Ho messo 19 perch\u00e9 il BASIC MSX comincia a contare da 0. Questo vale anche per le variabili alfanumeriche. Per continuare, sapendo gi\u00e0 i dati, visto che sono costanti, possiamo caricarli in una funzione DATA e richiamarli con un ciclo FOR\/NEXT.<br \/>\nFaccio un piccolo programma d&#8217;esempio.<\/p>\n<pre>10 DIM C(19)\r\n20 FOR I=0 TO 19:READ C\r\n30 C(I)=C: NEXT I\r\n40 DATA ..........<\/pre>\n<p>Possiamo anche creare matrici a 2 dimensioni, tridimensionali e ancora pi\u00f9 grandi, ma visto la poca memoria del nostro MSX sar\u00e0 proibitivo usare matrici troppo grandi, la memoria si esaurirebbe molto velocemente. Per creare una matrice a 2 dimensioni basta aggiungere un secondo dato seguito da virgola: DIM C(19,3), cos\u00ec facendo abbiamo riservato 80 (20X4) cassettini in memoria. Mentre per una a tre dimensioni, sar\u00e0: DIM C(19,3,2). Questa volta saranno ben 240 (20x4x3). La memoria in byte che occupano i cosiddetti cassettini (\u00e8 un mio modo di chiamarli), varier\u00e0 assecondo della variabile memorizzata. Se dobbiamo utilizzare una matrice che non superi il 10 cio\u00e8 gli undici inserimenti, non \u00e8 obbligatorio inizializzarla con il comando DIM, anche se questa \u00e8 bidimensionale o superiori. Non possiamo dimensionare una variabile 2 volte, se ci\u00f2 avviene verr\u00e0 segnalato come errore, almeno che la stessa non sia stata eliminata con il comando che spiegher\u00f2 di seguito.<\/p>\n<p>Dopo aver creato una matrice e averla utilizzata fino ad un certo punto del nostro programma, sappiamo che d&#8217;ora in avanti non sar\u00e0 pi\u00f9 necessaria oppure alcuni dati non saranno pi\u00f9 utili. Possiamo eliminarla, liberando spazio in memoria, usando il comando ERASE. Quest&#8217;ultima verr\u00e0 cancellata insieme a tutti i suoi dati. Nel caso del secondo argomento menzionato sopra, dimensioneremo di nuovo la variabile con i parametri corretti e inseriremo di nuovo i dati che utilizzeremo. Dopo il comando ERASE si dovr\u00e0 inserire solo il nome della variabile senza il suo dimensionamento. La sintassi corretta \u00e8: ERASE Variabile,[Variabile],[Variabile] &#8230;&#8230;<\/p>\n<p>CLEAR<br \/>\nAzzera tutte le variabili, anche quelle negli array, chiude i file ed elimina le funzioni create con DEF. Modifica lo spazio riservato alle stringhe, per default \u00e8 200 (caratteri). Imposta il massimo indirizzo che possa essere usato dal Basic MSX. Pu\u00f2 essere usato senza argomenti per fare pulizia nella memoria.<\/p>\n<\/div>\n<div class=\"xdj266r x11i5rnm xat24cr x1mh8g0r x1vvkbs x126k92a\">Sintassi: CLEAR [DimensioneMaxStringhe],[IndirizzoMax]<\/div>\n<div class=\"xdj266r x11i5rnm xat24cr x1mh8g0r x1vvkbs x126k92a\">FRE<br \/>\nQuesta funzione ci dice quanta memoria libera \u00e8 disponibile nel Basic. Possiamo anche sapere lo spazio libero riservato alle stringhe. Per sapere quanta memoria libera abbiamo ancora disponibile, basta aggiungere un numero dentro le parentesi tonde: PRINT FRE(0), per le stringhe bastano 2 virgolette: PRINT FRE(&#8220;&#8221;). Gli argomenti della funzione sono fittizi, la cosa importante \u00e8 usare un numero per la prima definizione e una stringa per la seconda. Se vogliamo, possiamo inserirla anche dentro una variabile: A = FRE(0)<br \/>\nSintassi: FRE(0) o FRE(&#8220;&#8221;)<\/div>\n<div><\/div>\n<div class=\"xdj266r x11i5rnm xat24cr x1mh8g0r x1vvkbs x126k92a\">Come la volta scorsa per riassumere il tutto, mostrer\u00f2 il programma fatto la puntata precedente, modificato con le nuove funzioni.<\/div>\n<div><\/div>\n<pre class=\"xdj266r x11i5rnm xat24cr x1mh8g0r x1vvkbs x126k92a\">10 CLEAR(2000):DEFINT A-Z: SCREEN 0: DIM M$(50,2):CN=0\r\n20 CLS:LOCATE 15,1: PRINT \"M E N U\": GOSUB 100\r\n30 S$=INKEY$: IF S$=\"\" THEN 30\r\n40 IF S$&lt;\"1\" OR S$&gt;\"4\" THEN 30\r\n50 ON VAL(S$) GOSUB 200,300,400,500\r\n60 GOTO 20\r\n100 LOCATE 1,4 : PRINT\"1 - INSERIMENTO DATI\"\r\n110 LOCATE 1,8 : PRINT\"2 - MODIFICA DATI\"\r\n120 LOCATE 1,12: PRINT\"3 - VISUALIZZA DATI\"\r\n130 LOCATE 1,16: PRINT\"4 - USCITA PROGRAMMA\"\r\n140 RETURN\r\n200 IF FRE(\"\")&lt;50 OR CN=50 THEN PRINT \"ATTENZIONE !! Non si possono fare pi\u00f9 inserimenti\": FOR R=0 TO 2000:NEXT R: RETURN ELSE CN=CN+1\r\n205 CLS: LOCATE 12,0: PRINT \"INSERIMENTO\"\r\n210 LOCATE 1,4: LOCATE 1,4:INPUT \"NOME\";M$(CN,0)\r\n220 LOCATE 1,8: INPUT \"INDIRIZZO\";M$(CN,1)\r\n230 LOCATE 1,12:INPUT \"TELEFONO\"; M$(CN,2)\r\n240 LOCATE 1,18: PRINT \"CORRETTO (S\/N)?\"\r\n250 S$=INKEY$: IF S$=\"\" THEN 250\r\n260 IF S$=\"s\" OR S$=\"S\" THEN RETURN\r\n270 IF S$=\"N\" OR S$=\"N\" THEN 205 ELSE 250\r\n300 CLS:LOCATE 15,0: PRINT \"MODIFICA\"\r\n303 INPUT \"INSERIRE IL NOME DA RICERCARE\";N$\r\n306 FOR I=1 TO CN:IF N$=M$(I,0) THEN 310\r\n308 NEXT: PRINT \"Nome non trovato\":FOR R=0 TO 2000:NEXT: RETURN\r\n310 LOCATE 0,4:INPUT \"NOME(Confermare per non cambiare)\";N1$\r\n320 IF N1$=\"\" THEN LOCATE 1,29:PRINT M$(I,0) ELSE M$(I,0)=N1$330 LOCATE 0,8: INPUT \"INDIRIZZO(Confermare per non cambiare)\";I$\r\n340 IF I$=\"\" THEN LOCATE 0,9:PRINT M$(I,1) ELSE M$(I,1)=I$\r\n350 T$=M$(I,2):LOCATE 0,12:INPUT \"TELEFONO(Confermare per non cambiare)\";T$\r\n360 IF T$=\"\" THEN LOCATE 0,13:PRINT M$(I,2) ELSE M$(I,2)=T$\r\n370 CLS:RETURN\r\n400 CLS:LOCATE 10,0: PRINT \"VISUALIZZAZIONE\"\r\n410 FOR I=1 TO CN\r\n420 PRINT \"NOME:\"M$(I,0);TAB(20);\"INDIR.\";M$(I,1):PRINT\"TELEFONO:\";M$(I,2)\r\n430 IF IMOD10=0 THEN GOSUB 450\r\n440 NEXT: GOSUB 450: RETURN\r\n450 PRINT:PRINT \"Premere spazio per continuare\"\r\n460 IF INKEY$=\" \" THEN CLS: RETURN ELSE 460\r\n500 CLS:END<\/pre>\n<div><\/div>\n<div class=\"xdj266r x11i5rnm xat24cr x1mh8g0r x1vvkbs x126k92a\">Linea 10: Aumentato la memoria stringhe con CLEAR, creato una matrice bidimensionale per 50 inserimenti e la variabile CN che ci servir\u00e0 da contatore.<br \/>\nLinea 200: Faccio fare un controllo, nel sottoprogramma Inserimenti, per vedere se c&#8217;\u00e8 ancora spazio nella memoria stringhe con la funzione FRE oppure se ha raggiunto i 50 inserimenti.<br \/>\nNel resto del programma sostituite tutte le variabili normali con le matrici. Per le ricerche, visto che non ancora parlato delle funzioni che lavorano con le stringhe, ho lasciato quasi tutto com&#8217;era. Ma verr\u00e0 ripreso a tempo debito.<br \/>\nUn&#8217;altra grossa pecca di questo programma \u00e8 che quando lo chiuderemo, tutti i dati saranno persi. Ma anche a questo c&#8217;\u00e8 un rimedio che spiegher\u00f2 quando toccher\u00f2 l&#8217;argomento dei FILES.<\/div>\n<div class=\"xdj266r x11i5rnm xat24cr x1mh8g0r x1vvkbs x126k92a\">Se qualcosa non vi \u00e8 chiara, scrivete, fate tutte le domande che volete. Inserite il mio nome nei commenti, visto che l&#8217;articolo viene pubblicato dall&#8217;associazione e purtroppo non riesco a vedere tutto.<\/div>\n<div><\/div>\n<div class=\"xdj266r x11i5rnm xat24cr x1mh8g0r x1vvkbs x126k92a\">Grazie e alla prossima.<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>RUBRICA &#8220;MSX BASIC&#8221; a cura di Orazio Cacciola (parte 12) LE MATRICI. I COMANDI DIM\/ERASE e LE FUNZIONI CLEAR\/FRE \u00c8 molto scomodo quando dobbiamo fare un programma che faccia uso di tante variabili che verranno usate diverse volte. Pensate ad una sequenza di costanti che vengono richiamati da diversi punti del programma o un archivio [&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-5499","post","type-post","status-publish","format-standard","hentry","category-msx-basic"],"_links":{"self":[{"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/posts\/5499","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=5499"}],"version-history":[{"count":3,"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/posts\/5499\/revisions"}],"predecessor-version":[{"id":5502,"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/posts\/5499\/revisions\/5502"}],"wp:attachment":[{"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/media?parent=5499"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/categories?post=5499"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/tags?post=5499"},{"taxonomy":"dipi_cpt_category","embeddable":true,"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/dipi_cpt_category?post=5499"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}