algoritmi
proprietà e caratteristiche
descrizione degli algoritmi

codice e pseudo-codice


rapportata all’esecutore




usiamo pseudo-codice, useremo codice (Java)
persona o macchina?
se persona, adulto o bambino?
se macchina, cosa è capace di fare?
leggibilità della descrizione

fondamentale per operazioni di correzione,
manutenzione, adattamento e riuso
ottobre 2002
(c) Fabrizio d'Amore, IGEA 02-03
2
pseudo-codice



input, output
start, stop
assegnazione
<variabile> = <risultato di una
espressione>

test
if(<condizione>)
<istruzioni se condizione vera>
else
<istruzioni se condizione falsa>
ottobre 2002
(c) Fabrizio d'Amore, IGEA 02-03
3
pseudo-codice/2

ripetizione o ciclo
while(<condizione>)
<istruzioni da ripetere finché condizione è vera>

esempio: somma primi n interi positivi
start
input(n)
somma = 0
i = 0
while(i < n)
somma = somma + i
i = i + 1
output(somma)
stop
ottobre 2002
(c) Fabrizio d'Amore, IGEA 02-03
4
loop infiniti


una classica causa del malfunzionamento del
software
es.: somma dei primi n dispari
i = 1
j = 0
somma = 0
while(j < i)
somma =
i = i +
j = j +
ottobre 2002
// errato!
somma + i
2
1
(c) Fabrizio d'Amore, IGEA 02-03
5
esecutori

gli algoritmi vanno formulati tenendo conto delle
capacità dei loro esecutori


un computer sa di norma eseguire le quattro
operazioni, confronti fra numeri e alcune semplici
operazioni logiche
si possono concepire esecutori molto limitati


es.: capacità di incrementare/decrementare numeri
(una unità alla volta) e di confrontare un numero con
zero
è meno “potente”?
ottobre 2002
(c) Fabrizio d'Amore, IGEA 02-03
6
somma a + b
1.
2.
3.
c = a
temp = b
while(temp > 0)
incrementa c
decrementa temp
ottobre 2002
(c) Fabrizio d'Amore, IGEA 02-03
7
leggibilità degli algoritmi

qualità della descrizione degli algoritmi


non influenza correttezza ed efficienza!
fondamentale per operazioni di correzione,
manutenzione, adattamento e riuso




oltre il 50% del tempo di sviluppo del software è dedicato alla
correzione degli errori
la manutenzione del software viene spesso eseguita da terzi
spesso il software deve essere modificato per tener conto di
modifiche delle specifiche
il buon riuso del software è alla base di una buona produttività
ed abbattimento costi
ottobre 2002
(c) Fabrizio d'Amore, IGEA 02-03
8
tecniche per la leggibilità

indentazione



commenti


non tutte le righe del codice (o pseudo-codice) hanno
inizio alla stessa colonna
si tiene conto della “struttura” dell’algoritmo
per motivare scelte non ovvie e in generale per
documentare il software
uso di nomi evocativi


usare variabili con nomi significativi
somma è un nome migliore di xyz
ottobre 2002
(c) Fabrizio d'Amore, IGEA 02-03
9
es: max fra N numeri
input(N)
//
input(x)
//
letti = 1
//
max = x
//
while(letti < N)
input(x)
//
if(x > max)
max = x
//
letti = letti +
output(max)
//
stop
//
ottobre 2002
lettura N
lettura primo valore
conta quanti valori letti
max provvisorio!
legge prossimo
se grande aggiorna max
1
// aggiorna contatore
output risultato
termine
(c) Fabrizio d'Amore, IGEA 02-03
10
esempio

giochiamo ad “alto-basso”


quale algoritmo scegliere?
c’è differenza concettuale con la ricerca
tabellare?

es., ricerca su un elenco telefonico:
supponendo 1ms per ogni controllo, come fa
info412 a controllare oltre 10 milioni di
numeri? (1000 secondi!)
ottobre 2002
(c) Fabrizio d'Amore, IGEA 02-03
11