Fondamenti di Informatica
Algoritmi
Corso di Laurea in
Ingegneria Civile
Prof. Dario Bianchi
Dario Bianchi - 2003
Fond. Informatica - Ing. Civile
Elaborazione dell’Informazione
Risolvere un problema comporta:
• Avere dei dati in ingresso
• Elaborare questi dati
• Produrre dei dati in uscita
Bisogna quindi:
• Descrivere i dati
• Specificare come trattarli
Dario Bianchi - 2003
Fond. Informatica - Ing. Civile
Processi
• Un processo trasforma un insieme di dati iniziali
nei risultati finali mediante una successione di
azioni elementari.
• Per descrivere un processo e’ necessario
utilizzare un linguaggio. Il linguaggio deve far
corrispondere a una frase ben precisa o
istruzione ad ogni azione elementare e deve
indicare come le aziono elementari si succedono
nel processo.
Dario Bianchi - 2003
Fond. Informatica - Ing. Civile
Programma, esecutore, algoritmo
• L’insieme delle istruzioni che descrivono
un processo espresse in un qualche
linguaggio prende il nome di programma.
• Il programma e’ espresso in termini di
azioni elementari che un esecutore, uomo
o macchina, deve essere in grado di
mettere in atto.
• La descrizione rigorosamente definita di
un processo (eseguibile in un tempo finito)
e’ un algoritmo.
Dario Bianchi - 2003
Fond. Informatica - Ing. Civile
Requisiti degli algoritmi
• Ogni istruzione deve essere ben definita
nei suoi effetti (rigorosamente e senza
ambiguita`).
• Ogni istruzione rappresenta una azione
elementare che che l’esecutore puo`
portare a termine in un tempo finito.
• Il processo dall’algoritmo deve terminare
dopo un numero finito di passi. ( un passo
= esecuzione di una azione elementare)
Dario Bianchi - 2003
Fond. Informatica - Ing. Civile
Algoritmo di Euclide
• Calcola il massimo comun divisore fra due
interi positivi m ed n (supponiamo che
n ≥ m, altrimenti li possiamo scambiare).
• L’ algoritmo si compone di 3 passi ripetuti
ciclicamente fino ad una condizione di
arresto:
Dario Bianchi - 2003
Fond. Informatica - Ing. Civile
Algoritmo di Euclide
• Passo E1 {ricerca del resto} : Sia m ≥ n.
Si divide m per n. Sia r il resto.
Allora 0 ≤ r < n.
• Passo E2 {r = 0?} : Se r = 0 l’ algoritmo e’
terminato e n e’ la risposta finale.
• Passo E3 {scambio} : Se r ≠ 0 si operano
gli scambi m ← n e n ← r. Si torni al passo
E1.
Dario Bianchi - 2003
Fond. Informatica - Ing. Civile
Algoritmo di Euclide: esempio
Si voglia l’ MCD fra 30 e 45 (I due numeri vanno scambiati)
m
n
r
45
30
15
30
15
0
Poiche’ il resto r = o, l’ultimo valore per n e’ l’ MCD
Dario Bianchi - 2003
Fond. Informatica - Ing. Civile
Algoritmo di Euclide: finitezza
• Poiche’ al passo E1 {ricerca del resto} si
ha senpre 0 ≤ r < n, ad ogni scambio il
valore di n decresce.
• Dopo un numero finito di passi si
raggiungera` la condizione r = 0, e la
terminazione dell’ algoritmo.
Dario Bianchi - 2003
Fond. Informatica - Ing. Civile
Algoritmo di Euclide: correttezza
• Ad ogni passo abbiamo che m = q n + r
(con q intero).
• Se r ≠0 ogni divisore di m,n divide anche
r=m-qn. D’altra parte anche ogni divisore
di n,r divide m=qn+r.
• In pratica la coppia m,n primo e dopo lo
scambio m ← n e n ← r hanno lo stesso
MCD.
• Se r=0 l’ algoritmo termina e n e’ l’MCD.
Dario Bianchi - 2003
Fond. Informatica - Ing. Civile
Il crivello di Eratostene
• Si vogliono trovare tutti i numeri primi
compresi fra 2 e n (In modo efficiente).
1) Si costruisca una sequenza ordinata dei numeri
fra 2 e n.
2) Si estragga il primo numero dalla sequenza. E’
necessariamente un numero primo.
3) Si eliminino dalla sequenza tutti i multipli del
numero estratto al passo 2).
4) se la sequenza non e’ vuota si torna la passo 2)
altrimenti si termina.
Dario Bianchi - 2003
Fond. Informatica - Ing. Civile
Il crivello di Eratostene: esempio
• Sequenza iniziale (da 2 a 20):
2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20
2 e’ primo lo elimino con tutti i suoi multipli:
3,5,7,9,11,13,15,17,19
3 e’ primo lo elimino con tutti i suoi multipli:
5,7,11,13,17,19
5 e’ primo lo elimino con tutti i suoi multipli:
…
19 e’ primo, la sequenza e’ vuota, termino.
Dario Bianchi - 2003
Fond. Informatica - Ing. Civile
Diagrammi di flusso
• Sono un linguaggio grafico per la
rappresentazione di algoritmi
• Le operazioni su cui si basa un diagramma di
flusso
–
–
–
–
–
–
Ingresso/Uscita dati
Trasferimento di informazione (Assegnamenti)
Calcolo di espressioni aritmetiche e logiche
Assunzione di decisioni
Esecuzione di iterazioni (Cicli)
Possono contenere costanti e variabili
Dario Bianchi - 2003
Fond. Informatica - Ing. Civile
Simboli
Start
Inizio diagramma
Stop
Fine diagramma
Var
Var = Expr
Var
Scrittura dati
Si
Condizioni
Expr1 = Expr2 Expr1 ≠ Expr2
Expr1 < Expr2 Expr1 > Expr2
Expr1 ≤ Expr2 Expr1 ≥ Expr2
Dario Bianchi - 2003
Linea di
flusso
Elaborazione
Assegnamenro
Lettura dati
Condizione
Decisione
Fond. Informatica - Ing. Civile
No
Programmazione Strutturata
• Si compone di sequenze, decisioni (if
then, if then else) e cicli (while-do, repeat
until).
• Ogni diagramma ha esattamente un
ingresso ed una uscita.
• Ogni azione puo essere
– una azione semplice
– una azione composta da altri diagrammi
strutturati
Dario Bianchi - 2003
Fond. Informatica - Ing. Civile
Somma di tre numeri
Start
X1
Somma←X1+X2+X3
X2
Somma
X3
Fine
Dario Bianchi - 2003
Fond. Informatica - Ing. Civile
Somma di N numeri
Start
N
N
I<N
Si
Somma=0
X3
I=0
X
Somma
Fine
Somma←Soma+X
I=I+1
Dario Bianchi - 2003
Fond. Informatica - Ing. Civile
Strutture per il controllo di flusso
• Sequenza
I
I
O
O
Dario Bianchi - 2003
Fond. Informatica - Ing. Civile
Strutture per il controllo di flusso
• Decisione If then
I
Vero
Cond
I
Azione
Falso
O
O
Dario Bianchi - 2003
Fond. Informatica - Ing. Civile
Strutture per il controllo di flusso
• Decisione If Then Else
I
Vero
Falso
Cond
Azione1
I
Azione2
O
O
Dario Bianchi - 2003
Fond. Informatica - Ing. Civile
Strutture per il controllo di flusso
• Ciclo While-Do
I
I
Falso
Cond
Vero
Azione
Dario Bianchi - 2003
O
Fond. Informatica - Ing. Civile
O
Strutture per il controllo di flusso
• Ciclo Repeat Until
I
I
Azione
Falso
Vero
O
Cond
O
Dario Bianchi - 2003
Fond. Informatica - Ing. Civile
Tecniche di programmazione
• Programmazione top-down:
– scomposizione iterativa del problema in
sottoproblemi
– i sottoproblemi devono essere indipendenti ed
avere interfacce ben definite
– visibilità dei dettagli di ogni sottoproblema
solo all’interno del sottoproblema stesso
Dario Bianchi - 2003
Fond. Informatica - Ing. Civile