Nel 2023 si festeggeranno i 400 anni dalla nascita di Blaise Pascal, grande matematico che nacque il 19 giugno 1623. Il linguaggio di programmazione Pascal deve il suo nome proprio al grande matematico: per festeggiare in qualche modo questo anniversario, in questo articolo ci dedichiamo ad una prova di utilizzo del compilatore Free Pascal.

Per gli amanti dell'informatica, Blaise Pascal può essere ricordato quale inventore della prima calcolatrice, la "Pascalina", uno strumento meccanico per l'esecuzione di addizioni e sottrazioni (al riguardo vedi qui); senza dubbio, però, il primo pensiero va al linguaggio di programmazione Pascal che per tanti è stato il primo linguaggio, quello con cui si è imparato a programmare.
Negli anni '90 il Pascal era utilizzato diffusamente per l'insegnamento della programmazione, anche grazie alla presenza di un ambiente integrato come il Turbo Pascal della Borland.
In questo articolo proviamo Free Pascal, un compilatore Pascal multipiattaforma dotato di un IDE con interfaccia a caratteri molto simile all'ultimo Turbo Pascal.

INSTALLAZIONE
Free Pascal è installabile su diversi sistemi operativi; io l'ho installato sulla mia postazione Linux Mint, utilizzando semplicemente il gestore pacchetti (il pacchetto che ho installato si chiama fpc). Free Pascal lo potete ottenere anche installando Lazarus, ovvero il "clone" di Delphi che si basa proprio su Free Pascal e di cui ho già parlato qui.

HELLO WORLD
Il primo programma non può che essere il classico HelloWorld. Per lanciare l'ambiente basta dare il comando fp (con il comando fpc, invece, si può invocare il compilatore senza interfaccia).
Per provare basta creare un nuovo file (File->New) ed iniziare a digitare (qui sotto il codice):

Per compilare basta dare Compile->Compile (o Alt+F9, come suggerito dall'interfaccia).
Ecco però che ci scontriamo con un errore "Fatal: Can't find unit system used by hello" ma con una rapida ricerca su Internet troviamo che il problema è la localizzazione delle "unit", ovvero delle librerie, utilizzate dal programma; in questo caso il compilatore non trova la unit system.
Con una ricerca nel disco (le units hanno estensione .ppu) ho trovato la unit system in /usr/lib/x86_64-linux-gnu/fpc/3.0.4/units/x86_64-linux/rtl e quindi ho impostato tale percorso direttamente nell'interfaccia, nel menù Options->Directories, e tutto ha preso magicamente a funzionare!

TERNE PITAGORICHE
Vediamo ora qualcosa di più elaborato rispolverando il problema #9 di Project Euler, il cui testo (leggermente modificato nella parte finale) è il seguente:

Una terna pitagorica è un insieme di 3 numeri naturali, a < b < c, per i quali
a2 +  b2 = c2
Per esempio, 32 + 42 = 9 + 16 = 25 = 52.
Esiste esattamente una tripletta pitagorica per la quale a + b + c = 1000 ... trovala!

Eccolo qui il nostro programmino:

program terne;
var
     a,b,c: integer;

function IsTerna(a,b,c:integer):boolean;
begin
     IsTerna := (a*a+b*b) = (c*c);
end;

begin
     for a:=1 to 1000 do
     begin
          for b:=a+1 to 1000 do
          begin
               c:=1000-a-b;

               if c <= b then
                    break;

               if IsTerna(a,b,c) then
                    writeln('Trovato! a=',a,' b=',b,' c=',c);
          end;
     end;
end.
Si tratta di un programma estremamente semplice che ho voluto riportare qui solo per la prova di Free Pascal. In questo esempio ho introdotto la definizione di una funzione (IsTerna()) e due strutture di controllo, l'iterazione (cicli for) e l'alternativa (if-then).
Molto semplicemente, i due cicli annidati generano delle coppie (a,b) dove a<b e per ciascuna coppia si determina c, considerando che a+b+c=1000; se c<=b viene arrestato il ciclo su b e si passa al prossimo a, altrimenti si verifica se la terna ottenuta (a,b,c) è una terna pitagorica.
Per capire il funzionamento suggerisco di eseguirne il debug posizionando un breakpoint (Debug->Breakpoint) all'interno del ciclo e di monitorare i valori di a, b e c (Debug->Add Watch); per far partire il programma si da Run->Run (Ctrl+F9) e dopo ogni breakpoint si può rilanciare con Run->Continue (sempre Ctrl+F9).
Infine, dando Compile->Build potete ottenere il file eseguibile, da lanciare direttamente dalla shell, ovvero fuori dall'ambiente di sviluppo.
CONSIDERAZIONI
Facendo il debug ci si può rendere conto di quanto l'ambiente sia semplice e immediato; nonostante si tratti di un'interfaccia a caratteri, ci sono tutte le funzionalità di base necessarie per scrivere il programma, compilarlo e debuggarlo.
Secondo me, dal punto di vista didattico Free Pascal e il suo ambiente potrebbero essere utilizzati ancora oggi, almeno nella prima fase di introduzione alla programmazione, in cui si risolvono semplici problemi disegnando flow chart o scrivendo gli algoritmi in pseudocodice (spero si faccia ancora!).
Mi rendo comunque conto che ci sono linguaggi (Java, Python, C# ...) altrettanto validi dal punto di vista didattico ma che dispongono di ambienti di sviluppo molto più potenti e che vengono poi utilizzati anche in ambito produttivo.
Per quanto mi riguarda, questo ambiente ha risvegliato in me l'entusiasmo di tanti anni fa; quasi quasi vado a cercare se ho ancora qualche programmino Pascal nei vecchi floppy disk!!!
RIFERIMENTI
Sito ufficiale di Free Pascal https://www.freepascal.org/