Operatori di espressione di controllo (booleani) AND (operatore binario) OR (operatore binario) NOT...

Preview:

Citation preview

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 ]

Recommended