Unità Didattica 1
Algoritmi
1
Analisi e Programmazione
• Insieme delle attività necessarie per la risoluzione dei problemi
per mezzo di un elaboratore: dalla formulazione del problema
alla predisposizione dell’elaboratore.
Analisi e Programmazione
Problema
Risultati
• Scopo dell’analisi è definire un algoritmo: elenco finito di
istruzioni necessarie per risolvere una classe di problemi; in
generale non può essere eseguito da un elaboratore;
• Scopo della programmazione è definire un programma. Un
programma è la descrizione comprensibile ed eseguibile di un
algoritmo da parte di un elaboratore
2
Algoritmi e Programmi
Problema
Analisi
Algoritmo
Diagramma
a blocchi
Programmazione
Programma
Linguaggio
programmativo
Risultati
3
Algoritmi
•
Un elenco di istruzioni è un algoritmo se sono
soddisfatte le seguenti proprietà:
1.
Finitezza: ogni istruzione deve essere eseguita in un
tempo finito e un numero finito di volte;
2.
Generalità: ogni algoritmo deve fornire la soluzione per i
problemi appartenenti ad una determinata classe.
3.
Non ambiguità: devono essere definiti in modo univoco
tutti i passi; devono essere evitati paradossi,
contraddizioni ed ambiguità.
4
Descrizione degli Algoritmi
•
Uso di un linguaggio generalizzato costituito da strutture
linguistiche prive di ambiguità e ridondanze;
•
Uso di espressioni (frasi) contenenti:
1.
2.
Descrizione delle operazioni (istruzioni);
Eventuale descrizione dei dati su cui eseguire le istruzioni.
5
Dati e Istruzioni
•
Dati:
–
–
–
Costanti (valore invariabile all’interno dell’algoritmo);
Variabili scalari: <nome, valore>
Variabili vettoriali: <nome, insieme di valori>
(il valore delle variabili è indeterminato all’inizio di un algoritmo).
•
Istruzioni:
1. Istruzioni operative (producono risultati se eseguite);
2. Istruzioni di controllo (in funzione del verificarsi di
3.
condizioni determinano l’esecuzione
di alcune istruzioni piuttosto che di altre);
Istruzioni di salto (alterano l’ordine di esecuzione delle
istruzioni);
4. Istruzioni di inizio e fine;
5. Istruzioni di I/O (trasmissione dati o messaggi fra
l’ambiente esterno e l’algoritmo).
6
Proposizioni e predicati
• Come sono espresse le condizioni nelle istruzioni di
controllo?
– Le istruzioni di controllo verificano se una condizione è vera o falsa.
– La condizione viene espressa per mezzo di predicati.
• Proposizione:
Costrutto linguistico del quale si può dire se è vero o falso.
• Predicato:
Una proposizione è un predicato se in essa appaiono delle
variabili e il valore di verità delle variabili determina il valore di verità
della proposizione.
I predicati si esprimono con operatori logici e relazionali.
- Predicati Semplici: predicati di un solo operatore relazionale;
- Predicati Composti: predicati con operatori logici (AND, OR, NOT).
7
Operatori Relazionali
•
•
•
•
•
•
=
≠
>
<
≥
≤
uguale
diverso
maggiore
minore
maggiore o uguale
minore o uguale
8
Op. Logici e Tavole di Verità
• Tavole di Verità:
– descrivono i valori di verità dei predicati in funzione dei valori di
verità delle singole parti.
– Esprimono le modalità con cui operano gli operatori logici.
• Esempi:
A
B
A and B
A
B
A or B
A
not A
0
0
0
0
0
0
0
1
0
1
0
0
1
1
1
0
1
0
0
1
0
1
1
1
1
1
1
1
9
Esempi di Predicati
•
•
•
•
età > 30 (Predicato semplice)
età > 30 AND età < 50
età > 30 OR età < 50 sempre vera!
NOT età > 50
10
Diagrammi a Blocchi
• Esempio di un linguaggio generalizzato per la descrizione degli
algoritmi;
• Rappresentazione grafica del flusso, ossia l’ordine di
esecuzione delle operazioni;
• I blocchi contengono istruzioni elementari, la forma del blocco
indica il tipo di istruzioni;
Inizio
V
Lettura
Scrittura
Azioni
F
Controllo
Fine
11
Analisi Strutturata
• Procedimento che permette di ottenere descrizioni di
algoritmi che siano facilmente documentabili e
comprensibili;
• Schemi di flusso di un diagramma a blocchi:
– Schema di sequenza: esecuzione sequenziale di
due o più schemi;
– Schema di selezione: esecuzione di uno schema
subordinata ad un blocco di controllo;
– Schema di iterazione: esecuzione di uno schema
n volte;
12
Diagramma a Blocchi
Strutturati
• Uno schema di flusso è strutturato se i suoi blocchi
sono collegati con gli schemi di flusso precedenti;
• Un diagramma a blocchi è strutturato se sono
strutturati tutti gli schemi di flusso che lo
compongono;
• In un diagramma a blocchi strutturato non compare
mai alcuna istruzione di salto;
13
Schema di Iterazione
• Ciclo definito: si conosce a priori il numero di iterazioni;
• Ciclo indefinito: si esce dal ciclo al verificarsi di una data
condizione;
Iterazione per vero
con controllo in testa
Inizializzazione
Iterazione
Condizione
di fine
ciclo
V
F
Iterazione per falso
con controllo in coda
Inizializzazione
Condizione
di fine
ciclo
F
V
Iterazione
14
Principio di Induzione
•
Sia Pn una proposizione di cui si può
dire se è vera o falsa
Hp) Sia P0 vera;
Supponendo Pn-1 vera, si dimostra che Pn è vera;
Ts) Pn è vera ∀n.
15
Algoritmi Ricorsivi
• Un algoritmo si dice ricorsivo quando è
definito nei termini di se stesso;
• È costituito da due parti:
1. Passo base
(stabilisce il risultato per valori precisi dei dati iniziali);
2. Passo di induzione
(risultato per n in funzione del risultato per n-1).
16
Esempi di algoritmi ricorsivi
• Potenza (definizione iterativa):
a b = a1⋅ 42
a ⋅ ........
⋅a
43
b volte
• Potenza (definizione ricorsiva):
b=0
1
a =
b −1
a
a
b≠0
⋅

b
17
Esempi di algoritmi ricorsivi
• Fattoriale (definizione iterativa):
n! = n ⋅ (n − 1) ⋅ ... ⋅ 1
• Fattoriale (definizione ricorsiva):
n=0
1
n!= 
n ⋅ (n − 1)! n ≠ 0
18
Diagramma di Flusso del
Fattoriale Iterativo
Inizio
i ←1
F
fatt ← 1
i≤n
V
fatt ← fatt ⋅ i
i ← i +1
Fine
19
Diagramma di Flusso del
Fattoriale Ricorsivo
Inizio
V
n=0
F
fatt ← n ⋅ fatt(n −1)
fatt ← 1
Fine
20
Sviluppo del Fattoriale
Ricorsivo
4! = 4 ⋅ 3!
4! = 4 ⋅ 3! = 4 ⋅ 6 = 24
3! = 3 ⋅ 2!
3! = 3 ⋅ 2! = 3 ⋅ 2 = 6
2! = 2 ⋅ 1!
2! = 2 ⋅ 1! = 2 ⋅ 1 = 2
1! = 1 ⋅ 0!
Passo base
1! = 1 ⋅ 0! = 1 ⋅ 1 = 1
0! = 1
21