Sei sulla pagina 1di 26

Definizione di Algoritmo

INFORMATICA
Corsi di Educazione, Ed. Comunità, Comunicazione e
Psicologia
a.a. 2010/2011
ing. Orazio Gambino
Definizione Formale di Algoritmo
• Un insieme ben ordinato di operazioni non
ambigue ed effettivamente calcolabili che,
eseguito, produce un risultato e termina in
una quantità finita di tempo.
– Insieme ben ordinato
– Operazioni non ambigue e calcolabili
– Produce un risultato
– Termina in una quantità finita di tempo

DICGIM ing. Orazio Gambino


Insieme ben ordinato
Preparazione di una torta di • Ordinamento delle operazioni da eseguire chiaro
ciliegie e non ambiguo
1.Prepara la base • Il controllo deve procedere senza ambiguità da
2.Prepara il ripieno di ciliegie una operazione alla successiva
3.Versa il ripieno sulla base – Le operazioni sono elencate come passi
4.Cuoci in forno a 200°C per numerati
45 minuti – In assenza di altra indicazione (operazioni
condizionali o iterative) il controllo passa
sempre al passo successivo

DICGIM ing. Orazio Gambino


Operazioni non ambigue e calcolabili
• Tutti i passi devono essere chiari per
l’agente.  Preparazione di una torta di ciliegie
– I passi 1 e 2 potrebbero essere
chiari ad un pasticcere
professionista.
1. Prepara la base
2. Prepara il ripieno di ciliegie
• Una operazione non-ambigua è detta 3. Versa il ripieno sulla base
una operazione primitiva 4. Cuoci in forno a 200°C per 45 minuti

• Partendo da una prima versione


dell’algoritmo, occorre verificare che
tutte le operazioni coinvolte siano
primitive

• Un algoritmo deve essere composto


solo da primitive

DICGIM ing. Orazio Gambino


Operazioni non ambigue e calcolabili

• Per un non professionista, il passo 1  Preparazione di una torta di ciliegie


va scomposto in un insieme di
sottopassi più semplici
1. Prepara la base
• Cioè, il grado di astrazione della 1.1. Prendi 1/3 tazza di farina
rappresentazione è troppo elevato. 1.2. Setaccia la farina
1.3. In una terrina, miscela farina, ½ tazza di
La preparazione della base non burro e ¼ tazza di acqua
rientra nella conoscenza 1.4. Spiana il composto in due basi di torta da
circa 23 cm
dell’esecutore. 2. Prepara il ripieno di ciliegie
3. Versa il ripieno sulla base
• Con l’espansione del passo 1. in 4. Cuoci in forno a 200°C per 45 minuti
sottopassi più semplici, abbassiamo il
livello di astrazione, fino a giungere al
livello di comprensione dell’ agente
di calcolo (la persona o la cosa che
esegue l’algoritmo).

DICGIM ing. Orazio Gambino


Operazioni non ambigue e calcolabili
• Il passo 1 viene scomposto in un  Preparazione di una torta di ciliegie
insieme di sottopassi più semplici

1. Prepara la base
• Il passo 2 viene scomposto in una 1.1. Prendi 1/3 tazza di farina
1.2. Setaccia la farina
serie di sottopassi più semplici 1.3. In una terrina, miscela farina, ½ tazza di
burro e ¼ tazza di acqua
1.4. Spiana il composto in due basi di torta da
• Tuttavia, il passo 1.2 potrebbe essere circa 23 cm
2. Prepara il ripieno di ciliegie
non adatto ad essere eseguito per 2.1. Versa in una terrina 100 g di ripieno di
esempio da un bambino ciliegia
2.2. Aggiungi un pizzico di noce moscata e
cannella
2.3. Mescola
3. Versa il ripieno sulla base
4. Cuoci in forno a 200°C per 45 minuti

DICGIM ing. Orazio Gambino


Operazioni non ambigue e calcolabili
 Preparazione di una torta di ciliegie
• Il passo 1 viene scomposto in un
1. Prepara la base
insieme di sottopassi più semplici 1.1. Prendi 1/3 tazza di farina
1.2. Setaccia la farina
• Il passo 2 viene scomposto in una 1.2.1. Prendi un setaccio e mettilo su una terrina
da due quarti di litro
serie di sottopassi più semplici
1.2.2. Versa la farina nel setaccio e gira la
manovella
• Tuttavia, il passo 1.2 potrebbe essere 1.2.3. Lascia cadere la farina nella terrina
non adatto ad essere eseguito per 1.3. In una terrina, miscela farina, ½ tazza di burro
e ¼ tazza di acqua
esempio da un bambino 1.4. Spiana il composto in due basi di torta da circa
23 cm
• Il passo 1.2 può infatti essere 2. Prepara il ripieno di ciliegie
ulteriormente decomposto in 2.1. Versa in una terrina 100 g di ripieno di
ciliegia
operazioni più elementari 2.2. Aggiungi un pizzico di noce moscata e
cannella
2.3. Mescola
3. Versa il ripieno sulla base
4. Cuoci in forno a 200°C per 45 minuti

DICGIM ing. Orazio Gambino


Operazioni non ambigue e calcolabili
 Preparazione di una torta di ciliegie
• In sintesi, è fondamentale arrivare ad
una descrizione dell’algoritmo in 1. Prepara la base
primitive eseguibili da un agente di 1.1. Prendi 1/3 tazza di farina
calcolo senza necessità di ulteriori 1.2. Setaccia la farina
1.2.1. Prendi un setaccio e mettilo su una terrina
istruzioni. da due quarti di litro
1.2.2. Versa la farina nel setaccio e gira la
manovella
• Le operazioni devono poi essere 1.2.3. Lascia cadere la farina nella terrina
effettivamente calcolabili 1.3. In una terrina, miscela farina, ½ tazza di burro e
¼ tazza di acqua
– Stampare la lista di tutti i numeri 1.4. Spiana il composto in due basi di torta da circa
primi 23 cm
2. Prepara il ripieno di ciliegie
– Somma 1 al valore corrente di x 2.1. Versa in una terrina 100 g di ripieno di
ciliegia
2.2. Aggiungi un pizzico di noce moscata e
cannella
2.3. Mescola
3. Versa il ripieno sulla base
4. Cuoci in forno a 200°C per 45 minuti

DICGIM ing. Orazio Gambino


Produce un risultato
 Preparazione di una torta di ciliegie
• Gli algoritmi risolvono problemi 1. Prepara la base
• Per comprendere se una soluzione 2. Prepara il ripieno di ciliegie
algoritmica è corretta, il suo risultato 3. Versa il ripieno sulla base
deve potere essere confrontato con
4. Cuoci in forno a 200°C per 45
quello atteso.
minuti
• Se un risultato non è producibile,
 Risultato
l’algoritmo deve produrre un
messaggio di errore, attivare un  la torta!
allarme, o fornire una
approssimazione del risultato  Programmazione di un VCR
corretto  Risultato
• Una primitiva può essere anche un  il nastro col programma
algoritmo con un grado di astrazione televisivo registrato
più basso.

DICGIM ing. Orazio Gambino


Termina in una quantità finita di tempo
• Il risultato deve essere prodotto dopo  Ciclo infinito
l’esecuzione di un numero finito di Fare lo shampoo
operazioni 1. Inumidisci i capelli
• E’ sempre buona abitudine chiudere un 2. Insapona
algoritmo con una frase di chiusura 3. Risciacqua
• E’ tipico causare dei cicli infiniti quando 4. Ripeti
per esempio la condizione presente nella
operazione iterativa non si verifica mai  Risultato
• Esempio:  Il cliente si stanca, finisce l’acqua,
finisce lo shampoo?
1. Poni i=0
2. Ripeti il passo 3 finché i<3
 Ciclo finito
3. Stampa “Ciao!” Fare lo shampoo
4. Fine 1. Inumidisci i capelli
• Risultato: 2. Ripeti due volte i passi 3 e 4
– Ciao!Ciao!Ciao! 3. Insapona
oppure 4. Risciacqua
– Ciao!Ciao!Ciao!Ciao!Ciao!… 5. Stop. Lo shampoo è fatto

DICGIM ing. Orazio Gambino


Analisi top-down
• La metodologia top-down di sviluppo di un
programma riguarda i metodi di risoluzione di
un problema per analisi, basati sulla
decomposizione del problema.
– Nulla di strano:
Il problema della torta visto precedentemente è un
esempio di analisi top-down.

DICGIM ing. Orazio Gambino


Analisi top-down
• L’analisi top-down (dall’alto verso il basso)
prevede la scomposizione del problema generale
da risolvere in più sotto-problemi a loro volta da
risolvere per ottenere la soluzione del problema
originario.
• Ciacuno di tali sotto-problemi viene poi
affrontato, come il problema originario,
identificando un insieme di sottoproblemi la cui
soluzione determina la risoluzione del
sottoproblema originario

DICGIM ing. Orazio Gambino


Analisi top-down
• Il procedimento di scomposizioni successive viene
iterato fino a che tutti i sottoproblemi individuati
siano “facilmente risolvibili”, cioè abbiamo
raggiunto il livello di astrazione adeguato al
linguaggio dell’agente.
• Il problema iniziale viene progressivamente
decomposto in sottoproblemi più semplici che
possono essere rappresentati in un albero detto
di decomposizione funzionale

DICGIM ing. Orazio Gambino


Analisi top-down
• Il problema iniziale è decomposto in un
insieme di problemi più semplici. Ad esempio
il problema iniziale P è decomposto nei
sottoproblemi P1, P2 e P3.

DICGIM ing. Orazio Gambino


Analisi top-down
• Se i sottoproblemi individuati sono ancora
complessi, ciascuno di essi può ancora essere
decomposto:

DICGIM ing. Orazio Gambino


Analisi top-down
• La descrizione della soluzione per il problema P è
basata sulla specifica dei suoi sottoproblemi cioè:
– che cosa si richiede a ciascun sottoproblema P1,
P2,..(in termini di compito da svolgere)
– quali sono i dati di ingresso e uscita di ciascun
sottoproblema
– l’informazione ottenuta da ogni sottoproblema
è usata come dato nel sottoproblema di
astrazione più elevata

DICGIM ing. Orazio Gambino


Analisi top-down
• Nel costruire la soluzione del problema
generale si suppone che i sotto-problemi siano
stati già risolti.
• Con la stessa tecnica si affronta ciascun
sottoproblema

DICGIM ing. Orazio Gambino


Analisi top-down
• La decomposizione può essere rappresentata
mediante un albero:

- R è chiamata radice. A B C D sono le foglie.


- Nella radice vi è il problema iniziale.
- Nelle foglie vi sono i sottoproblemi elementari, considerati
facilmente risolubili

DICGIM ing. Orazio Gambino


Analisi top-down
Algoritmo espresso in linguaggio naturale TOP

Pseudocodice

Pseudocodice

Codice - DOWN
(espresso
DICGIM in un linguaggio
ing. di programmazione)
Orazio Gambino
Analisi top-down
• L’algoritmo è espresso inizialmente in modo
astratto in linguaggio naturale (mediante l’uso di
astrazioni sul controllo, sui tipi di dato e sulle
funzioni)
• Tale descrizione è raffinata (dettagliata) in diversi
passi, producendo descrizioni in pseudocodice
• Il processo di raffinamento termina quando
l’algoritmo è espresso in modo da essere
codificato direttamente in un linguaggio di
programmazione (procedurale cioè algoritmico)

DICGIM ing. Orazio Gambino


Analisi top-down
• Lo scopo del processo di decomposizione è di
trasformare la soluzione del problema iniziale
nella soluzione di molti problemi più semplici
e più facilmente risolubili.
• La soluzione per un problema P si ottiene
componendo le soluzioni dei suoi
sottoproblemi utilizzando le strutture di
controllo di sequenza, selezione e ciclo.

DICGIM ing. Orazio Gambino


Teorema di Böhm-Jacopini
Il Teorema di Böhm-Jacopini, enunciato nel
1966 dagli informatici Corrado Böhm e Giuseppe
Jacopini, afferma che qualunque algoritmo può
essere implementato utilizzando tre sole
strutture: la sequenza, la selezione (detta anche
diramazione o operazioni condizionali) ed il
ciclo (detto anche iterazione), da applicare
ricorsivamente alla composizione di istruzioni
elementari.
DICGIM ing. Orazio Gambino
Teorema di Böhm-Jacopini
La sequenza è la normale elencazione di
istruzioni perché vengano eseguite una di
seguito all'altra nell'ordine esatto.

La selezione è la scelta fra due percorsi da


seguire successivamente, che dipende da una
condizione che può essere vera o falsa.

DICGIM ing. Orazio Gambino


Teorema di Böhm-Jacopini
Il ciclo, detto anche iterazione, è un blocco di
istruzioni che vengono ripetutamente eseguite
fino a che una certa condizione cambia di stato.
E’ costituito da una condizione di continuità del
ciclo ed una sequenza di istruzioni da eseguire
ripetutamente, detta corpo del ciclo.

DICGIM ing. Orazio Gambino


Analisi bottom-up
• La metodologie bottom-up di progettazione e
sviluppo di un programma riguardano i metodi
di risoluzione di un problema per sintesi basati
sulla interconnessione di componenti già
disponibili.
• Questa metodologia porta alla costruzione di
componenti standard riutilizzabili

DICGIM ing. Orazio Gambino


Analisi bottom-up
• Compito della programmazione in grande è il
progetto della struttura del programma, come
un insieme di parti (moduli)
• La programmazione in piccolo si occupa del
progetto e della realizzazione di ciascuna
parte, mediante il progetto e l’implementa-
zione di algoritmi.

DICGIM ing. Orazio Gambino