Pascal (linguaggio di programmazione)
Il Pascal, in informatica, è un linguaggio di programmazione creato da Niklaus Wirth e basato sul linguaggio ALGOL; il nome è dedicato a Blaise Pascal che inventò nel 1645 la Pascalina, considerata la prima calcolatrice. StoriaPare che Wirth, docente di programmazione negli anni Sessanta, avvertisse la mancanza di un linguaggio di programmazione adatto all'insegnamento della propria materia e dotato di strutture dati avanzate. Il BASIC, creato nel 1964, era facile da imparare ma non aveva strutture dati avanzate e non incoraggiava abbastanza ad analizzare il problema prima di scrivere effettivamente il codice. Nemmeno linguaggi come ALGOL e Fortran sembravano adatti per i suoi fini didattici. Perciò, Wirth creò da zero il linguaggio Pascal, inserendovi il concetto di programmazione strutturata[1]. La prima implementazione del linguaggio divenne operativa nel 1970, ma raggiunse una discreta diffusione nel campo industriale a partire dal 1974, con la pubblicazione del libro Pascal User Manual and Report[2], considerato il riferimento standard per il linguaggio. TeX e parte delle prime versioni del sistema operativo del Macintosh[3] e di Microsoft Windows[4] furono scritte in Pascal. Essendo un linguaggio pensato per studenti e utenti inesperti, i compilatori Pascal hanno un atteggiamento protettivo nei confronti del programmatore (partendo dal presupposto che qualunque irregolarità del codice scritto sia un errore), che spesso infastidisce un po' gli esperti. Per esempio i dati e le funzioni sono verificati dal compilatore usando la cosiddetta tipizzazione forte (strong type checking), ovvero uno stretto rigore riguardo alla definizione ed al modo di usare i tipi di dati, a differenza di linguaggi a tipizzazione debole (per esempio JavaScript) che invece consentono ai programmatori esperti una maggiore libertà di scrittura del codice al costo della possibilità di rendere più arduo rilevare errori di struttura e sintassi. Il Pascal è un linguaggio che impone sia l'uso di un buono stile di programmazione, sia di analizzare a fondo il problema prima di cominciare a scrivere codice sorgente. Data la diffusione negli ambienti scolastici e l'evoluzione della tecnologia e delle esigenze del mercato, ne sono state create versioni ad oggetti, come per esempio il Turbo Pascal e l'Object Pascal (utilizzato nell'ambiente di sviluppo Delphi di Borland, ora di proprietà di Embarcadero). CaratteristicheLe caratteristiche principali del Pascal sono una sintassi chiara e rigida con l'obbligo di dividere il programma in sezioni ben definite (specifiche Benché il Pascal sia identificato come linguaggio dalle origini didattiche, in realtà il suo sviluppo non si è mai fermato negli anni ed ha superato il concetto iniziale di programmazione strutturata introducendo, già con Delphi, la programmazione ad oggetti. Negli anni sono state introdotte caratteristiche dei moderni linguaggi di programmazione come ad esempio le interfacce e i generics, mentre le funzioni anonime erano già state anticipate da Wirth con le funzioni e procedure nidificate, che hanno il pregio di rendere più leggibile il codice sorgente. Questi miglioramenti lo hanno reso un linguaggio molto versatile, tanto da poter essere considerato ad alto livello, ma anche a basso livello in quanto può gestire puntatori e codice unmanaged. La forte tipizzazione lo rende un linguaggio che presenta tendenzialmente meno bug, la semplicità sintattica permette uno sviluppo veloce e, essendo compilato, gli eseguibili sono generalmente molto veloci. Da sottolineare che, nella sua formulazione originale, il linguaggio era privo dell'istruzione GOTO, concettualmente nemica della strutturazione corretta dei programmi, aggiunta poi in seguito ma della quale è comunque scoraggiato l'uso. Tutte queste caratteristiche fanno del Pascal un linguaggio evergreen adatto a sviluppare un ampio ventaglio di applicazioni. Compilatori gratuiti
Programmi di esempioHello, world!Il seguente esempio stampa a video il testo "Hello world". program hello;
uses crt; <----non obbligatoria
begin
clrscr; <----non obbligatoria
writeln('Hello World');
readln
end.
La prima riga introduce il programma con la parola chiave VariabiliIl Pascal mette a disposizione molti tipi di variabili:
... {Altre istruzioni}
Var R:Real;
... {Altre istruzioni}
Writeln('Il numero reale è ',R:10:3);
... {Altre istruzioni}
In questo caso vengono visualizzate in tutto 10 cifre, di cui 3 decimali.
Puntatori
Si possono specificare puntatori a variabili usando nella dichiarazione un nome seguito dal simbolo var
puntatore : ^int;
numero : int;
begin
numero := 10;
puntatore := @numero
end.
In questo modo puntatore^ := 15;
ArrayGli array in Pascal sono una sequenza ordinata, in quantità prestabilita, di elementi dello stesso tipo. Gli elementi possono essere composti da qualunque tipo di dati, nativo o definito dal programmatore usando Una caratteristica importante del linguaggio Pascal sta nel fatto che nel momento della dichiarazione di un array, viene definito anche il valore iniziale dell'indice da utilizzare per la scansione dei vari elementi:
Var nome : array [inizio..fine] of tipo;
Var nome : array [1..20] of char;
..... {Altre istruzioni}
nome := 'Paolo'; {assegnazione nel suo insieme}
nome[5] :='a'; {assegnazione del solo quinto carattere}
Record
In Pascal è possibile definire un tipo personalizzato (custom), strutturato dal programmatore stesso. La sintassi si basa sulla specifica type persona = record
nome:string[30];
eta:int
end;
per poi usare il tipo di variabile personalizzato in questo modo: var qualcuno : persona;
begin
qualcuno.nome := 'Asdrubale'
qualcuno.eta := 35
end.
Input e outputL'input di dati da tastiera viene effettuato tramite l'utilizzo del comando Esistono anche le due funzioni program input_output(input, output);
var
n1,n2,ris:integer; {Dichiarazione tipo intero}
begin
writeln('Inserisci n1'); {viene visualizzato il testo tra ' '}
readln(n1); {comando di input, la variabile introdotta viene inserita in n1}
writeln('Inserisci n2');
readln(n2);
ris:=n1+n2; {fa la somma di n1 e n2 e il risultato viene inserito in ris}
writeln('La somma e'' uguale a ',ris); {stampa il messaggio tra ' ' e la variabile ris}
readln {questo evita che il programma si chiuda senza che sia possibile leggere l'ultima riga, il programma si aspetta che l'utente scriva qualcosa e poi prema INVIO. In questo modo il programma si chiuderà.}
end.
I/O reali: per l'input di numeri reali il metodo resta sempre lo stesso ( program input_output(input, output);
var n1,n2,ris:real; {Dichiarazione tipo reale}
begin
writeln('Inserisci n1'); {viene visualizzato il testo tra ' '}
readln(n1); {comando di input, la variabile introdotta viene messa in n1}
writeln('Inserisci n2');
readln(n2);
ris:=n1+n2; {fa la somma di n1 e n2 e il risultato viene messo in ris}
writeln('La somma e'' uguale a ',ris:6:2); {stampa il messaggio tra ' ' e la variabile ris, con 6 numeri prima della "," , la "," stessa e 2 dopo}
readln
end.
Nella stampa a video abbiamo usata un'alterazione del comando I/O caratteri: l'input e l'output di caratteri (numeri, lettere, simboli), è lo stesso per caratteri e numeri interi: program input_output(input, output);
var ch:char; {Dichiarazione tipo carattere}
begin
writeln('Inserisci il carattere'); {viene visualizzato il testo tra ' '}
readln(ch); {comando di input, la variabile introdotta viene messa in ch}
writeln('Il carattere inserito e'' ',ch); {stampa il messaggio tra ' ' e la variabile ch}
readln
end.
I/O stringhe: le variabili stringhe come già detto sono array di caratteri. Strutture di controlloAlternativeProgram alternativa;
var
n:integer;
begin
write('inserisci un numero: ');
readln(n);
if n > 0 {controlla se il valore è positivo}
then
write('il numero e'' positivo.')
else
write('il numero e'' negativo.');
readln
end.
IterazioneI seguenti frammenti di codice riportano un esempio dei cicli di iterazione in linguaggio Pascal. Program ciclo_for;
var i, n, num:integer;
begin
write('quanti numeri vuoi inserire?');
readln(n);
for i:=1 to n do
begin
write('inserisci il numero: ');
readln(num);
end;
readln
end.
Dopo la specifica for, occorre l'assegnazione di un valore a una variabile (in questo caso Il valore di una variabile può essere incrementato anche usando la stessa variabile come riferimento. Ovviamente non bisogna fare confusione tra queste espressioni in Pascal, e in molti altri linguaggi, con le convenzioni delle equazioni matematiche. Il ciclo Si può eseguire un ciclo Program Esempio2;
Uses Crt,WinDos;
Var nome1,nome2,stringa:string;
file1,file2:text;
begin
clrscr;
write('Inserire il nome di un file: ');
readln(nome1);
write('Inserire il nome del file copia: ');
readln(nome2);
Assign(file1,nome1);
Assign(file2,nome2);
Reset(file1);
Rewrite(file2);
repeat
readln(file1,stringa);
writeln(file2,stringa);
until eof(file1);
Close(file1);
Close(file2);
writeln('Copia completata!');
readln
end.
Occorre precisare come il linguaggio Pascal tradizionale utilizza i nomi dei file. Un nome può essere composto al massimo da 8 caratteri, estensione esclusa. Se il nome supera gli 8 caratteri viene troncato a 6 e si aggiunge un ~1 (il codice ASCII della tilde, ~, è 126). Perciò il nome testouno.txt è corretto e viene mantenuto inalterato. Invece, testoquattro.txt è sbagliato e il compilatore produrrà messaggio di errore (error 2: File not found); testoq~1.txt è la versione corretta dell'esempio precedente: i caratteri vengono troncati a 6 e aggiunto un ~1.
Come si è ben visto, il ciclo Program esempio3;
Uses Crt;
Var x,y:word;
begin
clrscr;
write('Inserire due coordinate: ');
readln(x,y);
while (x<>0) and (y<>0) do
begin
read(x,y);
gotoxy(x,y);
write((,x,;,y,));
end;
readln
end.
Questo programma legge da tastiera due coordinate, sposta il cursore a quelle date coordinate e scrive in quel punto le ascisse e le ordinate tra parentesi, separate da un punto e virgola.
Il ciclo si ripete ogni volta che la condizione indicata è vera: in questo caso quando sia La procedura Anche con Note
Bibliografia
Voci correlateAltri progetti
Collegamenti esterni
|
Portal di Ensiklopedia Dunia