|
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.
_______________________________________________________________________
| Nome tipo | Intervallo consentito | commenti |
|----------------|------------------------------|------------------------|
| INTEGER | -32768 / +32767 | numeri interi |
| | | (positivi e negativi) |
|----------------|------------------------------|------------------------|
| BYTE | 0 /255 | numeri interi |
|________________|______________________________|________________________|
| | | |
| WORD | 0 / 65535 | numeri interi |
|________________|______________________________|________________________|
| | | numeri reali |
| REAL | 2.9x10^-36 / 1.5 x 10^35 | (positivi e negativi) |
|________________|______________________________|________________________|
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 ).
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.
|
|