Pseudo codice Pseudo codice ■ linguaggio testuale ■ mix di

Pseudo codice
Pseudo codice
linguaggio testuale
mix di linguaggio naturale ed elementi linguistici con
sintassi ben definita e semantica univoca
elementi
espressioni
istruzioni
Paolo Bison
Fondamenti di Informatica 1
A.A. 2004/05
Università di Padova
Pseudo codice, Paolo Bison, A.A. 2004-05, 2004-10-13 – p.1/44
Espressioni
Pseudo codice, Paolo Bison, A.A. 2004-05, 2004-10-13 – p.2/44
Come si scrivono le espressioni?
elementi del linguaggio la cui valutazione fornisce un
determinato valore
costituite, in prima approssimazione, da operandi ed
operatori
espressioni matematiche
consideriamo
operandi a valore intero
operatori aritmetici (espressioni numeriche)
+ − × /
operatori di confronto (espressioni logiche/predicati)
= 6= > ≥ < ≤
sintassi
descrizione di come si scrivono espressioni corrette
combinando simboli base (cifre, operatori, parentesi)
notazioni
infissa op1 oper op2
5 + 3 / 9
postfissa op1 op2 oper
5 3 + 9 /
prefissa oper op1 op2
/ + 5 3 9
Pseudo codice, Paolo Bison, A.A. 2004-05, 2004-10-13 – p.4/44
Pseudo codice, Paolo Bison, A.A. 2004-05, 2004-10-13 – p.3/44
Come si valutano le espressioni? - I
Come si valutano le espressioni? - II
TEST: Qual’è il valore di
5 + 3 / 2
1. 6
2. 6.5
3. 4
4. potrebbe essere uno qualunque dei punti 1, 2, 3.
5. nessuna delle precedenti è la risposta esatta
semantica
regole per valutare una espressione
significato degli operatori
ordine di valutazione
Pseudo codice, Paolo Bison, A.A. 2004-05, 2004-10-13 – p.6/44
Pseudo codice, Paolo Bison, A.A. 2004-05, 2004-10-13 – p.5/44
Significato degli operatori
Ordine di valutazione
operazione matematica associata ai simboli di
operatore
+ addizione
− sottrazione
× moltiplicazione
la sequenza in cui vengono applicati gli operatori agli
operandi
ordine di scrittura
da sx a dx
5 + 3 / 2 = 4
da dx a sx
5 + 3 / 2 = 6
priorità predefinite
×,/ valutati prima di +,−
/ divisione - intera
- decimale
Pseudo codice, Paolo Bison, A.A. 2004-05, 2004-10-13 – p.7/44
ordine esplicito
parentesi ( )
Pseudo codice, Paolo Bison, A.A. 2004-05, 2004-10-13 – p.8/44
Istruzioni
Do it yourself
Sviluppare un algoritmo per la conversione di
espressioni (senza parentesi) dalla notazione infissa a
quella postfissa.
3+5*8-7
→
358*+77/2*3-6+4*9 → 72/3*6-49*+
elementi del linguaggio che definiscono le azioni da
svolgere
istruzioni base
struttura sequenziale
struttura condizionale
struttura iterativa
istruzione di assegnazione
Pseudo codice, Paolo Bison, A.A. 2004-05, 2004-10-13 – p.9/44
Pseudo codice, Paolo Bison, A.A. 2004-05, 2004-10-13 – p.10/44
Es. struttura sequenziale
Struttura sequenziale
sequenza di passi da eseguirsi uno di seguito all’altro
sintassi
passi scritti uno per riga
semantica
passi eseguiti uno alla volta
ciascun passo è eseguito una sola volta e nessuno
è omesso o ripetuto
l’ordine di esecuzione è quello di scrittura
algoritmo termina con il termine dell’ultimo passo
struttura rigida
esecuzione non può essere modificata
somma delle radici quadrate di tre numeri J, K, L
√
calcola √J
calcola √K
calcola L
somma le tre radici quadrate
Pseudo codice, Paolo Bison, A.A. 2004-05, 2004-10-13 – p.12/44
Pseudo codice, Paolo Bison, A.A. 2004-05, 2004-10-13 – p.11/44
Es. struttura di selezione
Struttura di selezione
permette di eseguire istruzioni differenti al verificarsi o
meno di una condizione (espressione logica)
sintassi
if
dati due numeri,sommare al primo il valore assoluto
del secondo
if
predicato
istr_1
il secondo numero è negativo
sottrai il secondo dal primo
else
else
somma il primo con il secondo
istr_2
semantica
se il predicato è vero si esegue istr_1, altrimenti istr_2
variante ad una sola via
if predicato
istr_1
Pseudo codice, Paolo Bison, A.A. 2004-05, 2004-10-13 – p.13/44
Indentazione
Pseudo codice, Paolo Bison, A.A. 2004-05, 2004-10-13 – p.14/44
Gerarchie di selezione
rientranza a dx nella scrittura delle istruzioni
per indicare quali istruzioni sono sotto il controllo di
una clausola if o else
sequenze in cascata di costrutti di selezione: if
annidati (nested)
scelta del massimo tra tre numeri X,Y e Z
if
dati quattro numeri A,B,C,D sommare A con B e
moltiplicare C con D se A maggiore di B
if
A>B
somma A con B
moltiplica C con D
6≡
A>B
somma A con B
moltiplica C con D
X>Y
if X > Z
X è max
else
if
Z è max
else
if
Y>Z
Y è max
else
Z è max
Pseudo codice, Paolo Bison, A.A. 2004-05, 2004-10-13 – p.15/44
numero di vie selezionabili arbitrario ma finito
Pseudo codice, Paolo Bison, A.A. 2004-05, 2004-10-13 – p.16/44
Es. ricerca
Strutture iterativa
ricerca di un indirizzo in un archivio dato il nome
leggi nome della prima scheda
if è il nome cercato
estrai indirizzo
ripetizione di istruzioni per un numero arbitrario, ma
finito di volte
ciclo (loop)
permette di descrivere una elaborazione di durata
indeterminata con un numero finito di istruzioni
else
leggi nome della seconda scheda
è il nome cercato
estrai indirizzo
if
else
if
......
non è possibile esprimere algoritmi la cui lunghezza
dipenda da fattori esterni
Pseudo codice, Paolo Bison, A.A. 2004-05, 2004-10-13 – p.17/44
Tipi di iterazioni
Pseudo codice, Paolo Bison, A.A. 2004-05, 2004-10-13 – p.18/44
Ciclo while
definita
durata determinata e conosciuta prima
dell’esecuzione
termine garantito
sintassi
while
istr
predicato
semantica
- si valuta il predicato
- se vero
- si esegue istr
- e si torna a valutare il predicato
altrimenti termina l’esecuzione
iterazione indefinita
indefinita
durata indeterminata
termine dipende dal verificarsi o meno della
condizione di terminazione
Pseudo codice, Paolo Bison, A.A. 2004-05, 2004-10-13 – p.20/44
Pseudo codice, Paolo Bison, A.A. 2004-05, 2004-10-13 – p.19/44
Es. while
Ciclo repeat
ricerca in un archivio di schede
leggi nome da prima scheda
while nome non è quello cercato e
vi sono ancora schede
leggi nome da scheda successiva
if hai trovato il nome
leggi indirizzo da scheda
ciclo errato se archivio vuoto
sintassi
repeat
istr
espressione
semantica
- si valuta l’espressione che deve ritornare un valore
intero
- si esegue istr per un numero di volte pari a tale
valore
iterazione definita
Pseudo codice, Paolo Bison, A.A. 2004-05, 2004-10-13 – p.22/44
Pseudo codice, Paolo Bison, A.A. 2004-05, 2004-10-13 – p.21/44
Es. repeat
Variabile
stampa di 100 asterischi *
100
stampa *
elemento che può assumere un qualunque valore ma
che in ogni momento dell’esecuzione è associato ad
uno ed uno solo valore
nome (identificatore)
sequenza di caratteri alfanumerici
ris x0 st
etichetta di un contenitore
-150
ris
x0
3.67
st
hello
operandi in espressioni
condivisione di dati tra istruzioni
repeat
Pseudo codice, Paolo Bison, A.A. 2004-05, 2004-10-13 – p.23/44
Pseudo codice, Paolo Bison, A.A. 2004-05, 2004-10-13 – p.24/44
Istruzione di assegnazione
Operazioni su variabile
accesso al valore attuale
sintassi
x0+ris-7
a
34
ris
x0
-10
valore dell’espressione: 17
modifica del valore associato
istruzione di assegnazione
id ← espressionea
altri simboli :=
=
semantica
al termine dell’esecuzione alla variabile id è associato
il valore ottenuto valutando l’espressione
esempio
ris ← 34
• prima: ris
• dopo: ris
-150
34
Pseudo codice, Paolo Bison, A.A. 2004-05, 2004-10-13 – p.26/44
Pseudo codice, Paolo Bison, A.A. 2004-05, 2004-10-13 – p.25/44
Significato identificatori
cnt ← cnt + 1
lato destro
accesso al valore corrente
cnt
n←m
m←r
6≡
m←r
n←m
17
lato sinistro
riferimento al contenitore
cnt
Ordine di esecuzione
n 23
n←m
⇒ m 31
m←r
17
m←r
⇒ m 31
n←m
risultato
cnt
dati
m 17
18
r 31
n 17
r 31
n 31
r 31
Pseudo codice, Paolo Bison, A.A. 2004-05, 2004-10-13 – p.27/44
Algoritmi
Scambio tra due variabili
scambio di valori tra m e n
ERRATO
• scambio diretto
m←n
n←m
Pseudo codice, Paolo Bison, A.A. 2004-05, 2004-10-13 – p.28/44
CORRETTO
• uso di una terza variabile per salvare il valore di
una delle due da scambiare
t←m
m←n
n←t
moltiplicazione
divisione intera
somma di n numeri
somma di n numeri pari
fattoriale
massimo comun divisore
numero primo
?
terminazione di un algoritmo
Pseudo codice, Paolo Bison, A.A. 2004-05, 2004-10-13 – p.29/44
Pseudo codice, Paolo Bison, A.A. 2004-05, 2004-10-13 – p.30/44
Moltiplicazione
Divisione intera
calcolo di m × n, m,n ≥ 0, come addizioni ripetute
calcolo di m/n, m ≥ 0, n > 0, come sottrazioni ripetute
m×n=m
{z· · · + m}
| +m+
n
ciclo repeat
ris ← 0
repeat n
ris ← ris + m
ciclo while
ris ← 0
i←1
while i ≤ n
ris ← ris + m
i←i+1
m/n = q, qn + r = m, q ≥ 0, 0 ≤ r < n
{z− · · · − n} < n
|m − n − n
q
q←0
while m ≥ n
m←m-n
q←q+1
Pseudo codice, Paolo Bison, A.A. 2004-05, 2004-10-13 – p.31/44
Pseudo codice, Paolo Bison, A.A. 2004-05, 2004-10-13 – p.32/44
Somma di n numeri
Somma di n numeri pari
calcolo della somma dei primi n numeri interi naturali
calcolo della somma dei primi n numeri naturali pari
1 + 2 + 3 + · · · + (n − 1) + n
2 + 4 + 6 + · · · + 2(n − 1) + 2n
s←0
i←2
while i ≤ 2 × n
if i - i / n × n = 0
s←s+i
i←i+1
s←0
i←1
while i ≤ n
s←s+i
i←i+1
Pseudo codice, Paolo Bison, A.A. 2004-05, 2004-10-13 – p.34/44
Pseudo codice, Paolo Bison, A.A. 2004-05, 2004-10-13 – p.33/44
Fattoriale
Massimo Comun Divisore - I
n! =
(
Dati due numeri m,n > 0 trovare MCD
n(n − 1)(n − 2) · · · 2 · 1 n > 0
1
n=0
Ciclo che moltiplica tutti i numeri tra n e 1
1 × n × (n − 1) × (n − 2) × · · · × 2
fat ← 1
n>1
fat ← fat × n
n←n-1
metodo 1
Sia m ≥ n, con ciclo da 2 a n si verifica quali sono i
numeri che dividono esattamente sia m che n. Il MCD
è il massimo di tali numeri.
Nota: un numero è divisibile per un altro se il resto
della divisione è zero.
while
Pseudo codice, Paolo Bison, A.A. 2004-05, 2004-10-13 – p.36/44
Pseudo codice, Paolo Bison, A.A. 2004-05, 2004-10-13 – p.35/44
Massimo Comun Divisore - II
Massimo Comun Divisore - III
algoritmo 1
m<n
t←m
m←n
n←t
i←2
mcd ← 1
while i ≤ n
if m - m / i × i = 0
if n - n / i × i = 0
if i > mcd
mcd ← i
i←i+1
if
metodo 2 - Metodo di Euclide
Dato m ≥ n, qualunque numero che divide sia m che n
divide anche il resto della divisione m/n
m = qn + r
m - qn = r ≥ 0
qm k - qqn k = r
k(qm - qqn ) = r
Si calcola il resto r di m/n. Se tale resto è zero n è il
MCD, altrimenti n e r diventano m e n e si riapplica il
passo precedente.
Pseudo codice, Paolo Bison, A.A. 2004-05, 2004-10-13 – p.37/44
Massimo Comun Divisore - IV
Pseudo codice, Paolo Bison, A.A. 2004-05, 2004-10-13 – p.38/44
Massimo Comun Divisore - V
algoritmo 2
m<n
t←m
m←n
n←t
r←m-m/n×n
while r 6= 0
m←n
n←r
r←m-m/n×n
metodo 3 - Metodo di Euclide (senza divisione)
Se m=n il MCD è m, altrimenti se m >n m diventa m-n
altrimenti è n che diventa n - m, e si ricontrolla
l’eventuale uguaglianza di m con n
algoritmo 3
while m 6= n
if m > n
m←m-n
if
else
n←n-m
Pseudo codice, Paolo Bison, A.A. 2004-05, 2004-10-13 – p.39/44
Pseudo codice, Paolo Bison, A.A. 2004-05, 2004-10-13 – p.40/44
Numero primo
?
Dato un numero intero n >0 si dica se è primo
Cosa produce questo algoritmo ?
Ciclo di verifica che n non sia esattamente divisibile da un
numero tra n/2 e 2.
while
div ← n / 2
r ← n - n / div × div
while r 6= 0
div ← div - 1
r ← n - n / div × div
if div 6= 1
n è primo
n 6= 1
stampa n
if n - n / 2 × 2 = 0
n←n/2
else
n←n×3+1
else
n non è primo
Pseudo codice, Paolo Bison, A.A. 2004-05, 2004-10-13 – p.41/44
Terminazione di un algoritmo
Do it yourself
H(P,x)
if
Minimo comune multiplo di due numeri m e n
Calcolo della radice quadrata intera di un numero n > 0; la radice
P(x) termina
stampa 1
intera è quel numero m che soddisfa le condizioni m2 ≤ n e
(m + 1)2 > n
R
Calcolo approssimato dell’integrale definito x1 f (x) come area
x0
sottesa da f (x) tra x0 e x1 con f (x) > 0 per x0 ≤ x ≤ x1 .
else
stampa 0
G(P,x)
while
Pseudo codice, Paolo Bison, A.A. 2004-05, 2004-10-13 – p.42/44
Calcolo dei coefficienti dell’equazione della retta ax + by + c = 0
dati due punti (x0 ,y0 ) e (x1 ,y1 )
H(P,x) stampa 1
? H(G,x)
Pseudo codice, Paolo Bison, A.A. 2004-05, 2004-10-13 – p.43/44
Pseudo codice, Paolo Bison, A.A. 2004-05, 2004-10-13 – p.44/44