Algoritmi
1
Cos’è
n Risolvere un problema significa individuare
un procedimento che permetta di arrivare al
risultato partendo dai dati
n Un algoritmo è un metodo per la soluzione
di un problema adatto ad essere
implementato sotto forma di programma
2
Risolvere un problema
Ricettario
Conoscenza di come si
risolve un problema
Descrizione della
soluzione
(ricetta)
Esecutore
(cuoco)
Effettiva capacità di eseguire
la soluzione del problema
Altre Definizioni di Algoritmo
n Un algoritmo si puo` definire come un
procedimento che consente di ottenere un
risultato atteso eseguendo, in un
determinato ordine, un insieme di passi
semplici corrispondenti ad azioni scelte
solitamente da un insieme finito
4
Derivazione del Termine
n  Il termine deriva dal nome del matematico
persiano Muhammad ibn Musa Al-Khwarizmi
è Uno dei primi autori ad aver fatto riferimento
esplicitamente a questo concetto
n  Tuttavia gli algoritmi erano presenti anche
nelle antiche tradizioni matematiche
è Es., la matematica babilonese, quella cinese o del
Kerala trasmettevano le conoscenze in forma
algoritmica
5
Semplicita vs. Ambiguita
n Affermando che i passi costituenti di un
algoritmo debbano essere “semplici”, si
intende soprattutto che essi siano specificati
in modo non ambiguo,
è Immediatamente evidenti a chi sarà chiamato
ad applicare l'algoritmo, cioè il suo esecutore
6
Semplicita vs. Ambiguita
n  “Rompete le uova” può essere un passo legittimo di un
algoritmo di cucina, e potrebbe esserlo anche “Aggiungete
sale quanto basta” se possiamo assumere che l'esecutore
sia in grado di risolvere da solo l'ambiguità di questa frase
n  “Preparate un pentolino di crema pasticciera” non può
probabilmente considerarsi semplice
è Potrebbe però essere associato a un opportuno rimando a un'altra
sezione del ricettario, che fornisca un algoritmo apposito per questa
specifica operazione
n  Infine, una ricetta che preveda la cottura a microonde non
può essere preparata da chi è sprovvisto dell'apposito
elettrodomestico!
7
Esempi di Algoritmi
n Ricetta per cucinare gli spaghetti
è Metti l’acqua nella pentola
è Fai bollire l’acqua
è Metti la pasta nell’acqua
è Aggiungi un po' di sale
è Attendi alcuni minuti
è Scola la pasta
8
Esempi di Algoritmi
n Verifica se un numero è pari o dispari
è Prendi il numero
è Calcola il resto della divisione intera del
numero per 2
è Se il resto è zero
ü Allora il numero è pari
ü Altrimenti il numero è dispari
9
Esempi di Algoritmi
n Ricerca utente in un elenco telefonico
è Dati
ü Un insieme ordinato di coppie <nome, numero>
ü Un nome X da ricercare
è 1) Leggi la prima coppia <nome, numero>
è 2) Se non hai oltrepassato l'ultima coppia Allora:
ü Se nome = X allora il numero di telefono di X è quello letto;
ü Altrimenti leggi la prossima coppia e vai al passo 2)
è Altrimenti
ü Il nome X cercato non è nell'elenco
10
Sviluppo di un programma
PROBLEMA
SISTEMA INFORMATICO:
ANALISI
STRUMENTI DI SUPPORTO EVOLUTI (CASE)
SOLUZIONE
INFORMALE
FORMALIZZAZIONE
SOLUZIONE
FORMALE
SISTEMA INFORMATICO:
ALGORITMO
AMBIENTE DI SVILUPPO TRADIZIONALE
PROGRAMMAZIONE
PROGRAMMA
(alto livello)
ESECUTORE DEL
LINGUAGGIO DI ALTO LIVELLO
TRADUZIONE
ESECUTORE DEL LINGUAGGIO
MACCHINA (HW)
© Introduzione ai sistemi informatici 4/ed
Donatella Sciuto, Giacomo Buonanno, Luca Mari
PROGRAMMA
(macchina)
ESECUZIONE
Esempi di Algoritmi
n Ricerca di un utente X in un elenco telefonico
n (alternativa)
è 1) Leggi la prima coppia <nome, numero>
è 2) Se non hai oltrepassato l'ultima coppia E nome
precede X (secondo l'ordine alfabetico) Allora osserva
la prossima coppia e ripeti il passo 2)
è 3) Se hai oltrepassato l'ultima coppia OPPURE nome
segue X Allora X non è presente nell'elenco
è 4) Altrimenti il numero telefonico di X è l'ultimo letto
12
Proprietà degli Algoritmi
n L'algoritmo è caratterizzato da
è Finitezza: Composto da un numero finito di passi
elementari. Le operazioni sono eseguite un numero
finito di volte
è Non ambiguità: I risultati non variano in funzione della
macchina/persona che esegue l'algoritmo
(deterministico)
è Realizzabilità: Deve essere eseguibile con le risorse a
disposizione
13
Proprietà degli Algoritmi
n … ma gli esempi precedenti possiedono
queste proprietà?
n Problemi presenti
è Ambiguità
è Ipotesi implicite sulle capacità dell’esecutore
è Uso del linguaggio naturale
14
Definire un Algoritmo
n Per definire un algoritmo è necessario
è Condurre un'attenta analisi del problema
è Individuare i possibili ingressi
è Precisare le uscite
è Definire completamente e dettagliatamente la
sequenza dei passi che portano alla soluzione
ü E’ conveniente suddividere il problema in piccoli
sottoproblemi
15
Rappresentare un Algoritmo
n E’ necessario far riferimento a dei formalismi che
è Non introducano ambiguità
è Siano universalmente riconosciuti ed interpretati allo
stesso modo da un generico esecutore
è Permettano di rappresentare in modo efficace un
algoritmo
è Costituiscano un utile strumento per poi poter passare
alla fase di codifica in un linguaggio di programmazione
16
Rappresentare un Algoritmo
n Rappresentazione grafica
è Diagramma di flusso (noto anche
come diagramma a blocchi o flowchart)
n Rappresentazione testuale
è Notazione Lineare Strutturata (o
pseudocode)
17
Operazioni di Base
n Le operazioni primarie sono
è Trasferimento di informazioni (istruzioni di I/O)
ü Lettura dati, scrittura risultati, visualizzazione dati
intermedi
è Esecuzione di calcoli (valutazione espressioni)
è Istruzioni di assegnamento
è Strutture di controllo (che modificano il flusso
sequenziale di esecuzione delle operazioni)
18
Flow chart: simboli fondamentali
ingresso/uscita
Elaborazione
inizio/fine
Selezione
19
Istruzioni di I/O
n Lettura di dati in ingresso (input)
n  Scrittura dei risultati in uscita (output)
Diagramma a blocchi
Pseudocodice
leggi A
leggi A
scrivi B
scrivi B
20
Istruzione di Assegnamento
n Concetto di variabile
è Identificata da un’etichetta/identificatore simbolico
è Può essere comodo pensare alla variabile come ad un
contenitore in cui possiamo memorizzare o reperire dei
dati utilizzati durante il calcolo
è L’istruzione di assegnamento permette di assegnare un
valore ad una variabile
A=5
Alla variabile A
viene assegnato il
valore 5
21
Istruzione di Assegnamento
n  Inizializzazione
è All’inizio di un algoritmo una variabile non ha alcun valore
è Non ha quindi senso utilizzarla in una espressione (è un errore!)
è Essa deve essere inizializzata
ü O esplicitamente mediante un assegnamento
ü Oppure mediante una operazione di lettura
START
A=B+3
START
START
B=0
leggi B
A=B+3
A=B+3
CORRETTO
CORRETTO
ERRORE
B non è inizializzata
22
Istruzione di Assegnamento
n  E’ stato usato il simbolo = per indicare l’istruzione di assegnamento
n  Alcuni testi/autori indicano invece il simbolo ← (per evitare confusione
con l’operatore di uguaglianza)
n  Dato il seguente frammento di codice
…
A=5
A=A+1
Cosa fa quell’istruzione?
n  L’esecutore esegue i seguenti passi
è Prima valuta l’espressione a destra, cioè calcola il valore di A+1 che vale 6
è Dopo assegna tale valore alla variabile a sinistra, cioè ad A
è Alla fine dell’esecuzione di quella istruzione quindi, A vale 6
23
Valutazione delle Espressioni
n L’esecutore è in grado di valutare
espressioni aritmetiche
Diagramma a blocchi
Pseudo-codice
B = 5*(82-35)/7
B = 5*(82-35)/7
A = (B+34)/B*2
A = (B+34)/B*2
24
Struttura di Selezione
n Verifica di una condizione
leggi N
VERO
Stampa “N e' negativo!”
E' N < 0 ?
FALSO
Stampa “N e' non negativo!”
25
Rappresentazione degli Algoritmi
n I diagrammi di flusso possono presentarsi
è Ad un livello generale
è Ad un livello particolare
n A seconda del livello di dettaglio con cui
specificano le operazioni da compiere
n E’ opportuno procedere per fasi successive
è Un diagramma globale (di massima) per focalizzare le
operazioni essenziali da compiere
è Un diagramma di flusso più particolareggiato, che tenga
conto di operazioni più semplici e più elementari
26
Tecniche di Programmazione
n 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
n Programmazione bottom-up
27
Esempio: Somma di due numeri
28