Codice sorgente
Program password;
Uses Crt;
Var parola:string[40];
begin
clrscr;
writeln(‘Immettere la password: ‘);
readln(parola);
if parola=’Pascal’ Then (*Se parola=Pascal, allora…*)
writeln(‘Bravo!’)
else (*Altrimenti, esegui questo:*)
begin
TextColor(5);
TextBackGround(15);
writeln(‘Sbagliato!’);
end;
readln
end.
Come si vede, il costrutto if…then…else, corrisponde all’italiano se…allora…altrimenti. Serve per far eseguire al programma un ‘controllo’: in questo caso, il programma deve ‘controllare’ se la parola immessa è uguale è ‘Pascal’ ed in quel caso, eseguire un blocco di istruzioni.
Il costrutto If è tipico di tutti i linguaggi di programmazione ed è molto utile: è quasi impossibile trovare un programma senza almeno un If. E’ la struttura di controllo per eccellenza.
In questo caso, dopo if va messa una espressione di comparazione. Le più frequenti sono:
= uguale >= maggiore o uguale <= minore o uguale diverso.
Dopo Then viene un ciclo di istruzioni, che, se composto da una solo funzione, non necessita di un begin…end (ossia la dichiarazione di un blocco di istruzioni). Prima di else, che si può anche tralasciare, non ci vuole mai il punto e virgola. Il ciclo di istruzioni dopo else ha la stessa composizione di quello che succede al Then, ma alla fine è di dovere un ;.
In questo esempio ho usato anche le istruzioni TextColor() e TextBackGround(), che servono, rispettivamente, per cambiare il colore al testo o allo sfondo del testo (5=rosso, 15=bianco).
If nidificati
Codice sorgente
Program password;
Uses Crt;
Var parola:string[40];
begin
clrscr;
writeln(‘Immettere una parola: ‘);
readln(parola);
if parola’Pascal’ Then
if parola=’Ciao’ Then
writeln(‘Ciao pure a te!’)
else
writeln(‘Non saluti?’)
else
begin
TextColor(5);
TextBackGround(15);
writeln(‘Giusto!’);
end;
readln
end.
Piccola osservazione prima di iniziare: il numero indicato fra parentesi quadre accanto alla parola string indica che le variabili stringa dichiarate con quel tipo non possono avere più di 40 caratteri. In genere, si usa questo procedimento per restringere il numero di bytes occupati per un programma, dato una stringa normale contiene fino a 255 caratteri.
Gli if cosiddetti nidificati sono solo delle strutture if dentro alter strutture if. Una struttura iterativa non ha bisogno della dichiarazione di un blocco di istruzioni (begin…end) e mantiene le stesse regole del punto e virgola. Nonostante ciò, non è assolutamente sbagliato scrivere:
Codice sorgente
if parola’Pascal’ Then
begin
if parola=’Ciao’ Then
writeln(‘Ciao pure a te!’)
else
writeln(‘Non saluti?’);
end
else
begin
TextColor(5);
TextBackGround(15);
writeln(‘Giusto!’);
end;
Connettivi logici
Con la struttura if…then…else, eì possibile usare i connettivi logici ‘e’, ‘o inclusivo’ e ‘o esclusivo’. Ogni condizione deve essere racchiusa tra parantesi. Se, per esempio, scriviamo:
Codice sorgente
if (a=b) and (b<c) then
… (*Blocco di istruzioni numero 1*)
else
begin
if (aa) then
… (*Blocco di istruzioni numero 2*)
if (c>a) xor (b=c) Then
… (*Blocco di istruzioni numero 3*)
end;
Il blocco di istruzioni 1 viene eseguito se e solo se a è uguale a b e b è minore di c, ossia quando entrambe le espressioni sono vere.
Il blocco di istruzioni 2 viene eseguito se a è minore di b o c è maggiore di a, ossia quando almeno una delle espressioni è vera.
Il blocco di istruzioni 3 viene eseguito quando una e una soltanto delle espressioni è vera: se entrambe sono vere, il ciclo di istruzioni non viene eseguito.
Altri operatori e connettivi logici
Esistono altri operatori rispetto a quelli visti prima, qui ce n’è un breve elenco:
not : preposto ad un valore booleano o ad un’espressione, restituisce come valore il contrario dell’espressione designata.
Codice sorgente
var t:boolean;
…
t:=not true; (*t=false*)
if not (a>b) then (*if (ab then*)
…
if (a>b) and not (b=c) (*if (a>b) and (bc) then*)
shr e shl: sono chiamati shift. Operano, cioè uno spostamento verso destra o verso sinistra di x bit (vedi appendice 1).
2 shr 1 = 4
2 shl 1 = 1
8 shl 2 = 2

