pascal la selezione: if -...
TRANSCRIPT
PASCAL
LA SELEZIONE: IF TRATTO DA CAMAGNI-NIKOLASSY, CORSO DI INFORMATICA, VOL. 1, HOEPLI
Informatica
La selezione semplice:
if..then
La selezione semplice: if..then
L’istruzione di selezione semplice permette l’esecuzione di alcune istruzioni solo se il valore di istruzione di test (o condizione) ha esito positivo (o VERO)
In caso contrario (FALSO) non viene eseguita nessuna istruzione
If..then in Pascal
La codifica in linguaggio Pascal è:
If..then: Codifica vs Schema a blocchi
La codifica in linguaggio Pascal è:
VS
La condizione
Esempio: Calcolo di un valore assoluto
di un numero (Schema a blocchi)
Scriviamo un programma che sia in grado di stampare a monitor il
numero letto senza il segno
Esempio: Calcolo di un valore assoluto
di un numero (Codifica Pascal)
Esempio: Lettura di una frazione
Inizio/fine if
Come si fa a dichiarare l’inizio e la fine dell’if ?
Se il ramo then contiene una sola istruzione è sufficiente
inserire al termine dell’istruzione stessa “ ; “
Se il ramo then contiene più istruzioni è necessario
inserire “begin…end;” rispettivamente prima e dopo il
blocco di istruzioni presenti nel ramo
L’indentamento
Esercizio: ordinamento
Ordinare tre numeri in senso crescente:
Leggere tre numeri interi
Orinarli in senso crescente
Scrivere a monitor i tre numeri ordinati
Soluzione: ordinamento
Soluzione: ordinamento
Soluzione: ordinamento
Soluzione: ordinamento
Conclusioni
Esercizi 1-5 pag. 322
Esercizi 6-12 pag. 322
La selezione doppia:
if..then..else
La selezione doppia: if..then..else
Si ha la possibilità di far eseguire al calcolatore alternativamente alcune istruzioni in base al valore dell’istruzione di test (o condizione)
If..then..else in Pascal
If..then..else: Codifica Pascal vs schema a blocchi
VS
Esempio
Leggiamo un numero da tastiera e indichiamo se il numero è positivo o negativo
Dove va il “;” ?
Dove va il “;” ? (2)
Quando le istruzioni presenti nel ramo then o nel
ramo else sono più di una è obbligatorio inserire
begin…end rispettivamente prima e dopo il blocco
di istruzioni
Ad eccezione dell’ultimo blocco, quello nell’else o
l’ultimo della catena di if annidati (che vedremo in
seguito), che deve essere inserito tra le parole
chiave begin…end;
Esempio: Maggiore o minore?
Leggiamo due numeri e individuiamo il maggiore
Operatori div e mod
Div Mod
Esegue la divisione tra interi Calcola il resto della divisione tra interi
Il risultato è un itero Il risultato è un itero
Es: 7 div 2 = 3 Es: 7 mod 2 = 1
7 : 2
3 6
1 7 div 2 7 mod 2
Esempio: div e mod
Esercizio: pari o dispari?
Scrivere un programma che sia in grado di
determinare se un numero è pari o dispari:
Leggere da tastiera un numero intero
Verificare se è pari o dispari
Comunicare all’utente il risultato
Usare l’operatore div
Soluzione: pari o dispari?
Da notare che…
La condizione scritta nell’istruzione if viene
racchiusa tra parentesi tonde:
Questa notazione sarà obbligatoria per le
condizioni composte.
Esercizio: Pari o dispari (2)
Esegui l’esercizio precedente utilizzando la
funzione mod
Funzione int()
Applicata a un numero reale restituisce come
risultato la sola parte intera:
num int(num)
3,56 3
56,3445443 56
0,23 0
9,99 9
Esercizio: Pari o dispari (3)
Esegui l’esercizio precedente utilizzando la
funzione int()
Conclusioni
Esercizi1-6 pag. 329
Esercizi 7-11 pag. 329
Operatori logici:
AND, OR e NOT
Variabili booleane
Una condizione logica è un’istruzione che ha come
risultato solo due possibili alternative: VERO o FALSO
Variabili che possono memorizzare solo i valori VERO
(TRUE) o FALSO (FALSE) sono definite di tipo boolean
Esempio: utilizzo di una variabile booleana
Per migliorare la leggibilità del codice si può anche scrivere:
Esempio: operatore di disuguaglianza
Gli operatori logici
Le variabili boolean si chiamano così in onore del
matematico inglese George Boole
Boole ha studiato e definito le operazioni possibili
su di esse, e sono:
La negazione NOT
Il prodotto (o congiunzione) AND
La somma (o disgiunzione) OR
La negazione NOT
L’operazione di negazione esegue il cambiamento del
valore della variabile.
Ad esempio eseguendo si ottiene:
NOT viene utilizzato per invertire il significato della
condizione
Esempio: piove o non piove?
Prodotto logico AND
Il prodotto logico tra due variabili ha come risultato
il valore VERO solo se entrambe le variabili hanno
valore VERO
L’operatore AND può essere descritto mediante una
tabella di verità
Esempio: AND
Analizziamo la seguente espressione e individuiamo
quando l’esito dell’espressione ha valore VERO:
(A>10)and(A<20) = TRUE se e solo se 10<A<20
Esempio: paganti al cinema
A un cinema i bambini con meno di 10 anni e gli
anziani con più di 80 anni non pagano il biglietto.
Scriviamo un problema che, in base all’età, indichi
se si ha diritto all’ingresso gratuito.
Svolgimento: paganti al cinema
La somma logica OR
La somma logica tra due variabili ha come risultato
il valore VERO anche se solo uno dei due termini ha
valore VERO
La tabella di verità dell’OR è la seguente:
L’unico caso in cui il risultato è FALSO è quando
entrambe le variabili hanno valore FALSO
Esempio: paganti al cinema (2)
Ripetiamo l’esercizio precedente usando OR
A un cinema i bambini con meno di 10 anni e gli
anziani con più di 80 anni non pagano il biglietto.
Scriviamo un problema che, in base all’età, indichi se
si ha diritto all’ingresso gratuito.
Soluzione: paganti al cinema (2)
Chi “conta” di più?
Relazione d’ordine
Il valore VERO è maggiore del valore FALSO:
VERO>FALSO
Priorità nell’espressione (senza parentesi)
NOT precede l’AND
l’AND precede l’OR
1. A or B and C
2. (A or B) and C
3. A or B and not C
In queste espressioni
quali operatori vengono
eseguiti prima?
Priorità nell’espressione
Esplicitando le priorità con le parentesi si ha:
1. A or B and C
2. (A or B) and C
3. A or B and not C
1. A or (B and C)
2. (A or B) and C
3. A or [B and (not C)]
Priorità nell’espressione (2)
Per meglio comprendere la priorità possiamo fare
le seguenti sostituzioni:
not -
or +
and *
1. A or B and C
2. (A or B) and C
3. A or B and not C
1. A + B * C
2. (A + B) * C
3. A + B * -C
Conclusioni
Esercizi pag. 336
Esercizi pag. 336
La selezione nidificata
(o annidata)
La selezione nidificata (o annidata)
Nei rami delle istruzioni di selezione è possibile
eseguire qualunque tipo di istruzione
Quindi si può anche eseguire un’istruzione di selezione
Si ottiene dunque una selezione dentro una selezione
Schema a blocchi vs codifica Pascal
Esempio: Pari o dispari?
Riscriviamo il programma che individua se un
numero è pari o dispari dopo aver verificato che il
numero letto sia diverso da 0
Usiamo la funzione mod per controllare il resto
della divisione per 2 (num mod 2)
Se è uguale a 0 allora il numero è pari
Se è uguale a 1 allora il numero è dispari
Soluzione: diagramma a blocchi
Soluzione: codifica Pascal
Selezione nidificata in entrambi i rami
Possiamo inserire un’istruzione di selezione anche in
entrambi i rami (sia in then, sia in else)
Selezione in entrambi i rami: codifica Pascal
Lo schema precedente tradotto in Pascal diventa:
Esempio: Maggiore di tre numeri
Leggiamo tre numeri da tastiera e individuiamo il
maggiore
Soluzione: schema a blocchi
Soluzione: Codice Pascal
Esempio: Orafo imbroglione
Scoprire la moneta più leggera tra le quattro
prodotte da un “orafo imbroglione” che invece di
realizzarle tutte dello stesso peso sottrae una parte
di oro da una di esse.
Noi per individuarla abbiamo a disposizione solo
tre pesate.
Soluzione: orafo imbroglione
Esercizi 1-7, pag. 344
Esercizi 8-11, pag. 344