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