MSX BASIC – lezione 10

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

RUBRICA “MSX BASIC” 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ò’ di un gruppo di funzioni che hanno un ruolo fondamentale nei nostri programmi. È meglio conoscerli contemporaneamente, perché’ lavorano quasi sempre insieme, cioè’ hanno bisogno una dell’altra.

FOR/NEXT
Vi 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é devono “lavorare” per forza insieme. Essa esegue un ciclo con un inizio ed una fine, solo quando questo sara’ finito salterà’ fuori. Puo’ 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’ 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’ la fine, controlla la variabile se e’ arrivata a 10 se no rimanderà’ l’esecuzione al FOR. Come ho detto sopra, possiamo cambiare il passo dell’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à’ 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è diminuire 2 numeri per volta, basta cambiare; STEP-1 a STEP-2. Devo puntualizzare che mentre per i numeri crescenti se usiamo l’incremento di un numero non e’ necessario usare la STEP (lo fa per default), per quelli decrescenti si, altrimenti il programma rimarrà’ inchiodato in un ciclo senza fine. Se il programma incontra un’altra FOR senza avere letto una NEXT lo terra’ in memoria ma se incontrerà’ 2 NEXT senza FOR segnalerà l’errore. Si possono usare cicli dentro altri cicli, i cosiddetti cicli nidificati. Di seguito faro’ un esempio con un miniprogramma di un ciclo nidificato semplice, solo con 2 funzioni FOR/NEXT:

10 FOR I=0 TO 9
20 FOR J=0 TO .9 STEP .1
30 PRINT I;J;" ";
40 NEXT J: PRINT: NEXT I
50 PRINT I

Stamperà’ 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à’ con 2.0 eccetera. Il ciclo finirà’ a 9.9, ma se proverete il programma vi accorgerete che la PRINT della linea 50 stamperà’ il numero 10. Come mai avviene questo visto che la variabile I nel ciclo termina con 9? È presto detto. È la NEXT che aggiunge l’incremento e quando questa arriverà’ all’ultimo conteggio, nel nostro caso il 9, salterà’ all’istruzione successiva, conteggiando ancora un incremento.  Perciò’, se si deve usare la variabile del ciclo nel proseguo del nostro programma, ricordate che sarà maggiore o minore, asseconda i casi, del risultato di fine ciclo.
Un’altra cosa importante; quando si usano i cicli nidificati, ricordate di chiudere per primo sempre l’ultimo che avete creato.
Sintassi: FOR Variabile = Numero iniziale TO Numero finale [STEP Numero]:
Istruzioni: NEXT [Variabile]. I numeri posso essere anche variabili.

READ

Legge i dati dalla funzione DATA, possono essere numerici o alfanumerici. Usa il metodo sequenziale, una volta letto un numero non potrà’ rileggerlo, non importa dove si trova, inizio o fine programma, esso sa sempre che dovrà’ leggere quello dopo. READ segnalerà’ errore se non troverà’ dati da leggere.
Sintassi: READ Variabile, variabile, ….
DATA
Questa funzione è come una ROM all’interno del Basic, I dati che si trovano dentro di essa possono essere solo letti. Questo è 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’ contenere numeri e stringhe. Possono essere anche mischiati, tutta sta a come e’ stata impostata la funzione di lettura, READ.
Esempio:
10 DATA 1,MSX,3,NUMERO
20 READ A,A$,B,B$
30 PRINT A$;B;B$;A
Sintassi: DATA Argomento, Argomento, ….
RESTORE
È un comando che resetta la memoria dei dati letti con READ e DATA. Se viene usato senza argomenti, cancellerà tutto e inizierà’ dalla prima linea DATA del programma,
se invece vogliamo far rileggere da un certo punto del nostro programma basta aggiungere il numero di linea, azzererà’ da quel punto in poi.
Sintassi: RESTORE [Numero Linea]
Per 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.
10 REM ** Conoscere i numeri Primi **
10 SCREEN 0:CLS:DEFINT A-Z
20 RESTORE 140:READ C$: READ E$: RESTORE
30 INPUT "Inserire un numero primo (MAX 200)";N
40 IF N<1 OR N>200 THEN 20
50 FOR I=1 TO 45
60 READ P: IF N=P THEN PRINT N; C$: END
70 NEXT I: PRINT N; E$
80 INPUT "Vuoi Riprovare";D$
90 IF D$="s" OR D$="S" THEN RESTORE 110: GOTO 30
100 IF D$="N" OR D$="n" THEN CLS: END ELSE 80
110 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
120 DATA 101,103,107,109,113,127,131,137,139,149,151,157,163,173,179,181,191
130 DATA 193,197,199
140 DATA "E' UN NUMERO PRIMO","NON E' UN NUMERO PRIMO"
Alla prossima, grazie a tutti.

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