operatori di espressione di controllo (booleani) and (operatore binario) or (operatore binario) not...
Embed Size (px)
TRANSCRIPT


Operatori di espressione di controllo (booleani)
• AND (operatore binario)
• OR (operatore binario)
• NOT (operatore unario)
• (IN) (operatore binario)

REGOLA SINTATTICA PER IN [ ]
espressione IN Insieme di valori
IF Ch IN [‘A’..’Z’,’1..9’] THEN …………………..

Gli operatori binari
AND Falso Vero OR Falso Vero
Falso Falso Falso Falso Falso Vero
Vero Falso Vero Vero Vero Vero
NOT
Falso Vero
Vero Falso
L’operatore unario

ESEMPI
1. WHILE (A <> 0) AND (B <> 0) DO
corpo del ciclo
2. WHILE NOT ((A = 0) OR (B = 0)) DO
corpo del ciclo

Gerarchia degli operatori
( )
NOT
* / DIV MOD AND
+ - OR
< <= = <> > >= IN

Espressioni booleane

Fino a quando non chiarisco il
concetto o voi capite, la lezione prosegue
Fino a quando chiarisco il concetto e voi capite, la lezione prosegue
UNTIL NOT chiarisco OR capite
REPEAT La lezione prosegue
UNTIL chiarisco AND capite
REPEAT La lezione prosegue

Realizzazione di ciclicicli
• preprocessing– condizioni di ingresso
• istruzione di ciclo– espressione di controllo– corpo del ciclo– condizioni di uscita
• postprocessing

Valutiamo alcuni esempi (1- 1)WHILE (A <> 0) AND (B <> 0) DO
corpo del ciclo
(A <> 0) AND (B <> 0) = VERO
(A <> 0) = VERO e (B <> 0) = VERO
Il corpo del ciclo viene eseguito fino a quando A è diverso
da zero e B è diverso da zero
L’esecuzione del ciclo si interrompe per A uguale a zeroL’esecuzione del ciclo si interrompe per B uguale a zero

Valutiamo alcuni esempi (2 - 1)WHILE NOT ((A = 0) OR (B = 0)) DO
corpo del ciclo
NOT ((A = 0) OR (B = 0)) = VERO
(A = 0) OR (B = 0) = FALSO
(A = 0) = FALSO e (B = 0) = FALSO
Il corpo del ciclo viene eseguito fino a quando A è diverso
da zero e B è diverso da zero
L’esecuzione del ciclo si interrompe per A uguale a zeroL’esecuzione del ciclo si interrompe per B uguale a zero

Teorema di De Morgan(condizioni di uscita)
ESPRESSIONEESPRESSIONE
• Esp1 AND Esp2
• Esp1 OR Esp2
COMPLEMENTOCOMPLEMENTO
• NOT Esp1 OR NOT Esp2
• NOT Esp1 AND NOT Esp2

Valutiamo alcuni esempi (1 - 2)
WHILE (A <> 0) AND (B <> 0) DOcorpo del ciclo
condizione di ingresso
Esp1 = (A <> 0) AND Esp2 = (B <> 0)
(A <> 0) = VERO e (B <> 0) = VERO
condizione di uscita
NOT Esp1 = (A = 0) OR NOT Esp2 = (B = 0)
(A = 0) = VERO o (B = 0) = VERO
ESPRESSIONEESPRESSIONEEsp1 AND Esp2Esp1 OR Esp2
COMPLEMENTOCOMPLEMENTONOT Esp1 OR NOT Esp2 NOT Esp1 AND NOT Esp2

Valutiamo alcuni esempi (2 - 2)WHILE NOT ((A = 0) OR (B = 0)) DO
corpo del ciclo condizione di ingresso
NOT ( Esp1 = (A = 0) OR Esp2 = (B = 0) )
(NOT Esp1) = (A<>0) AND (NOT Esp2) = (B<>0)
(A <> 0) = VERO e (B <> 0) = VERO
condizione di uscita
NOT(NOT(Esp1 = (A = 0)) OR NOT(NOT(Esp2 = (B = 0))
Esp1 = (A = 0) OR Esp2 = (B = 0)
(A = 0) = VERO o (B = 0) = VERO
ESPRESSIONEESPRESSIONEEsp1 AND Esp2Esp1 OR Esp2
COMPLEMENTOCOMPLEMENTONOT Esp1 OR NOT Esp2 NOT Esp1 AND NOT Esp2

Esempio di algoritmo (1)DESCRIZIONE
Verificare se tre valori numerici inseriti possono essere considerati come le lunghezze dei lati di un triangolo
read (L1, L2, L3)
WHILE NOT ( (L1 < L2 + L3) AND (L2 < L1 + L3) AND
(L3 < L1 + L2) ) DO
write (Valori non validi - Inserire di nuovo)
read (L1, L2, L3)
END

Esempio di algoritmo (2)DESCRIZIONE
Verificare se tre valori numerici inseriti possono essere considerati come le lunghezze dei lati di un triangolo
read (L1, L2, L3)
WHILE ( (L1 >= L2 + L3) OR (L2 >= L1 + L3) OR
(L3 >= L1 + L2) ) DO
write (Valori non validi - Inserire di nuovo)
read (L1, L2, L3)
END

Fino a quando chiarisco il concetto o voi capite
Fino a quando non chiarisco il
concetto e voi non capite
Proseguo la lezione:
WHILE chiarisco OR capite La lezione prosegue;
WHILE (NOT chiarisco AND NOT capite) La lezione prosegue;
ESPRESSIONEESPRESSIONEEsp1 AND Esp2Esp1 OR Esp2
COMPLEMENTOCOMPLEMENTONOT Esp1 OR NOT Esp2 NOT Esp1 AND NOT Esp2

Valutiamo gli esempi (3 - 1)REPEAT
corpo del cicloUNTIL NOT ((A <> 0) AND (B <> 0))
NOT((A <> 0) AND (B <> 0)) = FALSO
(A <> 0) AND (B <> 0) = VERO
(A <> 0) = VERO e (B <> 0) = VERO
Il corpo del ciclo viene eseguito fino a quando A è diverso da zero e B è diverso da zero
L’esecuzione del ciclo si interrompe per A uguale a zeroL’esecuzione del ciclo si interrompe per B uguale a zero

Valutiamo gli esempi (4 - 1)REPEAT
corpo del cicloUNTIL (A = 0) OR (B = 0)
(A = 0) OR (B = 0) = FALSO
(A = 0) = FALSO e (B = 0) = FALSO
Il corpo del ciclo viene eseguito fino a quando A è diverso
da zero e B è diverso da zero
L’esecuzione del ciclo si interrompe per A uguale a zeroL’esecuzione del ciclo si interrompe per B uguale a zero

Esempio di algoritmo (3)DESCRIZIONE
Verificare se tre valori numerici inseriti possono essere considerati come le lunghezze dei lati di un triangolo
L1 L2 L3 0
REPEAT
write (Valori non validi - Inserire di nuovo)
read (L1, L2, L3)
UNTIL (L1 < L2 + L3) AND (L2 < L1 + L3) AND
(L3 < L1 + L2)

Esempio di algoritmo (4)DESCRIZIONE
Verificare se tre valori numerici inseriti possono essere considerati come le lunghezze dei lati di un triangolo
L1 L2 L3 0
REPEAT
write (Valori non validi - Inserire di nuovo)
read (L1, L2, L3)
UNTIL NOT ( (L1 >= L2 + L3) OR (L2 >= L1 + L3) OR
(L3 >= L1 + L2) )

ESEMPI
3. REPEAT
corpo del ciclo
UNTIL NOT ((A <> 0) AND (B <> 0))
4. REPEAT
corpo del ciclo
UNTIL (A = 0) OR (B = 0)

Array elementari

Tipi di variabile in PascalTipi di variabile in Pascal
• Tipi predefiniti– integer– real– char
• Tipi utente (esempiesempi)– giorno (subrange)– indice (subrange)– ….

Tipo SUBRANGE SUBRANGE (sotto-intervallo)
• intervallo di valori di tipo predefinito (integer, real, ecc.)– valore minimo– valore massimo– minimo < massimominimo < massimo
costante costante..tipo subrange
SINTASSISINTASSI

Esempi di Subrange
TYPE
GiornoType = 1 . . 31;
IndiceType = 1 . . 100;
VAR
Giorno: GiornoType;
Indice: IndiceType;

Variabili SCALARISCALARI
• intero
• reale
• carattere
• giorno
• indice
• ……..
• integer
• real
• char
• GiornoType
• IndiceType
• ……..
variabili che possono assumere un solo valore ad un dato istante

Variabili STRUTTURATESTRUTTURATEvariabili che contengono variabili componenti
Meccanismo di accesso alle variabili componenti
è il modo in cui ciascun componente di una variabile strutturata può essere manipolato
come se fosse una variabile scalare

ARRAYARRAYvariabile strutturata che contiene variabili
componenti tutte dello stesso tipo (omogenee)il cui meccanismo di accesso consiste di una o più
espressioni di SUBRANGESUBRANGE
ELEMENTO
una variabile componente di un ARRAY

SINTASSIArray mono-dimensionale
ARRAY subrange[
array mono-dimensionale
] OF type
Accesso ad un elemento
identificatore espressione[
accesso adelemento
]
ArrayDiReali = ARRAY [1..10] OF real;

Esempio 1TYPE TipoIndice = 1 . . 5; ArrayDiReali = ARRAY [TipoIndice] OF real;VAR Reali: ArrayDiReali; Indice: TipoIndice;BEGINIndice := 3;Reali[1] := 2.5;Reali[2] := 3.14;Reali[Indice] := 6.0;Reali[4] := Reali[1];Reali[5] := Reali[Indice];END.

Risultato dell’Esempio 1
2.5 3.14 6.0 2.5 6.0
[1] [2] [3] [4] [5]
Reali

Esempio 2TYPEIndiceType = 1 . . 5;IntArray = ARRAY [IndiceType] OF integer;VAR Interi: IntArray; Indice: IndiceType;BEGINwriteln (‘Inserisci 5 interi’);FOR Indice := 1 TO 5 DO read (Interi[Indice] : 6);readln;FOR Indice := 5 DOWNTO 1 DO write (Interi[Indice] : 6);writeln (‘I numeri in ordine inverso sono’);writeln;END.

Risultato dell’Esempio 2
5 10 54 1 32
[1] [2] [3] [4] [5]
Interi
Se i valori inseriti sono:
5 10 54 1 32
il contenuto dell’array è:
e la stampa finale è:
32 1 54 10 5

Esempio 3
Assegnato un Array contenente un serie di valori numerici si vuole che tali valori siano riscritti nell’Array in ordine inverso
Se il contenuto iniziale dell’array è
50 40 30 20 10
il contenuto finale deve essere
10 20 30 40 5

Esempio 3PROGRAM Arr(input,output);TYPEIndiceType = 1..5;IntArray = ARRAY [IndiceType] OF integer;VAR Interi: IntArray; Indice: IndiceType;PROCEDURE Inverti (VAR Inter: IntArray);VAR Ind: Integer; Invert, Temp: integer;BEGINInvert := 6;FOR Ind := 1 TO Invert DIV 2 DO BEGIN Temp:=Inter[Invert - Ind]; Inter[Invert - Ind]:= Inter[Ind]; Inter[Ind]:=Temp; ENDEND;
BEGINInteri [1]:=50; Interi [2]:=40; Interi [3]:=30;Interi [4]:=20; Interi [5]:=10;writeln ('I numeri in ordine diretto sono');FOR Indice := 1 TO 5 DO write (Interi[Indice]: 5);writeln;Inverti(Interi);writeln ('I numeri in ordine inverso sono');FOR Indice := 1 TO 5 DO write (Interi[Indice]: 5);writeln;readlnEND.

Risultato dell’Esempio 3
10 20 30 40 50
[1] [2] [3] [4] [5]Interi
I valori inseriti sono:
50 40 30 20 10 il contenuto iniziale dell’array è:
e la stampa finale è: 10 20 30 40 50
50 40 30 20 10
[1] [2] [3] [4] [5]Interi
dopo l’esecuzione della procedura diventa:

Nota
Le variabili strutturate possono essere parametri di procedure così come le variabili predefinite. Ciò significa che possono essere passate per valore o per variabile.

ESERCIZIO
Dato un Array di N interi eliminare da esso i numeri dispari sostituendoli con il primo pari che li segue. Si ottiene così una Array di K interi con K N
Es.A[1 2 4 5 7 9 8 2] -> A[2 4 8 2 ]