Pascal - guida e concetti alla
programmazione
Pagina :
1 |
2
| 3
| 4
Capitolo 1: Introduzione ai linguaggi
programmativi
"Il computer è una macchina che elabora delle informazioni ; in
quanto macchina , però , non è capace di gestirle da sè, ma
necessita di un operatore esterno che istruisca l' elaboratore e gli
insegni come trattare queste informazioni."
Questa definizione racchiude in sè il significato della parola
programmazione.
Esistono due principali tipi di linguaggi con cui programmare una
macchina: i programmi interpreti e i compilatori.
Alla prima categoria appartengono numerosi programmi tra i quali
spicca il BASIC ( Beginners All-Purpose symbolic Instruction Code =
Codice simbolico di istruzioni per tutti gli usi, per principianti)
grazie alla sua intuitività ( almeno per chi mastica un po' d'
inglese !). Il suo funzionamento è semplice: il codice sorgente (
quello introdotto dall' operatore esterno) viene tradotto in
linguaggiuo macchina (ASCII) riga per riga ogniqualvolta il
programma stesso viene eseguito.
Oltre agli interpreti però, come già detto, esistono anche i
compilatori. PASCAL,FORTRAN( FORmula TRAnslate = Traduzione di
formule) e C , sono soltanto alcuni dei più diffusi linguaggi
compilati. I programmi compilatori funzionano nel modo opposto degli
interpreti: dato il solito codice sorgente, il compilatore lo
trsforma in blocco in codice eseguibile.
Questi due metodi di programmazione sono entrambi validi ma ciscuno
offre vantaggi e svantaggi. I compliatori infatti hanno il vantaggio
di essere più veloci rispetto agli interpreti ma sono più soggetti
ad errori degli interpreti.
Capitolo 2: Introduzione al Turbo Pascal
In questa sede ci occuperemo estesamente di un particolare tipo di
linguaggio di programmazione compilato,il Turbo Pascal. Il Pascal
prende il suo nome dal matematico francese Blaise Pascal che fu il
primo ad ideare una macchina calcolatrice :la Pascalina. Questo
linguaggio, però fu messo a punnto nel 1960 da Niklaus Wirth,
docente all' università di Zurigo. Esso si diffuse dpprima negli
ambienti scientifici ma, successivamente , grazie alla sua
versatilità ed alla sua semplicità ,si difffuse un po' dappertutto.
Passiamo ora alla parte operativa.
Una volta avviato il TP (Turbo Pascal N.d.A.) si presenterà un'
interfaccia a menu abbastanza intuitiva. Compariranno vari menu, ma
quelli pricipali sono tre : File , Run , Compile. Il primo è formato
da New, per crere un nuovo documento di lavoro; Load , per aprire
lavori già salvati; Save , registra un lavoro. Nel menu Compile l'
unico comando che ci riguarda è Compile, che compila il programma (
Cfr. Cap.1 ). Spesso può risultare utile conoscere il comando
Destination (nel menu Compile) per decidere se compilare il
programma nella Ram oppure in un file eseguibile
(nome_programma.exe). Una volta compilato il programma, però,
dobbiamo eseguirlo, e perciò è necessario selezionare dal menu Run
il comando Run.
Capitolo 3 : Struttura generale di un programma
Un programma scritto in TP consta in tre sezioni principali :
sezione intestazione , sezione dichiarazioni e sezione esecutiva.
Nonostante questi terribili nomi esse sono semplicissima
comprensione: nella prima sezione si inserisce il nome del
programma, nella seconda sezione vengono digitate le variabili e la
loro tipologia , ed infine viene scritto il programma vero e
proprio. Per intenderci possiamo fare un banalissimo esempio:
possiamo considerare il TP come un teatro in cui si inscena un'
opera: il titolo dell' opera e dato dalla sezione delle
intestazioni, gli attori che prendono parte all' opera vengono
presentati nella sezione dichiarativa, mentre lo svolgimento dello
spettacolo è rappresentato dal corpo del programma.
Esistono delle parole, dette riservate, a cui non può essere dato il
valore di variabile, esse infatti rappresentano dei comandi che il
TP può eseguire. Mi spiego meglio : tornando all' esempio del
teatro, non possiamo chiamare un personaggio SIPARIO oppure SCENA
,esse infatti sono parti specifiche del teatro e non possono eesere
perciò dei personaggi.
Dopo questa lunga (forse troppo ?) introduzione al TP possiamo
passare al capitolo successivo e cominciare ad analizzare le più
frequenti parole riservate e a capirne l' uso all' interno di un
programma.
Capitolo 4 : Abbozziamo un programma
Ora cominceremo con l' abbozzo di un programmino semplice semplice :
calcolare il triplo di un numero dato.
D' ora in poi le parole riservate verranno scritte in maiuscolo
E' da ricordare che alla fine di qualsiasi istruzione bisogna
inserire il punto e virgola (;). Anche se non è obbligatorio andare
a capo dopo di esso, è preferibile farlo per rendere più agevole la
lettura e la comprensione del listato.
Inoltre per inserire un commento che non interferisca con l'
esecuzione del programma bisogna inserire il commento tra
asterischi, e mettere il tutto tra parentesi tonde. Es.(* Questo è
un commento *).
Ecco qui il programma:
PROGRAM doppio; ( * Sezione dell' intestazione * )
VAR n:INTEGER; ( * Sezione delle dichiarazioni *)
begin ( * Corpo del programma *)
writeln(' Questo programma calcola il triplo di un numero dato ');
writeln;
writeln('Introduci un numero intero ');
readln(n);
n:=n*3;
writeln;
writeln(' Il triplo è ' ,n);
writeln;
writeln(' Premi enter per finire');
readln;
end.
Nella parte dichiarativa abbiamo comunicato all' elaboratore che
n è una variabile (VAR) che nel corso dell' esecuzione potrà avere
soltanto un valore INTEGER , cioè di numero intero positivo o
negativo. Esaminando successivamente il listato vedremo che la parte
esecutiva è introdotta da BEGIN ( = inizio). Poi troviamo una nuova
parola riservata, READLN ( abbreviazione Read Line = leggi riga).Essa
serve a leggere i dati di input. La sua sintassi è molto semplice :
READLN(nome variabile da leggere)
Inoltre l' istruzione READLN non seguito da alcun parametro, crea un
ciclo di attesa che dura finchè non viene premuto Invio. E' d'
obbligo alla fine di un listato, prima dell' END, poichè "congela"
lo schermo quando dobbiamo leggere il risultato dell' elaborazione.
Ad esempio, se eseguissimo il programma precedente senza READLN
finale, non potremmo esaminare i risultati della nostra operazione,
perchè il programma si arresterebbe troppo in fretta.
Un altra fondamentale istruzione è WRITELN ( abbreviazione Write
Line = scrivi riga); essa serve a stampare i dati di output sullo
schermo. La sua sintassi è :
WRITELN('Stringa di testo')
Se consideriamo l' esempio sopra vedremo che il testo tra apici (')
verrà stampato sullo schermo; nel caso in cui WRITELN venga usato
senza parametri l' elaboratore lascerà una riga vuota nell'
elaborazione. Un ulteriore esempio sull'uso di WRITELN:
WRITELN(a)
In questo caso verrà visualizzato sullo schermo il valore assunto in
quel momento dalla variabile a. Dunque, se a vale 3, allora sullo
schermo uscirà il numero 3. E' possibile anche combinare stringhe e
variabili, mettendo una virgola tra il secondo apice e la variabile:
Writeln(' Io sono ',A);
Infine, alla fine del programma (scusate il gioco di parole),
troviamo END seguito da un punto.Esso indica la fine del flusso
delle informazioni e il conseguente arresto del programma.
Capitolo 5 : I tipi di dati
Come già visto in precedenza, nel settore dichiarativo di un
programma bisogna definire il tipo di variabili che intendiamo
utilizzare nel corso del programma stesso. Esistono vari tipi di
variabili, e sono raggruppate in questo breve specchietto.
Questo schema
dimostra come ci siano vari tipi di dichiarazione dei dati. Non è
detto, però, che i tipi di dati corrispondano soltanto a cifre;
potremmo infatti di fronte a un problema che necessita di dati
alfanumerici, cioè di numeri e lettere. In questo caso dovremmo
introdurre due nuovi tipi di variabile:
1) STRING[x] : Dichiarando così un tipo di dato assumeremo che quel
dato è formato da un numero intero di x caratteri alfanumerici
(compresi gli spazi).Usato senza parametri non definisce la
lunghezza della stringa. Inoltre nel caso in cui si dichiari una
lunghezza minore del dato inserito, l' elaboratore non considererà i
cartteri che eccedono. Ad esempio, se dichiarassimo la variabile a
di tipo STRING[5] e al momento di inserire i dati digitassimo la
parola "folletto" , essa risulterebbe troncata in "folle", poichè i
caratteri in eccesso non verrebbero considerati nell' elaborazione.
2) CHAR : E' meno usata di STRING, ma qualche volta può risultare
utile. Viene usata per definire variabili da un solo carattere (
eccetto numeri ).
Capitolo 6 : Le strutture dei dati
Questa che andremo ad esaminare ora, è forse la parte più complessa
del TP, nonostante ciò, cercherò di renderla semplice poichè è la
più utile e contiene le istruzioni più usate. E' stato purtroppo
inevitabile, però, non inserire parole piuttosto "difficili" data la
specificità dell' argomento.
1-) Le strutture iterative
Il termine iterare deriva dal latino e significa "ripetere". Questa
struttura ( che è presente in tutti i linguaggi programmativi, non
solo in Pascal, N.d.A.) agisce su una operazione che deve essere
ripetuta più volte. Ne esistono vari tipi:
a) Iterazione enumerativa - Come dice la parola stessa esegue un
operazione n volte.In Pascal è indicata dal comando:
FOR a=: ni TO nf DO( * Niente punto e virgola * )
istruzione 1;
istruzione ...;
END;
Nel nostro caso ni sostituisce il numero intero dal quale si parte a
enumerare e nf sostituisce il numero fino al quale si continua a
enumerare. Dopo questa istruzione di iterazione si inseriscono le
istruzioni da ripetere racchiudendo il tutto con un END seguito da
un punto e virgola (;), poichè il flusso di informazioni non è del
tutto terminato. E' possibiile anche procedere a ritroso, contando
alla rovescia da un numero n fino ad arrivare ad un numero t:
FOR a:=n DOWNTO t DO
Ecco un semplice esempio:
PROGRAM potenza;
USES crt;
VAR a,b,c,i:INTEGER;
BEGIN
WRITELN('Inserisci un numero');
READLN(A)
WRITELN(' Inserisci esponente ');
READLN(B);
FOR I:= 1 TO b DO
c:=a*a;
END;
WRITELN('Il risultao della potenza è ' ,c);
READLN;
END.
b) Iterazione per falso - Esegue il ciclo racchiuso tra REPEAT e
UNTIL
se, e solo se, la condizione espressa da UNTIL è vera, in caso
contrario continua a ripetere le istruzioni. REPEAT
istruzione 1;
istruzione 2;
istruzione ...;
UNTIL proposizione;
N.B. Ricorda di inserire proposizioni possibili dopo UNTIL
altrimenti l'uscita dal ciclo ripetitivo non si avrà mai! ( in gergo
si dice che il computer si "impianta" e bisogna riavviarlo)
Esempio:
PROGRAM ripetizione;
USES crt;
VAR a,b:INTEGER;
BEGIN
REPEAT
WRITELN(' Inserisci un numero minore di 30 e maggiore di 10');
READLN(A);
UNTIL (A<30) AND (A>10);
READLN;
END.
c) Iterazione per vero - Esegue le informazioni racchiuse tra
WHILE DO e l' END;( il punto e virgola indica che l' END è parziale
) finché la condizione presa in esame non sia falsa.
WHILE a=3 DO
istruzione 1;
istruzione 2;
istruzione...;
END;
Questo semplice esempio spiega come il blocco di istruzioni presente
tra WHILE DO e END; venga ripetuto finché si rispetti la condizione
a=3. Nel caso in cui il valore di a fosse stato diverso da 3,
infatti, il blocco di istruzioni non sarebbe stato mai eseguito. 2-)
Le strutture selettive
A questo punto è lecito domandare se è possibile operare delle
scelte con il TP. La risposta è affermativa. Esistono due tipi di
selezione: la selezione binaria e la selezione multipla.
a) Selezione binaria - E' la più semplice: se consideriamo un numero
naturale qualsiasi e ci domandiamo se esso è pari, la risposta potrà
avere solo due alternative: Si oppure No. In Tp c'è la possibilità
di eseguire una scelta binaria tra due condizioni con il seguente
comando:
IF
THEN
ELSE
Che tradotto fa più o meno:
SE
ALLORA
ALTRIMENTI
]
Questo è quanto serve per operare ( o far operare al computer ) una
scelta. Per chiarire ulteriormente questo importante processo vedrò
di presentarvi un esempio. Costruiamo un programma che calcoli l'
area di un rettangolo SE E SOLO SE l' area stessa è minore di un
numero n ( per esempio 20) e maggiore di un nuumero m (per esempio
10);
PROGRAM area_rettangolo;
USES crt;
VAR a,b,c:INTEGER;
BEGIN
CLRSCR; ( * E' un nuovo comando.E' l' abbreviazione di CLeaR SCReen=
cancella schermo. Pulisce lo schermo. * )
WRITELN(' Inserisci base');
READLN(a);
WRITELN('Inserisci altezza');
READLN(b);
c:=a*b;
IF (c<20) AND (c>10) THEN ( * AND , insieme a OR sono gli operatori
booleani più usati in TP. Per approfondimenti
consultare l' appendice C * )
BEGIN
WRITELN('Area maggiore di 20 oppure minore di 10.');
READLN;
END ( * L' END prima dell' ELSE senza punto e virgola(;) * )
ELSE
BEGIN
WRITELN(' AREA = ',c);
READLN;
END;
READLN;
END.
E' un listato semplice, e l' unica osservazione da fare è che se
dopo IF...THEN c'è solo un istruzione può essere scritta terminando
il tutto con il solito punto e virgola(;). Tuttavia , se ce ne sono
più di una è necessario aprire un altro BEGIN e cominciare un
sottoprogramma il quale, però va terminato con l' END; che, se
seguito da ELSE non accetta il punto e virgola(;).
b) Selezione multipla - Se domandiamo ad una persona quali sono i
piatti che preferisce essa sceglierà fra un' ampia gamma di pietanze
fino a scegliere quella che soddisfi i suoi gusti. Infatti, al
contrario di prima,la selezione multipla ci fornisce illimitate
possibilità di risposta. Il comando che in TP ci permette di operare
un selezione multipla è il seguente:
CASE n of
( * Se n è stata dichiarata INTEGER * )
valore 1:BEGIN
istruzione1;
istruuzione2;
istruzione...
END;
( * Se n è stata dichiarata CHAR * )
valore x:BEGIN
istruzione1;
istruzione2;
istruzione...;
END;
ELSE
BEGIN
istruxione 1;
istruzione2;
istruzione...;
END;
END;
Nonostante la sua sintassi spaventosamente ricca, questa struttura è
di facilissima comprensione. Innanzitutto dobbiamo decidere se
dichiarare la variabile n come tipo INTEGER oppure CHAR. Se n è CHAR
dovremo usare UNA lettera seguita dai due punti(:) e dal rispettivo
sottoprogramma delimitato da BEGIN e END; . Se invece n è INTEGER
dovremo usare un numero naturale al posto di n e mettere dopo i due
punti(:) il solito sottoprogramma delimitato da BEGIN e END; .
Proviamo ora con un' esempio: un programma che generi un numero a
caso tra 1 e 10 e lo comunichi all' operatore solo se esso è uguale
a 7, 9 o 3.
PROGRAM numeri_casuali;
USES crt;
VAR a,b,c:INTEGER;
BEGIN
CLRSCR;
RANDOMIZE; ( * Inizializza,ossia azzera il generatore di numeri
casuali * )
c:=RANDOM(10); ( * Questo comando permette all' elaboratore di
generare un numero a caso compreso tra 0 e il numero indicato in
parentesi. Il massimo consentito è 255 * )
CASE c OF
7:BEGIN
WRITELN(' Il numero è ',c);
END;
9:BEGIN
WRITELN(' Il numero è ',c);
END;
3:BEGIN
WRITELN(' Il numero è ',c);
END;
ELSE
BEGIN
WRITELN(' Il numero uscito è diverso da 3 7 e 9);
END;
END;
Anche se con questo ultimo esempio abbiamo terminato il capitolo
riguardante le strutture dei dati al lettore potrebbe sembrare che
quelle poche strutture analizzate debbano esssere affiancate da
molte altre per costruire un programma relativamente complesso, e
invece secondo il teorema di Bohm - Jacopini : "Le tre strutture
matematiche che servono per creare un qualsiasi programma sono:
iterative, selettive e sequenziali." Le strutture sequenziali sono
le più lineari, poichè il flusso di dati scorre senza ripetizioni né
selezioni che abbiamo utilizzato tranquillamente nel primo
programma( quello del triplo di un numero ) senza saperlo.
Capitolo 7: Le procedure
Spesso, soprattutto in programmi complessi e piuttosto elaborati, ci
troviamo dinanzi al problema di ripetere uno stesso procedimento più
volte all'interno dello stesso programma. La soluzione a questo
problema è data dal fatto che possiamo memorizzare una procedura e
ripeterla a piacimento durante la stesura del programma. Questa
utilissima funzione ha la seguente sintassi:
PROCEDURE nomeprocedura;
BEGIN
blocco istruzioni
....
....
END;
E' importante dire che i precedenti comandi devono essere digitati
tra il settore dichiarativo e il corpo del programma (per
intenderci, prima del BEGIN iniziale). Per richiamare una procedura
durante il programma bisogna digitare il nome della procedura
seguito da un punto e virgola(;).
Esempio: Modificare il programma precedente inserendo una procedura.
PROGRAM numeri_casuali;
USES crt;
VAR a,b,c:INTEGER;
PROCEDURE output; ( * Qualsiasi nome va bene * )
BEGIN
WRITELN(' Il numero estratto è ',c);
READLN;
END;
BEGIN
CLRSCR;
RANDOMIZE;
c:=RANDOM(10); ( * Questo comando permette all' elaboratore di
generare un numero a caso compreso tra 0 e il numero indicato in
parentesi. Il massimo consentito è 255 * )
CASE c OF
7:BEGIN
output;
END;
9:BEGIN
output;
END;
3:BEGIN
output;
END;
ELSE
BEGIN
WRITELN(' Il numero uscito è diverso da 3 7 e 9);
END;
END;
In questo caso una procedura è addirittura una perdita di tempo
poichè le istruzioni da riscrivere sono poche ma in casi più
complessi fanno risparmiare tempo e fatica.
A P P E N D I C E A GLI ERRORI DEL TP
Spesso (fin troppo spesso), nella digitazione del programma è
probabile che siano presenti errori: mancato punto e virgola(;) alla
fine di un istruzione, valore alfanumerico dato ad una variabile
numerica, ecc. Per correggerli il TP , al momento della
compilazione, mostra in alto dei messaggi di errore che,
malauguratamente per chi non lo conosce, sono in inglese! Qui di
seguito c'è una brevissima guida su come correggere gli errori più
comuni: N.B. Nel caso in cui l' errore non sia presente nella
tabella, con un buon vocabolario di inglese si può tentare di capire
l' origine dell' errore e quindi correggerlo.
1) Out of memory : Il compilatore non ha abbastanza memoria per
eseguire o compilare il programma. Provare a cambiare destinazione
del codice eseguibile. (Vedi Capitolo1)
2) Unknown identifier : Identificatore sconosciuto. Non abbiamo
dichiarato una variabile.
3) Duplicate identifier: Identificatore duplicato. Due variabili
identiche. Cambiarne una.
4) Syntax error: E' sbagilata la sintassi di un istruzione.
5) Type mismatch: Si è dichiarata una variabile diversamente da come
si è considerata. Ad esempio si è caricato il valore 1 in una
variabile di tipo CHAR;
6) String constant exceeds lines: Si è dimenticato di mettere la
stringa di testo fra apici.
7) Unespected end of file: Il numero dei BEGIN non coincide col
numero degli END. Verificarli.
A P P E N D I C E B
Di seguito troverete dei comandi che potrebbero tornare utili in
qualche programmino.
1) TEXTCOLOR(n)= Colora il testo che segue di un colore definito da
n che è un numero da 0 a 15. I numeri maggiori di quindici producono
un effetto lampeggiante. Ecco gli abbinamenti numeri-colori.
2) TEXTBACKGROUND(n)= Colora lo sfondo d un colore definito da n.
Sintassi simile a TEXTCOLOR.
3) ABS(x) = Calcola il valore assoluto del numero x;
4) SQRT(x) = Calcola la radice quadrata di x;
5) DELAY(n) = Crea un ciclo di attesa lungo n ( miliisecondi)
A P P E N D I C E C Gli operatori booleani e i segni di
operazione:
Come già visto in precedenza spesso in TP ci serviamo di operatori
quali AND oppure OR ( letteralmente 'e' ed 'o'). Essi , introdotti
dal matematico inglese George Boole, servono a congiungere due
proposizioni. Ora mi spiego meglio. Prendiamo l' esempio fatto
nelllo spiegare l'iterazione per falso : l' operatore AND infatti
serve a dettare più di una condizione e farla avverare solo se
entrambi sono soddisfatte. Se inserissimo il numero 7 ad esempio, l'
elaboretore ci ripeterà la "domanda", poichè il numero inserito, non
soddifa le due condizioni: " il numero deve essere minore di 30 e
maggiore di 10 ".
I segni di operazione in TP , sono i seguenti:
+ = ADDIZIONE
- = SOTTRAZIONE
* = MOLTIPLICAZIONE
/ = DIVISIONE
MOD = RESTO DELLA DIVISIONE ( MOD può essere usato soltanto se i
numeri da dividere sono di tipo INTEGER )
Inoltre per indicare il rapporto fra due cifre ci serviuamo dei
seguenti simboli matematici :
< = MINORE
> = MAGGIORE
= = UGUALE
'=>'= MAGGIORE O UGUALE
<== MINORE O UGUALE
<> = DIVERSO DA ... Pagina :
1
|
2 |
3 |
4
|