Alcuni giorni fa ho sostenuto un colloquio di lavoro e mi è stato chiesto di scrivere un piccolo algoritmo che:
- Generi un array di 10 numeri casuali tra compresi tra 1 e 10, estremi inclusi.
- Li mostri a schermo.
- Calcoli la somma dei quadrati dei numeri pari.
- Stampi il risultato.
Il problema non è di per se niente di complicato ma, mentre lo risolvevo in JavaScript con un approccio puramente funzionale, abbiamo discusso di quanto l’aspetto della soluzione potesse variare da un linguaggio all’altro.
E così ho pensato di rispolverare un’idea che avevo già in mente da tempo e iniziare una serie di post, uno per settimana, in cui approfitto di questo problema per confrontare le soluzioni in linguaggi diversi, iniziando dal primo linguaggio che ho utilizzato quando ho iniziato a programmare: il Basic.
Molti dei linguaggi che utilizzerò li vedrò per la prima volta scrivendo questi post, per cui questo esercizio va considerato come una semplice esplorazione personale. Alcune soluzioni che proporrò potrebbero essere inefficaci o seguire un approccio sbagliato, quindi qualsiasi commento è benvenuto. Anche gli insulti se me li merito.
E quindi, iniziamo…
Il Linguaggio Basic
L’ultima volta che ho scritto “seriamente” qualcosa in Basic è stato più o meno quando facevo la seconda media. Era un programmino che mi piacerebbe recuperare (sarà salvato su qualche cassetta in soffitta).
Il programma aveva lo scopo di scammare i miei amici proponendogli un oroscopo super accurato in base alla loro data di nascita, che io avevo preventivamente hardcodato e associata ad una serie di oroscopi casuali ma tutti attinenti al malcapitato. Ci si divertiva così nel 1997.
Il primo problema da risolvere, oltre a quello di procurarsi un emulatore del commodore 64 che giri sul Mac (sono andato sul classico VICE), è quello di generare un array di 10 numeri casuali tra 1 e 10 e stamparli a schermo.
Non ricordo assolutamente nulla del basic, per cui decido di dare una rispolverata a questo manuale qua: Commodore 64 Microcomputer Manuale d’uso 1982.
Avrei potuto fare un unico ciclo for per generare i numeri e calcolare la somma dei quadrati, ma ho preferito farlo in due cicli separati per rendere piĂą leggibile il tutto (altrimenti non servirebbe nemmeno salvarli in un array a dirla tutta).
10 DIM NUMBERS(10)
20 FOR I = 1 TO 10
30 NUMBERS(I) = INT(RND(1) * 10) + 1
40 PRINT NUMBERS(I)
50 NEXT I
A questo punto si tratta semplicemente di fare un po’ di conti (menzione speciale per la freccetta verso l’alto per elevare al quadrato).
60 FOR I = 1 TO 10
70 MOD = NUMBERS(I) - INT(NUMBERS(I) / 2) * 2
80 IF MOD <> 0 THEN 100
90 SUM = SUM + NUMBERS(I) ↑ 2
100 NEXT I
e stampare il risultato.
100 PRINT "LA SOMMA E': "; SUM
Ed ecco il risultato, in tutta la sua nostalgica bellezza.


Alcune cose random che mi sono venute in mente rimettendo mano al Basic:
- Che bello che era il GOTO per i salti condizionali.
- Ho aperto un libro del 1982 e ho trovato in un attimo tutte le informazioni di cui avevo bisogno. Certo, il problema da risolvere era veramente banale, ma non sono sicuro che avrei avuto la stessa fortuna con una documentazione moderna.
- Mi piacerebbe fare qualcosa di piĂą complesso per il Basic C64.