Pseudo codice Pseudo codice Paolo Bison Fondamenti di Informatica A.A. 2006/07 Università di Padova linguaggio testuale mix di linguaggio naturale ed elementi linguistici con sintassi ben definita e semantica univoca elementi espressioni uzioni Pseudo codice, Paolo Bison, FI06, 2007-01-10 p.1 Pseudo codice, Paolo Bison, FI06, 2007-01-10 p.2 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) = > < Come si scrivono le espressioni? 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, FI06, 2007-01-10 p.3 Pseudo codice, Paolo Bison, FI06, 2007-01-10 p.4
Come si valutano le espressioni? - I Come si valutano le espressioni? - II TEST: Qual è il valore di 1. 6 2. 6.5 3. 4 4. dipende 5 + 3 / 2 regole per valutare una espressione significato degli operatori ordine di valutazione Pseudo codice, Paolo Bison, FI06, 2007-01-10 p.5 Pseudo codice, Paolo Bison, FI06, 2007-01-10 p.6 Significato degli operatori operazione matematica associata ai simboli di operatore + addizione sottrazione moltiplicazione / divisione - intera - decimale Ordine di valutazione 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 +, ordine esplicito parentesi ( ) Pseudo codice, Paolo Bison, FI06, 2007-01-10 p.7 Pseudo codice, Paolo Bison, FI06, 2007-01-10 p.8
Espressioni logiche espressioni che ritornano un valore di verità (vero,falso) predicati operatori di confronto = > < esempi lato quadrato 0 primo numero secondo numero Istruzioni elementi del linguaggio che definiscono le azioni da svolgere modifica dati flusso di esecuzione uzioni base struttura sequenziale struttura condizionale struttura iterativa uzione di assegnazione Struttura sequenziale Pseudo codice, Paolo Bison, FI06, 2007-01-10 p.9 sequenza di passi da eseguirsi uno di seguito all altro passi scritti uno per riga 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 Es. struttura sequenziale 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, FI06, 2007-01-10 p.10 struttura rigida esecuzione non può essere modificata Pseudo codice, Paolo Bison, FI06, 2007-01-10 p.11 Pseudo codice, Paolo Bison, FI06, 2007-01-10 p.12
Struttura di selezione permette di eseguire uzioni differenti al verificarsi o meno di una condizione (espressione logica) Es. struttura di selezione dati due numeri,sommare al primo il valore assoluto del secondo if predicato _1 _2 if il secondo numero < 0 sottrai il secondo dal primo somma il primo con il secondo se il predicato è vero si esegue _1, altrimenti _2 variante ad una sola via if predicato _1 Pseudo codice, Paolo Bison, FI06, 2007-01-10 p.13 Pseudo codice, Paolo Bison, FI06, 2007-01-10 p.14 Indentazione rientranza a dx nella scrittura delle uzioni per indicare quali uzioni sono sotto il controllo di una clausola if o 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 if A > B somma A con B moltiplica C con D Gerarchie di selezione sequenze in cascata di costrutti di selezione: if annidati (nested) scelta del massimo tra tre numeri X,Y e Z if X > Y if X > Z X è max Z è max if Y > Z Y è max Z è max numero di vie selezionabili arbitrario ma finito Pseudo codice, Paolo Bison, FI06, 2007-01-10 p.15 Pseudo codice, Paolo Bison, FI06, 2007-01-10 p.16
Es. ricerca ricerca di un indirizzo in un archivio dato il nome leggi nome della prima scheda if è il nome cercato estrai indirizzo leggi nome della seconda scheda if è il nome cercato estrai indirizzo if... non è possibile esprimere algoritmi la cui lunghezza dipenda da fattori esterni Strutture iterativa ripetizione di uzioni per un numero arbitrario, ma finito di volte ciclo (loop) permette di descrivere una elaborazione di durata indeterminata con un numero finito di uzioni Tipi di iterazione definita Pseudo codice, Paolo Bison, FI06, 2007-01-10 p.17 durata determinata e conosciuta prima dell esecuzione termine garantito indefinita durata indeterminata termine dipende dal verificarsi o meno della condizione di terminazione Ciclo while while predicato - si valuta il predicato - se vero - si esegue - e si torna a valutare il predicato altrimenti termina l esecuzione iterazione indefinita Pseudo codice, Paolo Bison, FI06, 2007-01-10 p.18 Pseudo codice, Paolo Bison, FI06, 2007-01-10 p.19 Pseudo codice, Paolo Bison, FI06, 2007-01-10 p.20
Es. while 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 Ciclo do while do while predicato - si esegue - si valuta il predicato - se vero si rieseguono i passi precedenti altrimenti termina l esecuzione iterazione indefinita Ciclo repeat repeat espressione Pseudo codice, Paolo Bison, FI06, 2007-01-10 p.21 - si valuta l espressione che deve ritornare un valore intero positivo - si esegue per un numero di volte pari a tale valore iterazione definita Es. repeat stampa di 100 asterischi * repeat 100 stampa * Pseudo codice, Paolo Bison, FI06, 2007-01-10 p.22 Pseudo codice, Paolo Bison, FI06, 2007-01-10 p.23 Pseudo codice, Paolo Bison, FI06, 2007-01-10 p.24
Programmazione strutturata teorema di Jacopini-Böhm ogni algoritmo può essere espresso utilizzando solo tre strutture di controllo struttura sequenziale struttura di selezione un ciclo indefinito (while) Variabile 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 do while predicato while predicato etichetta di un contenitore ris -150 x0 3.67 st hello operandi in espressioni condivisione di dati tra uzioni Pseudo codice, Paolo Bison, FI06, 2007-01-10 p.25 Pseudo codice, Paolo Bison, FI06, 2007-01-10 p.26 Operazioni su variabile accesso al valore attuale ris 34 x0+ris-7 x0-10 valore dell espressione: 17 modifica del valore associato uzione di assegnazione Istruzione di assegnazione id espressione a a altri simboli := = al termine dell esecuzione alla variabile id è associato il valore ottenuto valutando l espressione esempio ris 34 prima: ris -150 dopo: ris 34 Pseudo codice, Paolo Bison, FI06, 2007-01-10 p.27 Pseudo codice, Paolo Bison, FI06, 2007-01-10 p.28
Significato identificatori nell assegnazione Ordine di esecuzione cnt cnt + 1 lato destro accesso al valore corrente n m m r m r n m cnt 17 lato sino riferimento al contenitore risultato cnt 17 cnt 18 dati m 17 n 23 r 31 n m m r m r n m m 31 n 17 r 31 m 31 n 31 r 31 Scambio tra due variabili Pseudo codice, Paolo Bison, FI06, 2007-01-10 p.29 Programma equivalente per repeat Pseudo codice, Paolo Bison, FI06, 2007-01-10 p.30 scambio di valori tra m e n ERRATO scambio diretto m n n m CORRETTO uso di una terza variabile per salvare il valore di una delle due da scambiare t m m n n t uso di una variabile come contatore repeat n _i 1 while _i n _i _i + 1 Pseudo codice, Paolo Bison, FI06, 2007-01-10 p.31 Pseudo codice, Paolo Bison, FI06, 2007-01-10 p.32
Algoritmi moltiplicazione divisione intera somma di n numeri somma di n numeri pari fattoriale massimo comun divisore numero primo? Divisione intera Pseudo codice, Paolo Bison, FI06, 2007-01-10 p.33 Moltiplicazione calcolo di m n, m,n 0, come addizioni ripetute ciclo repeat ris 0 repeat n ris ris + m m n = m+m+ +m } {{ } n ciclo while ris 0 i 1 while i n ris ris + m i i + 1 Pseudo codice, Paolo Bison, FI06, 2007-01-10 p.34 Somma di n numeri calcolo di m/n, m 0, n > 0, come sottrazioni ripetute m/n = q,qn+r = m,q 0,0 r < n q 0 while m n m m - n q q + 1 } m n {{ n n } < n q calcolo della somma dei primi n numeri interi naturali s 0 i 1 while i n s s + i i i + 1 1+2+3+ +(n 1)+n Pseudo codice, Paolo Bison, FI06, 2007-01-10 p.35 Pseudo codice, Paolo Bison, FI06, 2007-01-10 p.36
Somma di n numeri pari calcolo della somma dei primi n numeri naturali pari 2+4+6+ +2(n 1)+2n s 0 i 2 while i 2 n if i - i / 2 2 = 0 s s + i i i + 1 Fattoriale n! = { n(n 1)(n 2) 2 1 n > 0 1 n = 0 Ciclo che moltiplica tutti i numeri tra n e 1 fat 1 while n > 1 fat fat n n n - 1 1 n (n 1) (n 2) 2 Massimo Comun Divisore - I Dati due numeri m,n > 0 trovare MCD Pseudo codice, Paolo Bison, FI06, 2007-01-10 p.37 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. Massimo Comun Divisore - II algoritmo 1 if 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 Pseudo codice, Paolo Bison, FI06, 2007-01-10 p.38 Pseudo codice, Paolo Bison, FI06, 2007-01-10 p.39 Pseudo codice, Paolo Bison, FI06, 2007-01-10 p.40
Massimo Comun Divisore - III 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 q m k - qq n k = r k(q m - qq n ) = 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. Massimo Comun Divisore - IV algoritmo 2 if m < n t m m n n t r m - m / n n while r 0 m n n r r m - m / n n Pseudo codice, Paolo Bison, FI06, 2007-01-10 p.41 Pseudo codice, Paolo Bison, FI06, 2007-01-10 p.42 Massimo Comun Divisore - V 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 n if m > n m m - n n n - m Numero primo Dato un numero intero n >0 si dica se è primo Ciclo di verifica che n non sia esattamente divisibile da un numero tra n/2 e 2. div n / 2 r n - n / div div while r 0 div div - 1 r n - n / div div if div 1 n è primo n non è primo Pseudo codice, Paolo Bison, FI06, 2007-01-10 p.43 Pseudo codice, Paolo Bison, FI06, 2007-01-10 p.44
? Cosa produce questo algoritmo? while n 1 stampa n if n - n / 2 2 = 0 n n / 2 n n 3 + 1 Do it yourself Minimo comune multiplo di due numeri m e n Calcolo della radice quadrata intera di un numero n > 0; la radice intera è quel numero m che soddisfa le condizioni m 2 n e (m+1) 2 > n Calcolo approssimato dell integrale definito R x 1 x 0 f(x) come area sottesa da f(x) tra x 0 e x 1 con f(x) > 0 per x 0 x x 1. Calcolo dei coefficienti dell equazione della retta ax+by+c = 0 dati due punti (x 0,y 0 ) e (x 1,y 1 ) Pseudo codice, Paolo Bison, FI06, 2007-01-10 p.45 Pseudo codice, Paolo Bison, FI06, 2007-01-10 p.46