Post on 16-Feb-2019
Programmazione I
Fondamenti di programmazione
( Lezione I )
Problemi, Algoritmi, Diagrammi di flusso
Fabrizio Messina messina@dmi.unict.it
www.dmi.unict.it/~messina
F. Messina Programmazione I 2
Algoritmo
➢ Dato un problema, un algoritmo è una procedura, cioè una sequenza di passi, che può essere eseguita automaticamente da una macchina in modo da risolvere il problema dato.
• Un problema risolvibile mediante un algoritmo si dice computabile.
F.Messina Programmazione I 3
Esempio di algoritmo
Il pollo alle mandorle:- Abbiamo gli ingredienti (pollo, olio, mandorle, cipolla,
sale, pepe, etc.) con le giuste quantità;
- Seguiamo la ricetta;
- Serviamo il piatto a tavola.
F. Messina Programmazione I 4
Un altro esempio di algoritmo
La costruzione di un kit di montaggio:- Procuriamo il kit e gli strumenti;
- Apriamo la scatola;
- Leggiamo le istruzioni;
- Mettiamo insieme i pezzi.
F. Messina Programmazione I 5
Risoluzione di un problema
EsecutoreInput
Algoritmo
Output
➢ Generalmente, la risoluzione di un dato problema consiste nel prendere alcuni dati iniziali (input) relativi al problema e nel fornire un risultato (output) che risolve quest’ultimo.
F. Messina Programmazione I 6
Ma …
➢ Non è così facile come sembra !
• Per scrivere la giusta “sequenza di passi”
bisogna essere un bravo cuoco o un bravo
costruttore !
F. Messina Programmazione I 7
Infatti …
Problema Algoritmo
Processo di
esecuzione
RisolutoreEsecut
oreUomo
Macchina… la risoluzione automatica prevede comunque una notevole componente umana !!!
F. Messina Programmazione I 8
Definizione di algoritmo
➢ Un algoritmo è una sequenza ordinata e finita di passi (azioni o istruzioni) che producono un ben determinato risultato in un tempo finito.
F. Messina Programmazione I 9
Caratteristiche di un algoritmo
1. Azioni eseguibili e non ambigue.• Non ambigue, inoltre non sono ammessi “un pò” e “a piacere”,
che non sono termini adatti ad una macchina.2. Determinismo.
• Fatto un passo, il successivo è uno ed uno solo, ben determinato. Alternative sono possibili, ma la scelta deve essere univoca.
3. Numero finito di passi.4. Terminazione.
• L’esecuzione deve finire e deve produrre il risultato in tempo finito.
• Osservazione : la 3 non implica la 4.
F. Messina Programmazione I 10
Esempio di “non terminazione”
1. Si consideri un numero N;
2. Scrivere N;
3. Scrivere il numero successivo;
4. Ripetere il passo precedente.
F. Messina Programmazione I 11
Ancora un esempio
➢ Ricerca di un nominativo in un elenco.
• Non ordinato.
– Es.: Una lista di firme.
• Ordinato.
– Es.: Elenco telefonico.
F. Messina Programmazione I 12
Codifica dell’algoritmo
➢ Affinché una macchina riesca a comprendere ed eseguire i passi specificati da un algoritmo, quest’ultimo deve essere prima codificato in un opportuno programma scritto in un linguaggio di alto livello.
Algoritmo ProgrammaTraduzione
F. Messina Programmazione I 13
L’esecuzione automaticaUomo
Algoritmo
Linguaggio macchina
Programma
MacchinaOutputInput
Pseudo-codice
Linguaggio di alto livello
Traduttore
Esecuzione
F. Messina Programmazione I 14
Scomposizione in sottoproblemi
Ricetta del pollo alle mandorle:1. Preparare il soffritto ed aggiungervi il pollo;2. Unire le mandorle pelate al soffritto;3. Mescolare fino a quando il pollo sarà ben dorato;4. Aggiungere del pepe;5. Rosolare con vino bianco fino a quando il pollo è cotto;6. Aggiungere olio q.b.; 7. Se preferisci salato, allora aggiungi sale;
F. Messina Programmazione I 15
Scomposizione in sottoproblemi
➢ La ricetta precedente è un esempio di cosa significa scomporre un problema in sottoproblemi.
➢ Ogni sottoproblema può essere scomposto in problemi via via più elementari.
➢ Top-down vs. Bottom-Up
Top down TOP DOWN: 1. Si formula inizialmente una visione generale del
sistema, senza scendere nel dettaglio delle sue parti.
2. Ogni parte del sistema è successivamente rifinita per decomposizione aggiungendo dettagli.
3. Successive decomposizioni permetteranno di specificare ulteriori dettagli, finché la specifica completa è sufficientemente dettagliata da validare il modello.
F. Messina Programmazione I
Bottom Up
BOTTOM UP: 1. Parti individuali del sistema sono
specificate in dettaglio. 2. Le parti vengono connesse tra loro in
modo da formare componenti più grandi. 3. Successive connessioni/composizioni
permetteranno di realizzare un sistema completo.
F. Messina Programmazione I
F. Messina Programmazione I 18
Descrizione di un algoritmo
➢ Si descrive un algoritmo cercando di sintetizzare il più possibile la sua sequenza di passi.
➢ La descrizione avviene mediante : • pseudo-codice, oppure• diagramma di flusso.
F. Messina Programmazione I 19
Diagrammi di flusso
➢ I diagrammi di flusso permettono di descrivere in modo grafico le azioni che costituiscono un algoritmo e il loro flusso di esecuzione.• Ogni azione elementare è rappresentata da un
blocco. – Esistono 4 tipi di blocchi.
F. Messina Programmazione I 20
Diagrammi di flusso (1)
Inizio
Fine
➢ Istruzioni di inizio e fine.
F. Messina Programmazione I 21
Diagrammi di flusso (2)
➢ Operazioni di lettura (input) o scrittura (output).
Leggi il dato
Scrivi il dato
F. Messina Programmazione I 22
Diagrammi di flusso (3)
➢ Istruzioni imperative (azioni oppure operazioni).
Calcola : 20+34
F. Messina Programmazione I 23
Connettori
➢ I singoli diagrammi devono essere uniti tramite i connettori.
➢ L’esecuzione delle istruzioni deve essere fatta sequenzialmente, ovvero seguendo i connettori.• Quando si scrive l’algoritmo bisogna fare molta
attenzione alla direzione del flusso di esecuzione.
F. Messina Programmazione I 24
Istruzione di assegnamento➢ Una variabile numerica è un’entità caratterizzata :
• da un nome, e• da un valore (o contenuto)
– che può cambiare nel tempo …
➢ Un’espressione è una combinazione di operatori aritmetici, costanti e variabili che può essere calcolata generando un singolo valore numerico.
• Es.: X, X + 1, X + (Y * 3).
➢ Istruzione di assegnamento : “ ← ”• Variabile ← Espressione;
– Es.: Z ← 3; Z ← X + 3; X ← X + 1;
F. Messina Programmazione I 25
Esempio
➢ Descrivere, mediante diagramma di flusso, un algoritmo che calcoli la somma di due numeri letti in input.
F. Messina Programmazione I 26
Diagramma di flusso : Somma
Inizio
Leggi X
Leggi Y
Z ← X+Y
Stampa Z
Fine
F. Messina Programmazione I 27
Esempio
➢ Descrivere, mediante diagramma di flusso, un algoritmo che scambi i valori di due variabili lette in input.
F. Messina Programmazione I 28
Diagramma di flusso: Scambio
Inizio
Leggi X
Aux ← X
Leggi Y
X ← Y
Y ← Aux
Scrivi X
Scrivi Y
Fine
F. Messina Programmazione I 29
Variazioni nel flusso di esecuzione
➢ Ci sono dei momenti in cui il flusso di esecuzione può scegliere tra diverse direzioni;
➢ In genere, questi salti sono subordinati al verificarsi di una condizione (che può risultare vera o falsa);
➢ Si parla di istruzioni condizionali.
F. Messina Programmazione I 30
Diagrammi di flusso (4)
Falso
Vero
Condizione
➢ Istruzioni condizionali.
Falso
Vero
Più sale ?
Es.:
F. Messina Programmazione I 31
Esempio
➢ Descrivere, mediante diagramma di flusso, un algoritmo che determini il massimo tra due numeri letti in input.
F. Messina Programmazione I 32
Diagramma di flusso : MaxInizio
Leggi X
Leggi YFine
Falso
Vero
X > Y
Stampa X
Stampa Y
F. Messina Programmazione I 33
Esempio
➢ Descrivere, mediante diagramma di flusso, un algoritmo che determini se un numero letto in input è pari o dispari.
F. Messina Programmazione I 34
Diagramma di flusso : Pari o…Inizio
Leggi N
Dividi N per 2Fine
Falso
Vero
Resto = 0
Scrivi : “N è pari”
Scrivi : “N è dispari”
F. Messina Programmazione I 35
Esercizio
➢ Scrivere la ricetta del pollo alle mandorle utilizzando i diagrammi di flusso.• Nota: dove è richiesta una ripetizione – ad
esempio fino a quando – utilizzare un’istruzione condizionale del tipo mostrato nella prossima diapositiva.
Programmazione I 36
Ripetizione o “ciclo”
Rosolare con vino
Falso
Vero
Il pollo è cotto?
…
…F. Messina
Programmazione I
Fondamenti di programmazione
( Lezione II )
Notazione Lineare Strutturata
Fabrizio Messina messina@dmi.unict.it
www.dmi.unict.it/~messina
F. Messina Programmazione I 38
Esempio
➢ Descrivere, mediante diagramma di flusso, un algoritmo che calcoli il fattoriale di un numero intero positivo letto in input.
F. Messina Programmazione I 39
Esempio : FattorialeInizio
Leggi N
Fatt ← 1
Fatt ← Fatt * M
M ← 1
M ← M +1
M > N
Scrivi Fatt
Fine
VERO FALSO
F. Messina Programmazione I 40
Considerazioni
➢ I diagrammi a blocchi si rivelano :• poco pratici,• soggetti a errori,• illeggibili se di notevole complessità.
➢ Per ovviare a tali inconvenienti si adotta la Notazione Lineare Strutturata (NLS) o pseudo-codice.
F. Messina Programmazione I 41
Notazione Lineare Strutturata
➢ Tre costrutti fondamentali :• Sequenza
• Selezione
• Iterazione.
➢ Inoltre, esiste un unico punto d’ingresso ed un unico punto d’uscita.
F. Messina Programmazione I 42
Sequenza
Istruzione 1
Istruzione 2
Istruzione n
…
Istruzione 1;
Istruzione 2;
…
Istruzione n;
≡
F. Messina Programmazione I 43
Selezione (o condizione)
if (Condizione) then
Blocco 1;
else
Blocco 2;
end if
≡Condizion
e
Blocco 2 Blocco 1La clausola “else” può anche essere assente.
Falso Vero
F. Messina Programmazione I 44
Iterazione (o ciclo)
while (Condizione) do
Blocco;
end while;≡
Condizion
e
Blocco
Falso Vero
F. Messina Programmazione I 45
Ricapitolando ...
F. Messina Programmazione I 46
Risultato fondamentale
➢TEOREMA (Böhm-Jacopini) : • I tre costrutti fondamentali della NLS sono sufficienti a descrivere qualunque algoritmo.
F. Messina Programmazione I 47
Esempio : Somma
Inizio
Leggi X
Leggi Y
Z ← X+Y
Stampa Z
Fine
F. Messina Programmazione I 48
Esempio : Somma in NLS
InizioLeggi XLeggi YZ ← X + Y Stampa Z
Fine
F. Messina Programmazione I 49
Esempio : Max
Inizio
Leggi X
Leggi YFine
Falso
Vero
X > Y
Stampa X
Stampa Y
F. Messina Programmazione I 50
Esempio : Max in NLSInizio
Leggi XLeggi Yif (X > Y) then
Stampa Xelse Stampa Yend if
Fine
F. Messina Programmazione I 51
Esempio : Numeri da 1 a N
InizioLeggi NM ← 0while (M < N) do M ← M + 1
Stampa Mend while
Fine
F. Messina 52
Esempio : Somma dei primi N numeri
InizioLeggi N i ← 0S ← 0while (i < N) do i ← i + 1
S ← S + iend whileStampa S
Fine
F. Messina 53
Esempio : Somma dei numeri pari minori di N
InizioLeggi N i ← 2S ← 0while (i < N) do
S ← S + i i ← i + 2
end whileStampa S
Fine
54
Algoritmo di Euclide per il m.c.m.
MA MB
3 769 141215 211821
InizioLeggi A, BMA ← AMB ← Bwhile (MA <> MB) do
if (MA > MB) then MB ← MB + B
else MA ← MA + A
end ifend whileStampa “mcm =” MA
Fine
Es.: m.c.m. (3, 7) = 21
Algoritmo di Euclide per il M.C.D.
MA MB MA%MB
21 14 714 7 07 0 ---
M.C.D.(21,14) = 7
InizioLeggi A, Bif (A < B) then
MB ← AMA ← B
else MA ← AMB ← B
end ifwhile (MB<>0) do
r ← MA%MB MA ← MB
MB ← rend whilestampa MA
Es.: M.C.D. (21, 14) = 7
Programmazione I 56
Fine