CAPITOLO 7
Operatori di espressione di controllo (booleani) AND (operatore binario) OR (operatore binario) NOT (operatore unario) (IN) (operatore binario)
IF Ch IN [‘A’..’Z’,’1..9’] THEN ………………….. REGOLA SINTATTICA PER IN [ ] espressione IN Insieme di valori IF Ch IN [‘A’..’Z’,’1..9’] THEN …………………..
Gli operatori binari L’operatore unario 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 WHILE (A <> 0) AND (B <> 0) DO corpo del ciclo WHILE NOT ((A = 0) OR (B = 0)) DO
Gerarchia degli operatori ( ) NOT * / DIV MOD AND + - OR < <= = <> > >= IN
Espressioni booleane
Fino a quando chiarisco il concetto e voi capite, la lezione prosegue Fino a quando non chiarisco il concetto o voi capite, la lezione prosegue UNTIL NOT chiarisco OR capite REPEAT La lezione prosegue Fino a quando chiarisco il concetto e voi capite, la lezione prosegue UNTIL chiarisco AND capite REPEAT La lezione prosegue
Realizzazione di cicli 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 zero L’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 zero L’esecuzione del ciclo si interrompe per B uguale a zero
Teorema di De Morgan (condizioni di uscita) ESPRESSIONE Esp1 AND Esp2 Esp1 OR Esp2 COMPLEMENTO NOT Esp1 OR NOT Esp2 NOT Esp1 AND NOT Esp2
Valutiamo alcuni esempi (1 - 2) ESPRESSIONE Esp1 AND Esp2 Esp1 OR Esp2 COMPLEMENTO NOT Esp1 OR NOT Esp2 NOT Esp1 AND NOT Esp2 WHILE (A <> 0) AND (B <> 0) DO corpo 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
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 ESPRESSIONE Esp1 AND Esp2 Esp1 OR Esp2 COMPLEMENTO NOT 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) 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) END
Fino a quando chiarisco il concetto o voi capite Proseguo la lezione: ESPRESSIONE Esp1 AND Esp2 Esp1 OR Esp2 COMPLEMENTO NOT Esp1 OR NOT Esp2 NOT Esp1 AND NOT Esp2 Fino a quando chiarisco il concetto o voi capite WHILE chiarisco OR capite La lezione prosegue; Fino a quando non chiarisco il concetto e voi non capite WHILE (NOT chiarisco AND NOT capite) La lezione prosegue;
Valutiamo gli esempi (3 - 1) REPEAT corpo del ciclo UNTIL 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 zero L’esecuzione del ciclo si interrompe per B uguale a zero
Valutiamo gli esempi (4 - 1) REPEAT corpo del ciclo UNTIL (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 zero L’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 REPEAT corpo del ciclo UNTIL NOT ((A <> 0) AND (B <> 0)) UNTIL (A = 0) OR (B = 0)
Array elementari
Tipi di variabile in Pascal Tipi predefiniti integer real char Tipi utente (esempi) giorno (subrange) indice (subrange) ….
Tipo SUBRANGE (sotto-intervallo) intervallo di valori di tipo predefinito (integer, real, ecc.) valore minimo valore massimo minimo < massimo SINTASSI tipo subrange costante ..
Esempi di Subrange TYPE GiornoType = 1 . . 31; IndiceType = 1 . . 100; VAR Giorno: GiornoType; Indice: IndiceType;
variabili che possono assumere un solo valore ad un dato istante Variabili SCALARI variabili che possono assumere un solo valore ad un dato istante intero reale carattere giorno indice …….. integer real char GiornoType IndiceType ……..
Variabili STRUTTURATE variabili 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
una variabile componente di un ARRAY variabile strutturata che contiene variabili componenti tutte dello stesso tipo (omogenee) il cui meccanismo di accesso consiste di una o più espressioni di SUBRANGE ELEMENTO una variabile componente di un ARRAY
SINTASSI Array mono-dimensionale array mono- dimensionale ARRAY [ subrange ] OF type ArrayDiReali = ARRAY [1..10] OF real; Accesso ad un elemento accesso ad elemento identificatore [ espressione ]
Esempio 1 TYPE TipoIndice = 1 . . 5; ArrayDiReali = ARRAY [TipoIndice] OF real; VAR Reali: ArrayDiReali; Indice: TipoIndice; BEGIN Indice := 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 [1] [2] [3] [4] [5] Reali 2.5 3.14 6.0 2.5 6.0
Esempio 2 TYPE IndiceType = 1 . . 5; IntArray = ARRAY [IndiceType] OF integer; VAR Interi: IntArray; Indice: IndiceType; BEGIN writeln (‘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 Se i valori inseriti sono: 5 10 54 1 32 il contenuto dell’array è: [1] [2] [3] [4] [5] Interi 5 10 54 1 32 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 3 PROGRAM Arr(input,output); TYPE IndiceType = 1..5; IntArray = ARRAY [IndiceType] OF integer; VAR Interi: IntArray; Indice: IndiceType; PROCEDURE Inverti (VAR Inter: IntArray); Ind: Integer; Invert, Temp: integer; BEGIN Invert := 6; FOR Ind := 1 TO Invert DIV 2 DO Temp:=Inter[Invert - Ind]; Inter[Invert - Ind]:= Inter[Ind]; Inter[Ind]:=Temp; END END; BEGIN Interi [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'); readln END.
Risultato dell’Esempio 3 I valori inseriti sono: 50 40 30 20 10 il contenuto iniziale dell’array è: [1] [2] [3] [4] [5] Interi 50 40 30 20 10 dopo l’esecuzione della procedura diventa: [1] [2] [3] [4] [5] Interi 10 20 30 40 50 e la stampa finale è: 10 20 30 40 50
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 ]