Algoritmi
Maurizio Palesi
Maurizio Palesi
1
Cos’è
„Risolvere un problema significa individuare
un procedimento che permetta di arrivare al
risultato partendo dai dati
„Un algoritmo è un metodo per la soluzione
di un problema adatto ad essere
implementato sotto forma di programma
Maurizio Palesi
2
1
Altre Definizioni di Algoritmo
„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
Maurizio Palesi
3
Derivazione del Termine
„ 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
„ 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
Maurizio Palesi
4
2
Semplicita vs. Ambiguita
„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
Maurizio Palesi
5
Semplicita vs. Ambiguita
„ “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
„ “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
„ Infine, una ricetta che preveda la cottura a microonde non
può essere preparata da chi è sprovvisto dell'apposito
elettrodomestico!
Maurizio Palesi
6
3
Esempi di Algoritmi
„Ricetta per cucinare gli spaghetti
ÎMetti l’acqua nella pentola
ÎFai bollire l’acqua
ÎMetti la pasta nell’acqua
ÎAggiungi un pò di sale
ÎAttendi 6 minuti
ÎScola la pasta
Maurizio Palesi
7
Esempi di Algoritmi
„Verifica se un numero è pari o dispari
ÎPrendi il numero
ÎCalcola il resto della divisione intera del
numero per 2
ÎSe il resto è zero
9Allora il numero è pari
9Altrimenti il numero è dispari
Maurizio Palesi
8
4
Esempi di Algoritmi
„ Ricerca utente in un elenco telefonico
ÎDati
9 Un insieme ordinato di coppie <nome, numero>
9 Un nome X da ricercare
Î1) Leggi la prima coppia <nome, numero>
Î2) Se non hai oltrepassato l'ultima coppia Allora:
9 Se nome = X allora il numero di telefono di X è quello letto;
9 Altrimenti leggi la prossima coppia e vai al passo 2)
ÎAltrimenti
9 Il nome X cercato non è nell'elenco
Maurizio Palesi
9
Esempi di Algoritmi
„ Ricerca di un utente X in un elenco telefonico
„ (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
Maurizio Palesi
10
5
Proprietà degli Algoritmi
„ 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
Maurizio Palesi
11
Proprietà degli Algoritmi
„… ma gli esempi precedenti possiedono
queste proprietà?
„Problemi presenti
ÎAmbiguità
ÎIpotesi implicite sulle capacità dell’esecutore
ÎUso del linguaggio naturale
Maurizio Palesi
12
6
Definire un Algoritmo
„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
9E’ conveniente suddividere il problema in piccoli
sottoproblemi
Maurizio Palesi
13
Rappresentare un Algoritmo
„ 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
Maurizio Palesi
14
7
Rappresentare un Algoritmo
„ Rappresentazione grafica
ÎDiagramma di flusso (noto anche come
diagramma a blocchi o flow-chart)
„ Rappresentazione testuale
ÎNotazione Lineare Strutturata (o
pseudocode)
Maurizio Palesi
15
Operazioni di Base
„Le operazioni primarie sono
ÎTrasferimento di informazioni (istruzioni di I/O)
9Lettura 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)
Maurizio Palesi
16
8
Simboli Convenzionali
ingresso/uscita
inizializzazione
documento
Elaborazione
inizio/fine
input manuale
elab. predefinita
connessioni
disco
decisione
mem. sequenziale
Maurizio Palesi
17
Istruzioni di I/O
„Lettura di dati in ingresso (input)
„ Scrittura dei risultati in uscita (output)
Diagramma a blocchi
Maurizio Palesi
Pseudocodice
leggi A
leggi A
scrivi B
scrivi B
18
9
Istruzione di Assegnamento
„ 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
Alla variabile A
viene assegnato il
valore 5
A=5
Maurizio Palesi
19
Istruzione di Assegnamento
„ 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
9 O esplicitamente mediante un assegnamento
9 Oppure mediante una operazione di lettura
START
START
B=0
leggi B
A=B+3
A=B+3
CORRETTO
CORRETTO
START
A=B+3
ERRORE
B non è inizializzata
Maurizio Palesi
20
10
Istruzione di Assegnamento
„ E’ stato usato il simbolo = per indicare l’istruzione di assegnamento
„ Alcuni testi/autori indicano invece il simbolo ← (per evitare confusione
con l’operatore di uguaglianza)
„ Dato il seguente frammento di codice
…
A=5
A=A+1
Cosa fa quell’istruzione?
„ 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
Maurizio Palesi
21
Valutazione delle Espressioni
„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
Maurizio Palesi
22
11
Rappresentazione degli Algoritmi
„ I diagrammi di flusso possono presentarsi
ÎAd un livello generale
ÎAd un livello particolare
„ A seconda del livello di dettaglio con cui
specificano le operazioni da compiere
„ 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
Maurizio Palesi
23
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
„Programmazione bottom-up
Maurizio Palesi
24
12