SlideShare a Scribd company logo
1 of 9
Download to read offline
PROGRAMMAZIONE I

Algoritmo

FONDAMENTI DI PROGRAMMAZIONE

Problemi, Algoritmi, Diagrammi di flusso

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.

Gianluca Cincotti

• Un problema risolvibile mediante un algoritmo si dice
computabile.

( Lezione I )

Dipartimento di Matematica e Informatica
Università di Catania
e-mail : cincotti@dmi.unict.it
G.Cincotti

Esempio di algoritmo

Un altro esempio di algoritmo
- Procuriamo il kit e gli strumenti;

- Abbiamo gli ingredienti (pollo, olio, mandorle, cipolla,

- Apriamo la scatola;

sale, pepe, etc.) con le giuste quantità;

- Leggiamo le istruzioni;

- Seguiamo la ricetta;

- Mettiamo insieme i pezzi.

- Serviamo il piatto a tavola.

Programmazione I

Fondamenti di Programmazione, pag. 2

La costruzione di un kit di montaggio:

Il pollo alle mandorle:

G.Cincotti

Programmazione I

Fondamenti di Programmazione, pag. 3

G.Cincotti

Programmazione I

Fondamenti di Programmazione, pag. 4

Risoluzione di un problema

Ma …

Algoritmo

Non è così facile come sembra !
• Per scrivere la giusta “sequenza di passi”

Input

Esecutore

Output

bisogna essere un bravo cuoco o un bravo
costruttore !

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.
G.Cincotti

Programmazione I

Fondamenti di Programmazione, pag. 5

G.Cincotti

Programmazione I

Fondamenti di Programmazione, pag. 6

1
Infatti …
Risolutore

Algoritmo

Un algoritmo è una sequenza ordinata e

Esecutore

Problema

finita di passi (azioni o istruzioni) che

Uomo

… la risoluzione
automatica prevede
comunque
una
notevole componente
umana !!!

Macchina

producono un ben determinato risultato in
un tempo finito.

Processo
di
esecuzione

Programmazione I

G.Cincotti

Definizione di algoritmo

Fondamenti di Programmazione, pag. 7

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.
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.
•
•

Fondamenti di Programmazione, pag. 8

Esempio di “non terminazione”
1. Si consideri un numero N;
2. Scrivere N;

2. Determinismo.
•

Programmazione I

G.Cincotti

3. Scrivere il numero successivo;
4. Ripetere il passo precedente.

L’esecuzione prima o poi deve finire e produrre il risultato in
tempo finito.
Osservazione : la 3 non implica la 4.
Programmazione I

G.Cincotti

Fondamenti di Programmazione, pag. 9

Programmazione I

G.Cincotti

Ancora un esempio

Fondamenti di Programmazione, pag. 10

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.

Ricerca di un nominativo in un elenco.
• Non ordinato.
– Es.: Una lista di firme.

• Ordinato.
Algoritmo

– Es.: Elenco telefonico.

G.Cincotti

Programmazione I

Fondamenti di Programmazione, pag. 11

G.Cincotti

Traduzione

Programmazione I

Programma

Fondamenti di Programmazione, pag. 12

2
L’esecuzione automatica
Uomo

Pseudo-codice

Macchina
G.Cincotti

Programmazione I

Output
Fondamenti di Programmazione, pag. 13

Mescolare fino a quando il pollo sarà ben dorato;
Aggiungere del pepe;
Rosolare con vino bianco fino a quando il pollo è cotto;

6.

Esecuzione

Unire le mandorle pelate al soffritto;

5.

Traduttore

2.
4.

Programma

Preparare il soffritto ed aggiungervi il pollo;

3.

Linguaggio di alto livello

Input

Ricetta del pollo alle mandorle:
1.

Algoritmo

Linguaggio
macchina

Scomposizione in sottoproblemi

Aggiungere olio q.b.;

7.

Se preferisci salato, allora aggiungi sale;
Programmazione I

G.Cincotti

Fondamenti di Programmazione, pag. 14

Scomposizione in sottoproblemi

Descrizione di un algoritmo

La ricetta precedente è un esempio di cosa
significa scomporre un problema in sottoproblemi.

Si descrive un algoritmo cercando di
sintetizzare il più possibile la sua sequenza
di passi.

Ogni sottoproblema può essere scomposto in
problemi via via più elementari.

La descrizione avviene mediante :
• pseudo-codice, oppure
• diagramma di flusso.

Top-down vs. Bottom-Up
G.Cincotti

Programmazione I

Fondamenti di Programmazione, pag. 15

Programmazione I

G.Cincotti

Diagrammi di flusso

Fondamenti di Programmazione, pag. 16

Diagrammi di flusso (1)

I diagrammi di flusso permettono di
descrivere in modo grafico le azioni che
costituiscono un algoritmo e il loro flusso di
esecuzione.

Istruzioni di inizio e fine.

Inizio

• Ogni azione elementare è rappresentata da un
blocco.

Fine

– Esistono 4 tipi di blocchi.

G.Cincotti

Programmazione I

Fondamenti di Programmazione, pag. 17

G.Cincotti

Programmazione I

Fondamenti di Programmazione, pag. 18

3
Diagrammi di flusso (2)

Diagrammi di flusso (3)

Operazioni di lettura (input) o scrittura (output).

Leggi il dato

G.Cincotti

Programmazione I

Istruzioni imperative (azioni oppure operazioni).

Calcola : 20+34

Scrivi il dato

Fondamenti di Programmazione, pag. 19

Programmazione I

G.Cincotti

Connettori

Istruzione di assegnamento
Una variabile numerica è un’entità caratterizzata :

I singoli diagrammi devono essere uniti
tramite i connettori.
L’esecuzione delle istruzioni deve essere
fatta sequenzialmente, ovvero seguendo i
connettori.

• 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.

• Quando si scrive l’algoritmo bisogna fare molta
attenzione alla direzione del flusso di
esecuzione.

• Es.:

X,

Programmazione I

Fondamenti di Programmazione, pag. 21

X + 1,

X + (Y * 3).

Istruzione di assegnamento :

“←”

• Variabile ← Espressione;
– Es.:

G.Cincotti

Fondamenti di Programmazione, pag. 20

Z ← 3;

Esempio

Z ← X + 3;

Programmazione I

G.Cincotti

X ← X + 1;
Fondamenti di Programmazione, pag. 22

Diagramma di flusso : Somma
Inizio

Descrivere, mediante diagramma di
flusso, un algoritmo che calcoli la
somma di due numeri letti in input.

Z ← X+Y
Leggi X
Stampa Z

Leggi Y
G.Cincotti

Programmazione I

Fondamenti di Programmazione, pag. 23

G.Cincotti

Programmazione I

Fine
Fondamenti di Programmazione, pag. 24

4
Esempio

Diagramma di flusso: Scambio
Inizio

Descrivere, mediante diagramma di
flusso, un algoritmo che scambi i
valori di due variabili lette in input.

Aux ← X
Leggi X

Scrivi X

X←Y
Leggi Y

Scrivi Y

Y ← Aux

Fine
Programmazione I

G.Cincotti

Fondamenti di Programmazione, pag. 25

Programmazione I

G.Cincotti

Variazioni nel flusso di
esecuzione

Fondamenti di Programmazione, pag. 26

Diagrammi di flusso (4)
Istruzioni condizionali.

Ci sono dei momenti in cui il flusso di esecuzione
può scegliere tra diverse direzioni;

Es.:

In genere, questi salti sono subordinati al
verificarsi di una condizione (che può risultare
Condizione

vera o falsa);

Falso

Falso

Più sale ?

Si parla di istruzioni condizionali.

Vero

Vero
G.Cincotti

Programmazione I

Fondamenti di Programmazione, pag. 27

Programmazione I

G.Cincotti

Esempio

Fondamenti di Programmazione, pag. 28

Diagramma di flusso : Max
Inizio

Descrivere, mediante diagramma di
flusso, un algoritmo che determini il
massimo tra due numeri letti in input.

X>Y

Leggi X

Vero

Falso

Stampa Y

Stampa X

Leggi Y
Fine
G.Cincotti

Programmazione I

Fondamenti di Programmazione, pag. 29

G.Cincotti

Programmazione I

Fondamenti di Programmazione, pag. 30

5
Esempio

Diagramma di flusso : Pari o…
Inizio

Descrivere, mediante diagramma di
flusso, un algoritmo che determini se
un numero letto in input è pari o
dispari.

Resto = 0

Leggi N

Vero

Falso
Scrivi :
“N è dispari”

Scrivi :
“N è pari”

Dividi N per 2
Fine
G.Cincotti

Programmazione I

Fondamenti di Programmazione, pag. 31

G.Cincotti

Esercizio

Programmazione I

Fondamenti di Programmazione, pag. 32

Ripetizione o “ciclo”
…

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.

Il pollo è
cotto?

Falso

Rosolare
con vino

Vero
…
G.Cincotti

Programmazione I

Fondamenti di Programmazione, pag. 33

G.Cincotti

Programmazione I

Fondamenti di Programmazione, pag. 34

PROGRAMMAZIONE I
FONDAMENTI DI PROGRAMMAZIONE
( Lezione II )

Fine

Notazione Lineare Strutturata
Gianluca Cincotti
Dipartimento di Matematica e Informatica
Università di Catania
e-mail : cincotti@dmi.unict.it

G.Cincotti

Programmazione I

Fondamenti di Programmazione, pag. 35

6
Esempio

Esempio : Fattoriale
Inizio

Descrivere, mediante diagramma di
flusso, un algoritmo che calcoli il
fattoriale di un numero intero positivo
letto in input.

Fatt ← Fatt * M
Leggi N
M ← M +1
Fatt ← 1

VERO

M←1

M>N

FALSO

Scrivi Fatt
Fine

Programmazione I

G.Cincotti

Fondamenti di Programmazione, pag. 37

Programmazione I

G.Cincotti

Considerazioni

Fondamenti di Programmazione, pag. 38

Notazione Lineare Strutturata

I diagrammi a blocchi si rivelano :

Tre costrutti fondamentali :

• poco pratici,

• Sequenza,

• soggetti a errori,

• Selezione,

• illeggibili se di notevole complessità.

• Iterazione.

Per ovviare a tali inconvenienti si adotta la
Notazione Lineare Strutturata (NLS) o pseudocodice.

Programmazione I

G.Cincotti

Fondamenti di Programmazione, pag. 39

Inoltre, esiste un unico punto d’ingresso ed un
unico punto d’uscita.

Programmazione I

G.Cincotti

Sequenza

Fondamenti di Programmazione, pag. 40

Selezione (o condizione)
if (Condizione) then

Istruzione 1
Falso

Istruzione 1;
Istruzione 2

≡

…

Condizione

Istruzione 2;

≡

else
Blocco 2;

…
Istruzione n;

end if
Blocco 2

Blocco 1
La clausola “else”
può anche essere
assente.

Istruzione n

G.Cincotti

Blocco 1;

Vero

Programmazione I

Fondamenti di Programmazione, pag. 41

G.Cincotti

Programmazione I

Fondamenti di Programmazione, pag. 42

7
Ricapitolando ...
Iterazione (o ciclo)

Falso

Condizione

while (Condizione) do

Vero

≡

Blocco;
end while;

Blocco

G.Cincotti

Programmazione I

Fondamenti di Programmazione, pag. 43

Programmazione I

G.Cincotti

Risultato fondamentale

Fondamenti di Programmazione, pag. 44

Esempio : Somma
Inizio

TEOREMA (Böhm-Jacopini) :

Z ← X+Y

• I tre costrutti fondamentali della
NLS sono sufficienti a descrivere
qualunque algoritmo.

Leggi X
Stampa Z

Leggi Y

G.Cincotti

Programmazione I

Fondamenti di Programmazione, pag. 45

Fine

Programmazione I

G.Cincotti

Esempio : Somma in NLS

Fondamenti di Programmazione, pag. 46

Esempio : Max
Inizio

Inizio
Leggi X
Leggi Y
Z←X+Y
Stampa Z
Fine

X>Y

Leggi X

Vero

Falso

Stampa Y

Stampa X

Leggi Y
Fine

G.Cincotti

Programmazione I

Fondamenti di Programmazione, pag. 47

G.Cincotti

Programmazione I

Fondamenti di Programmazione, pag. 48

8
Esempio : Max in NLS

Esempio : Numeri da 1 a N

Inizio
Leggi X
Leggi Y
if (X > Y) then
Stampa X
else
Stampa Y
end if
Fine
G.Cincotti

Programmazione I

Inizio
Leggi N
M←0
while (M < N) do
M←M+1
Stampa M
end while
Fine
Fondamenti di Programmazione, pag. 49

G.Cincotti

Programmazione I

Fondamenti di Programmazione, pag. 50

Esempio :
Esempio : Somma dei primi N numeri

Somma dei numeri pari minori di N

Inizio
Leggi N
i←0
S←0
while (i < N) do
i←i+1
S←S+i
end while
Stampa S
Fine
G.Cincotti

Programmazione I

Inizio
Leggi N
i←2
S←0
while (i < N) do
S←S+i
i← i+2
end while
Stampa S
Fine
Fondamenti di Programmazione, pag. 51

G.Cincotti

Programmazione I

Fondamenti di Programmazione, pag. 52

Algoritmo di Euclide per il m.c.m.
Inizio
Leggi A, B
MA ← A
MB ← B
while (MA <> MB) do
if (MA > MB) then
MB ← MB + B
else
MA ← MA + A
end if
end while
Stampa “mcm =” MA
Fine
G.Cincotti

Programmazione I

Es.: m.c.m. (3, 7) = 21
MA

3
6
9

MB

7

Fine

14
12
15
21
18
21
Fondamenti di Programmazione, pag. 53

G.Cincotti

Programmazione I

Fondamenti di Programmazione, pag. 54

9

More Related Content

Similar to Fondamenti 17/10/2013

Lezione 3 (29 febbraio 2012)
Lezione 3 (29 febbraio 2012)Lezione 3 (29 febbraio 2012)
Lezione 3 (29 febbraio 2012)STELITANO
 
15 - Programmazione: Algoritmi
15 - Programmazione: Algoritmi15 - Programmazione: Algoritmi
15 - Programmazione: AlgoritmiMajong DevJfu
 
Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)STELITANO
 
Elaborazione automatica dei dati: computer e matlab
Elaborazione automatica dei dati: computer e matlabElaborazione automatica dei dati: computer e matlab
Elaborazione automatica dei dati: computer e matlabprofman
 
CLEII - Corso di Laurea in Economia e Informatica per l'Impresa
CLEII - Corso di Laurea in Economia e Informatica per l'ImpresaCLEII - Corso di Laurea in Economia e Informatica per l'Impresa
CLEII - Corso di Laurea in Economia e Informatica per l'ImpresaLuca Moscardelli
 
Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)STELITANO
 
Insegnare a progettare il proprio apprendimento con il coding - Lezione 2
Insegnare a progettare il proprio apprendimento con il coding - Lezione 2Insegnare a progettare il proprio apprendimento con il coding - Lezione 2
Insegnare a progettare il proprio apprendimento con il coding - Lezione 2Michele Maffucci
 
Progetto MIPS/SPIM AA 2010-2011
Progetto MIPS/SPIM AA 2010-2011Progetto MIPS/SPIM AA 2010-2011
Progetto MIPS/SPIM AA 2010-2011Nicola Paoletti
 
Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!Marcello Missiroli
 

Similar to Fondamenti 17/10/2013 (13)

Lezione 3 (29 febbraio 2012)
Lezione 3 (29 febbraio 2012)Lezione 3 (29 febbraio 2012)
Lezione 3 (29 febbraio 2012)
 
15 - Programmazione: Algoritmi
15 - Programmazione: Algoritmi15 - Programmazione: Algoritmi
15 - Programmazione: Algoritmi
 
Flow chart
Flow chartFlow chart
Flow chart
 
Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)
 
Elaborazione automatica dei dati: computer e matlab
Elaborazione automatica dei dati: computer e matlabElaborazione automatica dei dati: computer e matlab
Elaborazione automatica dei dati: computer e matlab
 
come costruire un algoritmo
come costruire un algoritmocome costruire un algoritmo
come costruire un algoritmo
 
CLEII - Corso di Laurea in Economia e Informatica per l'Impresa
CLEII - Corso di Laurea in Economia e Informatica per l'ImpresaCLEII - Corso di Laurea in Economia e Informatica per l'Impresa
CLEII - Corso di Laurea in Economia e Informatica per l'Impresa
 
Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)
 
Insegnare a progettare il proprio apprendimento con il coding - Lezione 2
Insegnare a progettare il proprio apprendimento con il coding - Lezione 2Insegnare a progettare il proprio apprendimento con il coding - Lezione 2
Insegnare a progettare il proprio apprendimento con il coding - Lezione 2
 
Tutorial Matlab 2009
Tutorial Matlab 2009Tutorial Matlab 2009
Tutorial Matlab 2009
 
Progetto MIPS/SPIM AA 2010-2011
Progetto MIPS/SPIM AA 2010-2011Progetto MIPS/SPIM AA 2010-2011
Progetto MIPS/SPIM AA 2010-2011
 
Programmazione Top Down in C++
Programmazione Top Down in C++Programmazione Top Down in C++
Programmazione Top Down in C++
 
Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!
 

Fondamenti 17/10/2013

  • 1. PROGRAMMAZIONE I Algoritmo FONDAMENTI DI PROGRAMMAZIONE Problemi, Algoritmi, Diagrammi di flusso 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. Gianluca Cincotti • Un problema risolvibile mediante un algoritmo si dice computabile. ( Lezione I ) Dipartimento di Matematica e Informatica Università di Catania e-mail : cincotti@dmi.unict.it G.Cincotti Esempio di algoritmo Un altro esempio di algoritmo - Procuriamo il kit e gli strumenti; - Abbiamo gli ingredienti (pollo, olio, mandorle, cipolla, - Apriamo la scatola; sale, pepe, etc.) con le giuste quantità; - Leggiamo le istruzioni; - Seguiamo la ricetta; - Mettiamo insieme i pezzi. - Serviamo il piatto a tavola. Programmazione I Fondamenti di Programmazione, pag. 2 La costruzione di un kit di montaggio: Il pollo alle mandorle: G.Cincotti Programmazione I Fondamenti di Programmazione, pag. 3 G.Cincotti Programmazione I Fondamenti di Programmazione, pag. 4 Risoluzione di un problema Ma … Algoritmo Non è così facile come sembra ! • Per scrivere la giusta “sequenza di passi” Input Esecutore Output bisogna essere un bravo cuoco o un bravo costruttore ! 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. G.Cincotti Programmazione I Fondamenti di Programmazione, pag. 5 G.Cincotti Programmazione I Fondamenti di Programmazione, pag. 6 1
  • 2. Infatti … Risolutore Algoritmo Un algoritmo è una sequenza ordinata e Esecutore Problema finita di passi (azioni o istruzioni) che Uomo … la risoluzione automatica prevede comunque una notevole componente umana !!! Macchina producono un ben determinato risultato in un tempo finito. Processo di esecuzione Programmazione I G.Cincotti Definizione di algoritmo Fondamenti di Programmazione, pag. 7 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. 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. • • Fondamenti di Programmazione, pag. 8 Esempio di “non terminazione” 1. Si consideri un numero N; 2. Scrivere N; 2. Determinismo. • Programmazione I G.Cincotti 3. Scrivere il numero successivo; 4. Ripetere il passo precedente. L’esecuzione prima o poi deve finire e produrre il risultato in tempo finito. Osservazione : la 3 non implica la 4. Programmazione I G.Cincotti Fondamenti di Programmazione, pag. 9 Programmazione I G.Cincotti Ancora un esempio Fondamenti di Programmazione, pag. 10 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. Ricerca di un nominativo in un elenco. • Non ordinato. – Es.: Una lista di firme. • Ordinato. Algoritmo – Es.: Elenco telefonico. G.Cincotti Programmazione I Fondamenti di Programmazione, pag. 11 G.Cincotti Traduzione Programmazione I Programma Fondamenti di Programmazione, pag. 12 2
  • 3. L’esecuzione automatica Uomo Pseudo-codice Macchina G.Cincotti Programmazione I Output Fondamenti di Programmazione, pag. 13 Mescolare fino a quando il pollo sarà ben dorato; Aggiungere del pepe; Rosolare con vino bianco fino a quando il pollo è cotto; 6. Esecuzione Unire le mandorle pelate al soffritto; 5. Traduttore 2. 4. Programma Preparare il soffritto ed aggiungervi il pollo; 3. Linguaggio di alto livello Input Ricetta del pollo alle mandorle: 1. Algoritmo Linguaggio macchina Scomposizione in sottoproblemi Aggiungere olio q.b.; 7. Se preferisci salato, allora aggiungi sale; Programmazione I G.Cincotti Fondamenti di Programmazione, pag. 14 Scomposizione in sottoproblemi Descrizione di un algoritmo La ricetta precedente è un esempio di cosa significa scomporre un problema in sottoproblemi. Si descrive un algoritmo cercando di sintetizzare il più possibile la sua sequenza di passi. Ogni sottoproblema può essere scomposto in problemi via via più elementari. La descrizione avviene mediante : • pseudo-codice, oppure • diagramma di flusso. Top-down vs. Bottom-Up G.Cincotti Programmazione I Fondamenti di Programmazione, pag. 15 Programmazione I G.Cincotti Diagrammi di flusso Fondamenti di Programmazione, pag. 16 Diagrammi di flusso (1) I diagrammi di flusso permettono di descrivere in modo grafico le azioni che costituiscono un algoritmo e il loro flusso di esecuzione. Istruzioni di inizio e fine. Inizio • Ogni azione elementare è rappresentata da un blocco. Fine – Esistono 4 tipi di blocchi. G.Cincotti Programmazione I Fondamenti di Programmazione, pag. 17 G.Cincotti Programmazione I Fondamenti di Programmazione, pag. 18 3
  • 4. Diagrammi di flusso (2) Diagrammi di flusso (3) Operazioni di lettura (input) o scrittura (output). Leggi il dato G.Cincotti Programmazione I Istruzioni imperative (azioni oppure operazioni). Calcola : 20+34 Scrivi il dato Fondamenti di Programmazione, pag. 19 Programmazione I G.Cincotti Connettori Istruzione di assegnamento Una variabile numerica è un’entità caratterizzata : I singoli diagrammi devono essere uniti tramite i connettori. L’esecuzione delle istruzioni deve essere fatta sequenzialmente, ovvero seguendo i connettori. • 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. • Quando si scrive l’algoritmo bisogna fare molta attenzione alla direzione del flusso di esecuzione. • Es.: X, Programmazione I Fondamenti di Programmazione, pag. 21 X + 1, X + (Y * 3). Istruzione di assegnamento : “←” • Variabile ← Espressione; – Es.: G.Cincotti Fondamenti di Programmazione, pag. 20 Z ← 3; Esempio Z ← X + 3; Programmazione I G.Cincotti X ← X + 1; Fondamenti di Programmazione, pag. 22 Diagramma di flusso : Somma Inizio Descrivere, mediante diagramma di flusso, un algoritmo che calcoli la somma di due numeri letti in input. Z ← X+Y Leggi X Stampa Z Leggi Y G.Cincotti Programmazione I Fondamenti di Programmazione, pag. 23 G.Cincotti Programmazione I Fine Fondamenti di Programmazione, pag. 24 4
  • 5. Esempio Diagramma di flusso: Scambio Inizio Descrivere, mediante diagramma di flusso, un algoritmo che scambi i valori di due variabili lette in input. Aux ← X Leggi X Scrivi X X←Y Leggi Y Scrivi Y Y ← Aux Fine Programmazione I G.Cincotti Fondamenti di Programmazione, pag. 25 Programmazione I G.Cincotti Variazioni nel flusso di esecuzione Fondamenti di Programmazione, pag. 26 Diagrammi di flusso (4) Istruzioni condizionali. Ci sono dei momenti in cui il flusso di esecuzione può scegliere tra diverse direzioni; Es.: In genere, questi salti sono subordinati al verificarsi di una condizione (che può risultare Condizione vera o falsa); Falso Falso Più sale ? Si parla di istruzioni condizionali. Vero Vero G.Cincotti Programmazione I Fondamenti di Programmazione, pag. 27 Programmazione I G.Cincotti Esempio Fondamenti di Programmazione, pag. 28 Diagramma di flusso : Max Inizio Descrivere, mediante diagramma di flusso, un algoritmo che determini il massimo tra due numeri letti in input. X>Y Leggi X Vero Falso Stampa Y Stampa X Leggi Y Fine G.Cincotti Programmazione I Fondamenti di Programmazione, pag. 29 G.Cincotti Programmazione I Fondamenti di Programmazione, pag. 30 5
  • 6. Esempio Diagramma di flusso : Pari o… Inizio Descrivere, mediante diagramma di flusso, un algoritmo che determini se un numero letto in input è pari o dispari. Resto = 0 Leggi N Vero Falso Scrivi : “N è dispari” Scrivi : “N è pari” Dividi N per 2 Fine G.Cincotti Programmazione I Fondamenti di Programmazione, pag. 31 G.Cincotti Esercizio Programmazione I Fondamenti di Programmazione, pag. 32 Ripetizione o “ciclo” … 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. Il pollo è cotto? Falso Rosolare con vino Vero … G.Cincotti Programmazione I Fondamenti di Programmazione, pag. 33 G.Cincotti Programmazione I Fondamenti di Programmazione, pag. 34 PROGRAMMAZIONE I FONDAMENTI DI PROGRAMMAZIONE ( Lezione II ) Fine Notazione Lineare Strutturata Gianluca Cincotti Dipartimento di Matematica e Informatica Università di Catania e-mail : cincotti@dmi.unict.it G.Cincotti Programmazione I Fondamenti di Programmazione, pag. 35 6
  • 7. Esempio Esempio : Fattoriale Inizio Descrivere, mediante diagramma di flusso, un algoritmo che calcoli il fattoriale di un numero intero positivo letto in input. Fatt ← Fatt * M Leggi N M ← M +1 Fatt ← 1 VERO M←1 M>N FALSO Scrivi Fatt Fine Programmazione I G.Cincotti Fondamenti di Programmazione, pag. 37 Programmazione I G.Cincotti Considerazioni Fondamenti di Programmazione, pag. 38 Notazione Lineare Strutturata I diagrammi a blocchi si rivelano : Tre costrutti fondamentali : • poco pratici, • Sequenza, • soggetti a errori, • Selezione, • illeggibili se di notevole complessità. • Iterazione. Per ovviare a tali inconvenienti si adotta la Notazione Lineare Strutturata (NLS) o pseudocodice. Programmazione I G.Cincotti Fondamenti di Programmazione, pag. 39 Inoltre, esiste un unico punto d’ingresso ed un unico punto d’uscita. Programmazione I G.Cincotti Sequenza Fondamenti di Programmazione, pag. 40 Selezione (o condizione) if (Condizione) then Istruzione 1 Falso Istruzione 1; Istruzione 2 ≡ … Condizione Istruzione 2; ≡ else Blocco 2; … Istruzione n; end if Blocco 2 Blocco 1 La clausola “else” può anche essere assente. Istruzione n G.Cincotti Blocco 1; Vero Programmazione I Fondamenti di Programmazione, pag. 41 G.Cincotti Programmazione I Fondamenti di Programmazione, pag. 42 7
  • 8. Ricapitolando ... Iterazione (o ciclo) Falso Condizione while (Condizione) do Vero ≡ Blocco; end while; Blocco G.Cincotti Programmazione I Fondamenti di Programmazione, pag. 43 Programmazione I G.Cincotti Risultato fondamentale Fondamenti di Programmazione, pag. 44 Esempio : Somma Inizio TEOREMA (Böhm-Jacopini) : Z ← X+Y • I tre costrutti fondamentali della NLS sono sufficienti a descrivere qualunque algoritmo. Leggi X Stampa Z Leggi Y G.Cincotti Programmazione I Fondamenti di Programmazione, pag. 45 Fine Programmazione I G.Cincotti Esempio : Somma in NLS Fondamenti di Programmazione, pag. 46 Esempio : Max Inizio Inizio Leggi X Leggi Y Z←X+Y Stampa Z Fine X>Y Leggi X Vero Falso Stampa Y Stampa X Leggi Y Fine G.Cincotti Programmazione I Fondamenti di Programmazione, pag. 47 G.Cincotti Programmazione I Fondamenti di Programmazione, pag. 48 8
  • 9. Esempio : Max in NLS Esempio : Numeri da 1 a N Inizio Leggi X Leggi Y if (X > Y) then Stampa X else Stampa Y end if Fine G.Cincotti Programmazione I Inizio Leggi N M←0 while (M < N) do M←M+1 Stampa M end while Fine Fondamenti di Programmazione, pag. 49 G.Cincotti Programmazione I Fondamenti di Programmazione, pag. 50 Esempio : Esempio : Somma dei primi N numeri Somma dei numeri pari minori di N Inizio Leggi N i←0 S←0 while (i < N) do i←i+1 S←S+i end while Stampa S Fine G.Cincotti Programmazione I Inizio Leggi N i←2 S←0 while (i < N) do S←S+i i← i+2 end while Stampa S Fine Fondamenti di Programmazione, pag. 51 G.Cincotti Programmazione I Fondamenti di Programmazione, pag. 52 Algoritmo di Euclide per il m.c.m. Inizio Leggi A, B MA ← A MB ← B while (MA <> MB) do if (MA > MB) then MB ← MB + B else MA ← MA + A end if end while Stampa “mcm =” MA Fine G.Cincotti Programmazione I Es.: m.c.m. (3, 7) = 21 MA 3 6 9 MB 7 Fine 14 12 15 21 18 21 Fondamenti di Programmazione, pag. 53 G.Cincotti Programmazione I Fondamenti di Programmazione, pag. 54 9