AOT
LAB
Agent and Object Technology Lab
Dipartimento di Ingegneria dell’Informazione
Università degli Studi di Parma
Fondamenti di Informatica
Algoritmi
Prof. Agostino Poggi
AOT
LAB
Algoritmo
Il termine algoritmo deriva dal matematico arabo
Al-Khowarzimi del IX secolo d.c. che suggerì un
metodo per sommare 2 numeri rappresentati dal
sistema numerico Hindu
Nel medioevo con il termine algorismus si indicava
il complesso di operazioni nel calcolo numerico
con numeri arabi
Oggi con il termine algoritmo si indica la sequenza
finita di passi effettuabili per risolvere una classe di
problemi in un tempo finito
2
AOT
LAB
Algoritmo
Un algoritmo è un metodo generale che risolve
qualsiasi istanza di un dato problema di
elaborazione
Un algoritmo deve avere le seguenti proprietà:
Finitezza: composto da un numero finito di passi
elementari
Non ambiguità (determinismo): i risultati non variano in
funzione della macchina/persona che esegue l'algoritmo
Realizzabilità: deve essere eseguibile con le risorse a
disposizione
3
AOT
LAB
Algoritmo
Per definire un algoritmo è necessario:
Condurre un'attenta analisi del problema ed
eventualmente suddividere il problema in piccoli
sottoproblemi
Individuare i possibili ingressi e precisare le uscite
(definizione dei dati)
Definire completamente e dettagliatamente la sequenza
dei passi che portano alla soluzione
4
AOT
LAB
Problema dei Secchi
Sono presenti due secchi con capacità volumetrica
rispettivamente di 4 e 3 litri
Determinare le operazioni necessarie per far si
che il primo secchio (da 4 litri) sia riempito con 2
litri
Possiamo agire sui due secchi attraverso le
seguenti operazioni:
Riempire completamente un secchio
Svuotarlo completamente
Travasare una certa quantità di liquido da un secchio
all’altro
5
AOT
LAB
Problema dei Secchi
1. Riempi il secchio da 4 litri (4, 0)
2. Travasa nel secchio da 3 litri finché e pieno (1,3)
3. Vuota il secchio da 3 litri (1,0)
4. Travasa nel secchio da 3 litri (0,1)
5. Riempi il secchio da 4 litri (4,1)
6. Travasa nel secchio da 3 litri finché e pieno (2,3)
6
AOT
LAB
4L
Problema dei Secchi
3L
7
AOT
LAB
Gestione di una Biblioteca
La biblioteca contiene un certo numero di scaffali
Ogni scaffale contiene un certo numero di libri che
non vengono spostati quando un libro è estratto
La biblioteca è dotata di schedario
Le schede sono poste in ordine alfabetico per autore
A parità di primo autore per secondo e così via
A parità di autori le schede sono in ordine di data
8
AOT
LAB
Accesso a un Libro
1. Si cerca la scheda del libro nello schedario
2. Trovata questa, si segna su un foglietto il numero
di scaffale e la posizione del libro
3. Si ricerca lo scaffale indicato
4. Si accede alla posizione del libro
5. Lo si preleva
6. Se richiesto
1. si scrive sulla scheda: data del prestito e nome di chi
prende in prestito
9
AOT
LAB
Accesso a un Libro
Il passo 1, a sua volta, può essere esploso nella
seguente insieme di passi (sottoprocedura):
1. Si esamini la prima scheda dello schedario
2. Se nome dell’autore e titolo coincidono con quello
ricercato
1. La ricerca è conclusa
2. Altrimenti si passi alla scheda successiva
3. Si proceda di scheda in scheda fino a trovare la
scheda cercata
4. Se vengono esaurite le schede
1. La ricerca è conclusa in modo infruttuoso (il libro cercato non è
presente nella biblioteca)
10
AOT
LAB
Algoritmi e Informatica
I calcolatori possono essere visti come esecutori di
algoritmi
Gli algoritmi vengono descritti tramite programmi,
cioè tramite una sequenza di istruzioni scritte in un
linguaggio comprensibile dal calcolatore
Compito di un esperto informatico e di produrre
algoritmi e codificarli in programmi
11
AOT
LAB
Algoritmi e Informatica
Per scrivere un programma abbiamo bisogno di
Descrivere i dati
Definire le istruzioni che operano sui dati
In modo tale che a partire dai dati iniziali otteniamo
dei dati finali rappresentanti la soluzione alla
nostra istanza di problema
12
AOT
LAB
Descrizione dei Dati
Abbiamo bisogno di variabili (contenitori di valori)
per esprimere le varie istanze di problemi
Le variabili si definiscono in termini di:
Nome: l’identificatore (a cui fare riferimento)
Tipo: l’insieme dei possibili valori che possono essere
assunti (char, stringa, intero, reale, booleana)
Valore: il valore attualmente assunto dalla variabile
È molto importante non confondere il nome col
valore
13
AOT
LAB
Tipi di Istruzioni
Ci sono tre tipologie di istruzioni:
Assegnamento ed istruzioni aritmetico-logiche
Istruzioni di I/O
Strutture di controllo
14
AOT
LAB
Assegnamento ed istruzioni
aritmetico-logiche
Le istruzioni di assegnamento permettono di depositare un
valore in una variabile
A=5
Le istruzioni aritmetiche permettono di eseguire un calcolo
aritmetico e di depositarne il risultato in una variabile
A=A+1
A=B+C
Le istruzioni logiche permettono di verificare la veracità di
una espressione logica
A == 5
A > 12
A <= B
15
AOT
LAB
I/O
Esistono due tipi di istruzioni di I/O:
Istruzioni di lettura che permettono di leggere dei dati da
un dispositivo esterno
• Leggi A
Istruzioni di lettura che permettono di leggere dei dati da
un dispositivo esterno
• Scrivi A
16
AOT
LAB
Strutture di Controllo
Ci sono tre tipi di strutture di controllo:
Sequenza
Condizione
Iterazione
Il teorema di Jacopini-Bohm afferma che è
possibile scrivere algoritmi per risolvere qualunque
problema usando solo queste strutture di controllo
(purché esista un algoritmo risolutivo)
17
AOT
LAB
Rappresentazione degli Algoritmi
Esistono due formalismi principali per
rappresentare gli algoritmi
Diagrammi di flusso
Pseudo codice
18
AOT
LAB
Diagramma di Flusso
I diagrammi di flusso sono un formalismo grafico
per descrivere gli algoritmi
I diagramma di flusso scompongono in passi
successivi gli algoritmi
Un diagramma di flusso è una descrizione più
efficace e meno ambigua di una descrizione a
parole
19
AOT
LAB
Diagramma di Flusso
Le operazioni su cui si basa un diagramma di
flusso sono:
Trasferimento di informazioni
Esecuzione di calcoli
Assunzione di decisioni
Esecuzione di iterazioni
Un diagramma di flusso è costituito da due tipi di
entità:
Nodi
Archi
20
AOT
LAB
Tipi di Nodi
Start
Var ← Expr
Var
Inizio
Elaborazione / Assegnamento
Lettura dati
Stop
Fine
Si
Var
No
Decisione
Scrittura dati
Espr1
Espr1
Espr1
Espr1
Espr1
Espr1
=
≠
>
≥
<
≤
Espr2
Espr2
Espr2
Espr2
Espr2
Espr2
21
AOT
LAB
Strutture di Controllo
I
Si/No
I
No/Si
I
No/Si
Si/No
O
If - Then - Else
No/Si
Si/No
O
While - Do
O
Repeat - Until
22
AOT
LAB
Somma di Tre Numeri
Start
Var1
Var2
Var3
Somma ← Var1 +Var2 + Var3
Somma
Stop
23
AOT
LAB
Somma di N Numeri
Start
No
N
I←0
Somma ← 0
I<N
Si
Var
Somma
Somma ← Somma + Var
I←I+1
Stop
24
AOT
LAB
Pseudo Codice
Lo pseudo codice è una sorta di linguaggio che
descrive un algoritmo attraverso istruzioni simili
alle istruzioni di un linguaggio di programmazione
Si descrivono algoritmi utilizzando pseudo codice
perché passare dalla descrizione in pseudo codice
alla effettiva descrizione in un linguaggio di
programmazione è (o dovrebbe essere) semplice
25
AOT
LAB
Tipi di Istruzione
Elaborazione/Assegnamento
A = Expr
Lettura
Leggi Var
Scrittura
Scrivi Var
26
AOT
LAB
Strutture di Controllo
Condizione semplice
Se condizione
{
...
}
Condizione a due vie
Se condizione
{
...
}
Altrimenti
{
...
}
Iterazione
Finchè condizione
{
...
}
27
AOT
LAB
Somma di Tre Numeri
Leggi Var1
Leggi Var2
Leggi Var3
Somma = Var1 + Var2 + Var3
Scrivi Somma
28
AOT
LAB
Somma di N Numeri
Leggi N
I=0
Somma = 0
Finché I < N
{
Leggi Var
Somma = Somma + Var
I=I+1
}
Scrivi Somma
29
AOT
LAB
Programmazione Top-Down
La programmazione top-down è una tecnica di
programmazione per la realizzazione di programmi
con la scomposizione iterativa di un problema in
sotto problemi
30
AOT
LAB
Programmazione Top-Down
La programmazione top-down si presta molto
bene per la definizione di algoritmi con i diagrammi
di flusso:
All’inizio il diagramma di flusso è rappresentato da un
nodo che rappresenta la soluzione al problema
Questo nodo viene scomposto in una rete di nodi in
modo iterativo
La scomposizione termina quando i singoli nodi
possono essere rappresentati da semplici sequenze di
istruzioni del linguaggio di programmazione scelto
31
AOT
LAB
Somma di N Numeri
Start
Somma gli N numeri
Stop
32
AOT
LAB
Somma di N Numeri
Start
Inizializzazione
Leggi e somma gli N numeri
Stampa la somma
Stop
33
AOT
LAB
Somma di N Numeri:
Inizializzazione
N
I←0
Somma ← 0
34
AOT
LAB
Somma di N Numeri:
Leggi e somma gli N numeri
No
I<N
Si
Var
Somma ← Somma + Var
I←I+1
35
AOT
LAB
Somma di N Numeri
Start
No
N
I←0
Somma ← 0
I<N
Si
Var
Somma
Somma ← Somma + Var
I←I+1
Stop
36
AOT
LAB
Stampa il Numero di Righe
Start
Calcola e stampa il numero di righe
Stop
37
AOT
LAB
Stampa il Numero di Righe
Start
Inizializzazione
Calcola il numero di righe
Stampa il numero di righe
Stop
38
AOT
LAB
Stampa il Numero di Righe:
Inizializzazione
Nome Documento
Righe ← 0
39
AOT
LAB
Stampa il Numero di Righe: Leggi
una Riga
No
Ci sono
Righe?
Si
Leggi una riga
Righe ← Righe + 1
40
AOT
LAB
Stampa il Numero di Righe
Start
Nome Documento
No
Ci sono
Righe?
Si
Righe ← 0
Righe
Leggi una riga
Righe ← Righe + 1
Stop
41