Benvenuti all’ottava puntata del corso sul linguaggio Basic! Nel video di oggi, impariamo come scrivere un programma, semplice, a partire da un’idea.
Come scrivere un programma: il diagramma di flusso
Supponiamo di voler scrivere un programma, molto semplice, per generare le varie righe che compongono una tabellina. Non sempre è necessario scrivere un diagramma di flusso del programma. Per programmi molto semplici, queste operazioni si possono fare a mente. Comunque, per rendere più chiara l’idea, ne scriviamo una bozza.
Il diagramma è venuto malissimo! E’ brutto! Comunque… gli ellissi identificano l’inizio e la fine del programma.
I parallelogrammi indicano gli ingressi e le uscite. Ad esempio le domande che il computer ci pone e le stringhe che restituisce a monitor.
I rettangoli indicano le operazioni. Infine, i rombi indicano le condizioni.
Analizziamo brevemente il digramma di flusso del programma per generare una tabellina
Nel primo parallelogramma, chiediamo immediatamente quale tabellina stampare e mettiamo il valore nella variabile T.
Per stampare il valore di questa tabellina, la tabellina T (ad esempio del 5), il computer cosa deve scrivere a monitor?
5 x 1, 5 x 2, 5 x 3, eccetera eccetera fino a 5 x 10.
Quindi, impostiamo un contatore e lo chiamiamo N. Appena avviato il computer, la memoria è pulita e N è uguale a 0. Nella prima operazione, impostiamo N = N + 1, quindi, se N = 0, dopo l’operazione N = 1.
Nell’esempio della tabellina del 5, la prima riga che il computer deve scrivere è:
5 x 1 = 5
Quindi: “T x N = “ (nell’esempio “5 x 1 = “) e poi (T*N), inteso come il risultato dell’operazione.
Dopo aver stampato il valore, quindi 5 x 1 = 5 il computer deve valutare se proseguire al successivo ciclo. Con il rombo si definisce una condizione: N è minore di 10? Se la condizione è soddisfatta, quindi, se N è minore 10 (nel primo ciclo vale 1) rifacciamo giro da dove punta la freccia, in modo da arrivare a un N uguale a 2, poi a un N uguale a 3, ecc…
Il computer ripete il ciclo fino a che N non è uguale a 10. Quando sono arrivato a nove, N = 9, N + 1 = 10, il computer scrive 5 x 10 = 50.
N è minore di 10? No, perché è uguale a 10 e quindi il computer esce dal programma. Fine!
Ulteriori specifiche del programma
Oltre a definire la logica di funzionamento del programma, è bene definire anche alcune specifiche. Molto semplicemente, vogliamo indicare:
- che l’input e l’output del programma siano in formato testo;
- che il programma deve essere compatibile con tutti i Commodore a 8 bit, il basic dell’Atari, il QB64, QuickBasic, GwBasic e PC-Basic.
La seconda condizione ci complica un po’ la vita, in quanto possiamo solamente utilizzare i comandi di base, comuni a tutti i Basic.
Come scrivere un programma: convertire il diagramma di flusso in Basic
Dopo aver avuto l’idea ed aver definito la logica e le specifiche, possiamo scrivere il programma, codificandolo in Basic.
Questa è la prima versione del programma, aderente al diagramma di flusso.
10 REM IL MIO OTTAVO PROGRAMMA IN BASIC 20 REM VISUALIZZAZIONE TABELLINA 30 REM (C) 2021, WWW.VALOROSO.IT 50 PRINT "TABELLINA"; 60 INPUT T 100 N = N + 1 110 PRINT STR$(T); " X"; STR$(N); " ="; STR$(T * N) 120 IF N < 10 THEN GOTO 100
Dopo la realizzazione del programma, nel tentativo di migliorarlo, è stato implementato un ciclo FOR… NEXT al posto della condizione IF… THEN. Ecco quindi la seconda versione del programma:
10 REM IL MIO OTTAVO PROGRAMMA IN BASIC 20 REM VISUALIZZAZIONE TABELLINA 30 REM (C) 2021, WWW.VALOROSO.IT 50 PRINT "TABELLINA"; 60 INPUT T 100 FOR N = 1 TO 10 110 PRINT STR$(T); " X"; STR$(N); " ="; STR$(T * N) 120 NEXT N
La terza versione del programma è migliorata, includendo un controllo del numero della tabellina da generare. Infatti, le precedenti versioni generavano anche le tabelline inesistenti, ad esempio quella del 20 e quella del -3. In questa ultima versione, il computer scrive solo le tabelline da 1 a 10.
10 REM IL MIO OTTAVO PROGRAMMA IN BASIC 20 REM VISUALIZZAZIONE TABELLINA 30 REM (C) 2021, WWW.VALOROSO.IT 50 PRINT "TABELLINA"; 60 INPUT T 70 IF T < 1 OR T > 10 THEN GOTO 50 100 FOR N = 1 TO 10 110 PRINT STR$(T); " X"; STR$(N); " ="; STR$(T * N) 120 NEXT N
Con la terza versione del programma, dobbiamo anche rivedere il diagramma di flusso, che, da brutto, ora diventa bruttissimo!
Analisi del programma in Basic per generare le tabelline
Le prime tre righe del programma, la 10, la 20 e la 30 contengono dei commenti. Abbiamo visto l’istruzione REM, per includere dei commenti, nella prima puntata del corso sul Basic.
Il computer chiede quale numero di tabellina generare alle righe 50 e 60. Non importa quanti numeri saltiamo tra una riga e l’altra, ma quello che importa è che le righe siano tutte in fila. Il computer, ad ogni modo, mette in ordine le righe autonomamente.
Il computer inserisce il numero di tabellina che vogliamo e stampare nella variabile T. Ho diviso PRINT da INPUT per rendere il programma compatibile anche con il Basic dell’ATARI. Abbiamo già studiato queste due istruzioni nella prima puntata del corso sul Basic.
Quindi, adesso, ci troviamo con il primo step realizzato: abbiamo il valore T della tabellina che vogliamo stampare. Lasciamo anche qua un po’ di spazi, non si sa mai che ci vengono utili dopo.
Alla riga 70, il computer controlla che la tabellina richiesta sia compresa tra 1 e 10. Se così non fosse, richiede nuovamente la tabellina da generare.
Alla riga 100 inizia il ciclo FOR N… NEXT N, che si chiude alla riga 120. Abbiamo già parlato del ciclo FOR nella terza puntata del corso sul Basic.
La stampa della riga della tabellina avviene alla riga 110.
Tramite PRINT, il computer scrive a monitor “T X N = (T * N)”, ad esempio: 5 X 1 = 5.
Per convertire il numero in un testo, utilizziamo la funzione STR$, di cui abbiamo parlato nella puntata 2 del corso sul Basic.
T è il numero della tabellina (ad esempio 5). Il computer scrive 5, punto virgola per concatenare le stringhe, X (simbolo della moltiplicazione), punto virgola ancora N, e poi il risultato della moltiplicazione T * N. Anche il risultato è convertito in stringa con STR$(T*N).
Il computer ripete la scrittura della riga della tabellina per 10 volte, come indicato nel ciclo FOR.
Documentazione
Ho predisposto un breve compendio con tutti i comandi in Basic V2 del Commodore 64. Lo trovate se seguite questo link.
Ecco il programma, scritto in minuscolo, adatto ad essere copiato ed incollato all’interno dell’emulatore VICE per Commodore 16, C64, C128, Commodore PET, Vic20, nonché nel QB64 ed emulatore Altirra per Atari.
10 rem il mio ottavo programma in basic 20 rem visualizzazione tabellina 30 rem (c) 2021, www.valoroso.it 50 print "tabellina"; 60 input t 70 if t < 1 or t > 10 then goto 50 100 for n = 1 to 10 110 print str$(t); " x"; str$(n); " ="; str$(t * n) 120 next n
Credits: nel video tutorial, la SID music è ACE II di Rob Hubbard.
Per essere avvisati quando pubblicherò altre puntate del corso sul linguaggio Basic, oppure quando pubblicherò altri video, esperimenti e recensioni relativi ai retro computer e all’elettronica vintage, vi invito a iscrivervi al canale YouTube e attivare la campanella delle notifiche.
Grande Amedeo come al solito ci si vede su facebook
Grazie! A presto!