Benvenuti alla quarta puntata del videocorso sul linguaggio Basic. Oggi introduciamo i vettori, detti anche array, che sono delle strutture di dati. Vediamo anche il concetto di valore medio, minimo e massimo di una sequenza di numeri.
Non da ultimo, il programma è utile per monitorare il rendimento scolastico dei vostri figli e… insultarli automaticamente se i voti sono troppo bassi! Ovviamente potete modificare gli insulti con altri a vostro piacimento!
Il programma che realizziamo può essere eseguito sul QB64 ed anche su tantissimi Commodore differenti: sul Commodore 16, sul Commodore Vic20, sul Commodore 64, sul Commodore 128, ma anche sul PET, anche sugli emulatori (come il VICE e il CCS64) e potete eseguirlo anche sul vecchio GWBASIC che si trovava nel DOS dei PC.
Il QB64 (QuickBasic) consente di compilare il programma in Basic e di creare dei file eseguibili sotto Windows, Linux e MacOS.
I vettori (array)
Iniziamo quindi gli argomenti della quarta puntata del videocorso sul linguaggio Basic: studiamo i vettori (array). Potete immaginarli come una sequenza di elementi (le variabili), richiamabili da un indice intero.
Nel video, facciamo una prova con il Commodore 64. Bisogna innanzitutto definire il vettore. Si utilizza il comando DIM. I vettori possono essere di diverso tipo, iniziamo a definire un vettore di 3 stringhe.
Immettiamo la prima stringa all’indice 0, la seconda stringa all’indice 1 e, infine, la terza stringa all’indice 2.
Poi, proviamo a richiamare i singoli elementi del vettore.
Non è possibile richiamare elementi con indice superiore a quanto abbiamo dichiarato con il comando DIM: il computer visualizza un errore.
L’indice può anche essere una variabile. Assegnando, ad esempio, il valore 1 alla variabile I, possiamo richiamare l’elemento corrispondente del vettore. Lo stesso accade assegnando il valore 0 e il valore 2.
DIM A$(2) A$(0)="FORCHETTA" A$(1)="COLTELLO" A$(2)="CUCCHIAIO" I=1: PRINT A$(I)
Quando si dichiara il vettore con il comando DIM, non è possibile dichiararlo una seconda volta. Altri tipi di Basic supportano il ridimensionamento o la cancellazione dei vettori, ma il Commodore 64 non ha questi comandi.
Nel programma di esempio del videocorso sul linguaggio Basic, che studieremo tra poco, non usiamo vettori di tipo stringa, ma di tipo numerico a virgola mobile.
Videocorso sul linguaggio Basic, il programma di esempio
In fondo a questa pagina, potete trovare il programma di esempio di questa lezione. Se non avete le interfacce tipo SD2IEC, Kung Fu Flash, potete digitarlo.
Nelle prime tre righe di programma (la 10, la 20 e la 30) troviamo l’istruzione REM, utile per includere dei commenti. Abbiamo già analizzato questa istruzione nella prima puntata del corso.
Le righe 50 e 60 contengono le istruzioni PRINT e INPUT, ne abbiamo già parlato.
Relativamente a INPUT, già consente di scrivere a monitor la domanda da porre all’utente. Purtroppo, se la domanda supera la larghezza del monitor, l’istruzione INPUT non riesce ad immettere i dati correttamente.
Per questo divido la domanda, con un istruzione PRINT e poi la INPUT. Ovviamente, mi baso sulla larghezza del monitor più piccolo, quello del Commodore Vic20, che è di soli 22 caratteri.
Il computer chiede all’utente di indicare il numero dei voti di cui calcolare la media, il valore massimo ed il minimo. Il numero dei voti viene immesso nella variabile numerica NV.
L’istruzione 70 controlla, tramite IF… THEN, che la variabile sia nei limiti imposti al programma. Infatti, in questo programma, possiamo elaborare al massimo 20 voti. Inoltre, non è possibile indicare meno di 1 voto.
Quando il numero dei voti è fuori dai limiti, viene riformulata la domanda presente alla riga 50, aggiungendo “RI” prima della richiesta. Il computer scrive a monitor “RIDIGITA” al posto di “DIGITA”.
Abbiamo parlato delle istruzioni IF… THEN nella seconda puntata del corso.
La riga 80 specifica a monitor che il programma richiede l’inserimento dei voti dell’alunno.
Dimensionamento di un vettore
Finalmente arriviamo nel vivo di questa puntata del videocorso sul linguaggio Basic. Alla riga 90, definiamo il vettore V di variabili numeriche!
Viene creato un vettore di 20 elementi + 1 (l’elemento 0), che però non usiamo.
Dalla riga 100 alla riga 150 c’è un ciclo FOR CV … NEXT CV già visto nella puntata 3 del corso.
Il computer chiede, in sequenza, tutti i voti dell’alunno. Ogni voto è inserito all’indice CV del vettore V. Abbiamo già immesso, in precedenza, nella variabile NV, il numero dei voti che il programma chiede di digitare.
Anche qui c’è un controllo sui voti immessi. Qualora un voto immesso fosse inferiore a 0 o superiore a 10, il programma chiede di digitarlo nuovamente.
Inoltre, nella riga 140, si richiama la riga 400, che consente di scrivere, dopo ogni voto, un commento o un insulto, se il voto fosse negativo.
Abbiamo già parlato delle istruzioni GOSUB, RETURN, che consentono di spostare temporaneamente l’esecuzione del programma.
Il voto digitato, ed inserito dapprima nel vettore V all’indice CV, viene copiato nella variabile G.
Sulla variabile G, che rappresenta il voto inserito, il programma effettua delle valutazioni. Le valutazioni vengono stampate a monitor.
E’ possibile personalizzare queste valutazioni, modificando le stringhe presenti nelle righe 410 – 450.
Tramite l’istruzione RETURN, presente dopo ogni valutazione (alle righe 410 – 460) il programma ritorna al ciclo FOR CV … NEXT CV, per richiedere l’immissione del voto successivo.
Terminato l’inserimento di tutti gli NV voti, l’array V è pieno dall’indice 1 all’indice NV.
Videocorso sul linguaggio Basic, calcoli sugli array: valore medio
Dalla riga 200 alla 270 il computer effettua tutti i calcoli.
Per calcolare la media, dobbiamo dapprima definire una variabile somma, che chiamiamo SM.
Vengono sommati tutti gli NV voti dell’array, tramite un secondo ciclo FOR CV … NEXT CV.
Dopo aver sommato tutti i voti, la media ME viene calcolata dividendo la somma SM dei voti per il numero dei voti stessi, NV.
Il divisore NV deve ovviamente essere maggiore di 0 e questo lo abbiamo controllato all’inizio del programma, alla riga 70.
Valore massimo e valore minimo di una sequenza di numeri
Relativamente al valore massimo, si calcola in questo modo.
Dapprima viene definita la variabile MA, che rappresenta il valore massimo, e viene assegnato il valore del primo voto immesso.
Il computer confronta ciascun voto, presente nel vettore, con la variabile MA. Solo se il valore del voto presente all’indice CV del vettore è superiore al valore della variabile MA, quest’ultima ne prende il valore.
Alla fine del ciclo, la variabile MA conterrà il valore massimo presente nell’array dei voti V.
Un ragionamento simile si effettua per calcolare il valore minimo.
Si definisce la variabile MI a cui viene inizialmente assegnato il primo voto.
Scansionando tutti gli elementi del vettore dei voti V, dal primo all’ultimo NV, quando un voto è inferiore al valore presente nella variabile MI, questa viene sovrascritta con il voto più basso.
Alla fine del ciclo, la variabile MI conterrà il valore minimo presente nell’array dei voti V.
Dopo aver calcolato i dati che ci interessano, cioè la media ME dei voti, il voto massimo MA ed il voto minimo MI, il programma procede l’esecuzione alla riga 300.
Stampa a monitor dei risultati dell’elaborazione dell’array
La parte del programma compresa tra la riga 300 e la 370 scrive a monitor i risultati dell’elaborazione.
Il computer scrive, dapprima, la media dei voti. Dopo aver scritto la media dei voti, il valore della media ME viene assegnato alla variabile G, per consentire al computer di emettere il giudizio quando viene richiamata la riga 400.
Poi scrive a monitor il voto massimo, ed il giudizio ad esso relativo.
Infine scrive il voto minimo, insieme al suo giudizio.
Con la riga 380 si arriva all’istruzione END, che termina il programma.
Nel video, proviamo il programma con il Commodore 16.
Videocorso sul linguaggio Basic #4, il listato
Ed ecco il listato, il programma è disponibile in due formati:
- CORSO-BASIC-4.TXT, in formato testo, per analizzarlo su PC o per trascriverlo sui vari Commodore, sul GwBasic del DOS e sul QB64;
- CORSO-BASIC-4.ZIP, cartella compressa ZIP da scompattare. Include il programma in formato PRG, caricabile ed avviabile dal Commodore 64 e un disco virtuale D64 con all’interno il programma caricabile dal C16, Vic20, C64 e C128, nonché emulatori (CCS64, VICE o altri). Contiene anche il file BAS da caricare con il QB64.
Credits: nel video corso, la SID music è Super Hang-On di Steve Barrett.
Gli argomenti del corso sono ancora tanti!
Per essere avvisati quando usciranno altri tutorial, recensioni e le successive puntate del corso sul BASIC, vi suggerisco di iscrivervi al canale YouTube e attivare la campanella delle notifiche!