Corso per Programmare in Basic #5, Int Rnd Timer, Tabelline

Benvenuti nella quinta puntata del corso per Programmare in Basic. Oggi vediamo la funzione RND, che genera numeri pseudo casuali, la funzione INT, che restituisce la parte intera di un numero ed anche la variabile di sistema TIMER.

Iscriviti al canale YouTube: Valoroso-IT. Retro tecnologia, Commodore, impianti stereo vintage, retro computer, esperimenti e prove.

Implementiamo le funzioni RND e INT all’interno di un programma, che può essere utile, ai vostri figli e nipoti, per ripassare le tabelline! Il computer misura anche il tempo impiegato a calcolare le varie tabelline, tramite la variabile di sistema TIMER.

Il programma per ripassare le tabelline è disponibile in fondo a questa pagina.

Commodore, rpiassare studiare le tabelline esercizi, 16 64 128 C64 C16 Vic20 Vic-20 C128 Plus4, PRG D64

Imparare a programmare in Basic, su quali computer?

Anche il programma di esempio che analizziamo oggi può essere eseguito sui vari Commodore a 8 bit, come il Commodore 64, il C16, il Vic20, il Commodore 128 e il PET. Lo potete eseguire sugli emulatori, come il VICE e il CCS64. Inoltre è compatibile con il GWBASIC del vecchio DOS per PC IBM, che vediamo girare nell’emulatore DOSBox. Per chi non lo conoscesse, DOSBox consente di far funzionare i vecchi programmi DOS, anche su Windows 10.

Programma per ripassare le tabelline in Basic, GwBasic DOSBox Windows 10 DOS

Non da ultimo, il programma per ripassare le tabelline è compatibile anche con il QuickBasic QB64, introdotto nella puntata 3 del corso, che consente di compilare i programmi in Basic e di creare dei file eseguibili per Windows, Linux e Mac.

Programma per ripassare le tabelline in Basic, QuickBasic QB64, Windows 10

Corso per Programmare in Basic #5: listato del programma per ripassare le tabelline

Ecco il listato del programma per ripassare le tabelline. In fondo al listato, l’ultima riga del programma è leggermente differente tra i Commodore e i PC DOS. Continuando a leggere questo corso per programmare in Basic, scoprirete perché.

10 REM IL MIO QUINTO PROGRAMMA IN BASIC
20 REM RIPASSO TABELLINE
30 REM (C) 2021, WWW.VALOROSO.IT
40 REM TIPO ESERCIZIO
50 PRINT "FINO QUALE TABELLINA"
60 INPUT "RIPASSI (1-10)";NT
70 IF NT<1 OR NT>10 THEN GOTO 50
80 PRINT: INPUT "QUANTI ESERCIZI";NE
90 IF NE<1 THEN GOTO 80

100 REM INIZIALIZZAZIONE
110 X = RND(-TIMER)
120 PRINT
130 TM = TIMER
200 REM ESERCIZI
210 FOR ES = 1 TO NE
220 M1 = INT(RND(1) * (NT + 1))
230 M2 = INT(RND(1) * 11)
240 PRINT: PRINT "QUANTO FA"
250 PRINT STR$(M1) + " X" + STR$(M2);
260 INPUT MR
270 IF MR = M1 * M2 THEN PRINT "GIUSTO!": NG = NG + 1
280 IF MR <> M1 * M2 THEN PRINT "SBAGLIATO!": NS = NS + 1
290 NEXT ES

300 REM PUNTEGGIO
310 PRINT
320 PRINT "NUMERO ESERCIZI:" + STR$(NE)
330 PRINT "- GIUSTI:    " + STR$(NG)
340 PRINT "- SBAGLIATI: " + STR$(NS)
350 PRINT "TEMPO:" + STR$(INT((TIMER - TM) / 60)) + " S"

Analisi del programma di esempio per ripassare le tabelline

Le prime tre righe di programma, la 10, la 20 e la 30, contengono le istruzioni REM, per scrivere i commenti, che abbiamo già visto nella prima puntata del corso.

Anche le righe dalla 40 alla 90 comprese contengono delle istruzioni già viste.

In particolare, dalla riga 50, il computer chiede all’utente fino a quale tabellina vuole ripassare. Ho voluto limitare la larghezza a monitor delle varie richieste, in ragione del monitor con meno caratteri, che è quello del Commodore Vic20.

Il programma di esempio consente anche di ripassare fino ad una tabellina specifica. Infatti, i ragazzi non studiano tutte le tabelline insieme e potrebbero voler ripassare le varie tabelline fino a dove sono arrivati con lo studio.

Il computer memorizza il numero della tabellina, fino alla quale si vuole ripassare, nella variabile numerica NT.

La riga 70, tramite l’istruzione IF… THEN, già vista nella seconda puntata del corso, controlla che la tabellina sia compresa tra quella dell’1 e quella del 10. Se il numero fosse esterno a tali limiti, la domanda verrebbe riformulata.

Alla riga 80, il computer chiede quanti esercizi si vogliono eseguire. Infatti, è possibile decidere il numero NE di calcoli che l’utente deve eseguire per il ripasso.

Non è previsto un limite massimo al numero dei conti che il malcapitato utente deve eseguire! Tale numero, però, non può essere inferiore a 1, altrimenti il computer pone nuovamente la domanda.

Il generatore di numeri casuali RND

Con la riga 110 viene effettuata l’inizializzazione del generatore di numeri casuali RND. Infatti, se RND non viene inizializzato con un numero casuale, restituirebbe sempre la stessa sequenza di numeri.

Corso per imparare a programmare in Basic Commodore RND inizializzare generatore numeri casuali, 16 64 128 C64 C16 Vic20 Vic-20 C128 Plus4

Facciamo una prova con il Commodore PET. Lo accendiamo e chiediamo di scrivere un numero casuale. La funzione RND restituisce sempre un valore minore di 1, ma maggiore o uguale a zero. Lo trascriviamo. Poi resettiamo il computer e chiediamo sempre un numero casuale. Il numero… è sempre lo stesso!

Commodore PET, Basic, RND sempre stessi numeri casuali

Se, però, inizializziamo il generatore di numeri casuali con una variabile che cambia in ogni momento, ad esempio TIMER (approfondiremo il discorso nei paragrafi successivi), il numero casuale generato è sempre diverso.

Commodore PET, RND inizializzare generatore numeri casuali

Nel programma delle tabelline, il numero casuale serve per individuare i due fattori, sempre diversi, delle varie moltiplicazioni che l’utente deve calcolare.

La variabile di sistema TIMER

La riga 130 memorizza il TIMER nella variabile numerica TM, che serve per contare il tempo che l’utente ha impiegato ad effettuare i vari conti.

Relativamente alla variabile di sistema TIMER, nel Basic del Commodore non esiste, però funziona!

Infatti, esiste la variabile di sistema TIME, che restituisce il numero di sessantesimi di secondi che sono trascorsi dall’accensione del computer.

Dato che le variabili vengono riconosciute dalle loro prime due lettere, TIME viene riconosciuta da TI, come anche TIMER. Per questo funziona. Funzionerebbe anche un qualsiasi altro nome che iniziasse per TI.

Corso per imparare a programmare in Basic Commodore 16, C16 Timer Time Ti variabile sistema

Comunque, nel programma, ho scritto proprio TIMER al posto di TIME, per compatibilità con gli altri Basic del DOS, in cui la variabile di sistema TIMER è implementata.

Iscriviti al gruppo Facebook. Retro tecnologia, Commodore, impianti stereo vintage, retro computer, esperimenti e prove.

Sempre approfondendo il TIMER, nei Commodore il valore si aggiorna di 60 unità al secondo. Invece, nel Basic dei PC, il valore è decimale e la parte intera rappresenta i secondi trascorsi dalla mezzanotte. Dobbiamo tenere conto di questa differenza nell’ultima riga del programma, dove calcoliamo il tempo che l’utente impiega ad effettuare i conti delle tabelline.

Lunguaggio Basic Timer QuickBasic QB64 DOS Windows 10

La generazione dei due fattori delle tabelline

Dalla riga 200 alla 290 comprese arriviamo al cuore del programma! Il ciclo FOR… NEXT, che abbiamo già studiato nella terza puntata del corso, genera per NE volte (il numero di esercizi), le moltiplicazioni da proporre all’utente.

Video Corso Tutorial Istruzioni Basic Commodore 64 ciclo FOR NEXT

La riga 220 genera il primo fattore M1, intero casuale, che deve essere compreso tra 0 e l’ultima tabellina che l’utente ha studiato (NT).

Il secondo fattore M2 della moltiplicazione, generato alla riga 230, è sempre compreso tra 0 e 10.

Programmare in Basic: la funzione INT per ricavare la parte intera di un numero

Per questi conti, ci viene utile la funzione INT(), che, per numeri positivi, restituisce la parte intera tralasciando quanto c’è dopo la virgola.

Approfondiamo il calcolo dei due fattori M1 e M2 con il Commodore Vic20. Il numero casuale, generato dalla funzione RND, è compreso tra 0 compreso e 1 escluso. Supponiamo di voler calcolare la tabellina del 10. Anche se il computer generasse un numero casuale molto grande (ad esempio 0.99), moltiplicando per 10, non si potrebbe mai raggiungere il numero intero 10. Per questo, bisogna moltiplicare la funzione RND per il numero massimo che si vuole generare +1. In questo caso, per arrivare fino a 10, dobbiamo moltiplicare per 11.

Tutorial Video Corso Basic Commodore Vic20, funzione INT RND numeri interi, 16 64 128 C64 C16 Vic20 Vic-20 C128 Plus4, PRG D64

I fattori della moltiplicazione devono essere numeri interi. Ecco perché ci viene utile la funzione INT che, per numeri positivi, restituisce la sola parte intera del numero, tralasciando i decimali.

Verifica del valore immesso dall’utente

Torniamo al programma: abbiamo i due fattori M1 e M2, interi e casuali, per comporre la moltiplicazione.

Dalla riga 240 alla 260, il computer chiede all’utente il risultato della moltiplicazione M1 * M2. Tale risultato, viene memorizzato nella variabile MR.

Tramite due istruzioni IF… THEN, il computer valuta se MR, il risultato immesso dall’utente, è uguale al valore corretto della moltiplicazione. Se il risultato è giusto, viene incrementato il valore della variabile NG, che rappresenta il numero di esercizi corretti. Inoltre, il computer gratifica l’utente con la scritta “GIUSTO!”.

Se, invece, il risultato è errato, viene incrementato il valore di NS, che è il numero di risposte errate immesse dall’utente. Inoltre il computer scrive: “SBAGLIATO!”.

Raggiunta l’istruzione NEXT ES, presente alla riga 290, il ciclo FOR ES si ripete: l’utente è invitato a calcolare le restanti moltiplicazioni.

Programmare in Basic: il punteggio finale!

Terminata la sfida, il computer restituisce i risultati, dalla riga 300 in poi.

Listato Basic di esempio Commodore 64 provare studiare tabelline risultati, 16 64 128 C64 C16 Vic20 Vic-20 C128 Plus4, PRG D64

Vengono indicati a monitor:

  • il numero totale degli esercizi (NE);
  • quante moltiplicazioni l’utente ha eseguito correttamente (NG);
  • il numero di moltiplicazioni errate (NS);
  • nella riga 350, il computer indica il tempo impiegato dall’utente a fare i calcoli, espresso in secondi. Il computer scrive il tempo trascorso tra l’ultimo esercizio (valore attuale di TIMER) e il primo (memorizzato in precedenza nella variabile TM).

Qui, c’è una piccola differenza tra il Basic del Commodore e quello per i PC. Infatti, nel Commodore il valore del TIMER deve essere diviso per 60. Per i PC DOS, la divisione non è necessaria, in quanto il valore è già espresso in secondi.

Ecco, quindi, l’ultima riga di programma, la 350, per i computer Commodore:

350 PRINT "TEMPO:" + STR$(INT((TIMER - TM) / 60)) + " S"

E questa è per il Gw-Basic e il QuickBasic QB64 per PC MSDOS:

350 PRINT "TEMPO:" + STR$(INT(TIMER - TM)) + " S"

Listato del programma delle tabelline

Ed ecco il listato del programma in Basic della quinta puntata del video corso su come programmare in Basic con il Commodore e con il PC DOS.

Il programma è disponibile in due formati:

  • CORSO-BASIC-5.TXT, in formato testo, per analizzarlo su PC o per trascriverlo sui vari Commodore, sul GwBasic nel DOSBox e sul QuickBasic QB64;
  • CORSO-BASIC-5.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 i programmi caricabili dal C16, Vic20, C64 e C128, nonché emulatori (CCS64, VICE o altri). Include anche il programma in formato BAS per il QuickBasic QB64 e il GwBasic per DOSBox e MSDOS.

Gli argomenti del corso sono ancora tanti!

Credits: nel video corso, la SID music è Credits: DYSPIDCE, by Sami Seppä (Rock).

Per essere avvisati quando usciranno altri tutorial, esperimenti e recensioni relativi ai retro computer ed le successive puntate del corso sul BASIC, vi suggerisco di iscrivervi al canale YouTube e attivare la campanella delle notifiche!

Iscriviti al canale YouTube: Valoroso-IT. Retro tecnologia, Commodore, impianti stereo vintage, retro computer, esperimenti e prove.

Ti piace questa pagina? Condividila:

Pubblicato in RetroComputer, RetroTecnologia ed Elettronica Vintage, Tutti gli articoli.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Immagine CAPTCHA

*