Realizzazione software
• Due fasi:
1. Specifica dell'algoritmo
1.a Definizione dei dati
1.b Definizione della modalità della loro
elaborazione
2. Realizzazione algoritmo con un particolare
linguaggio (traduzione)
Fondamenti di Informatica
1
Algoritmi
• Risolvere un problema significa individuare un
procedimento che permetta di arrivare al
risultato partendo dai dati
• Il procedimento (chiamato algoritmo) è
composto da passi elementari
• Il modo di esprimere la sequenza dei passi
elementari deve essere standardizzato
Fondamenti di Informatica
2
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
Fondamenti di Informatica
3
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
è conveniente suddividere il problema in piccoli sottoproblemi
Fondamenti di Informatica
4
Rappresentazione
degli algoritmi
• Si fa riferimento ai diagrammi di flusso
(flow chart)
• Sono rappresentazioni grafiche dei passi
elementari; visione globale del problema
• Strumento efficace per descrivere un algoritmo
(più della descrizione a parole, troppo generica
o appesantita da troppi dettagli)
• Le operazioni base sono 4
Fondamenti di Informatica
5
Operazioni base
• Le operazioni primarie sono:
– Trasferimento di informazioni
lettura dati, scrittura risultati, visualizzazione dati intermedi
– Esecuzione di calcoli
– Assunzione di decisioni
– Esecuzione di iterazioni
ripetizione di sequenze di operazioni
• Sono rappresentate da forme geometriche diverse
Fondamenti di Informatica
6
Simboli convenzionali
ingresso/uscita
inizializzazione
documento
elaborazione
inizio/fine
input manuale
elab. predefinita
connessioni
disco
decisione
Fondamenti di Informatica
mem. sequenziale 7
Esempi
• Diagramma di flusso per:
– somma di N dati
– media di N dati
– calcolo del fattoriale
– calcolo della radice quadrata approssimata
– calcolo dei primi N numeri primi
– inserimento/ricerca di un elemento in un
albero binario
Fondamenti di Informatica
8
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 strutturata
Fondamenti di Informatica
9
Programmazione strutturata
• Teoria nata nel 1965
• Basata su eliminazione dei salti
incondizionati e -più generalmentesulla definizione di restrizioni
• Rendono la scrittura dei programmi e la
loro manutenzione più semplici
• Migliorano la leggibilità dei programmi
Fondamenti di Informatica
10
Teorema di Jacopini-Bohm
• Per costruire un programma sono
necessari 3 soli blocchi:
1. blocco di elaborazione
è assimilabile ad una sola istruzione o un solo
blocco con un ingresso e una uscita
2. meccanismo di ripetizione (o loop)
3. meccanismo di decisione binaria
Fondamenti di Informatica
11
Strutture per il controllo di flusso
• While-Do
I
I
O
Fondamenti di Informatica
O
12
Strutture per il controllo di flusso
• Repeat-Until
I
I
O
O
Fondamenti di Informatica
13
Strutture per il controllo di flusso
• If-Then-Else
I
I
O
O
Fondamenti di Informatica
14
Teorema di Jacopini-Bohm
• All'interno di ogni blocco si nasconde un
ciclo o una biforcazione
• Il programma risulta quindi composto
da una sequenza di blocchi, senza
controlli di flusso
• Simile alla programmazione top-down
dove, però, i blocchi non devono essere
indipendenti e omogenei
Fondamenti di Informatica
15
Scelta dell'algoritmo
• Non esistono strutture (dati e di controllo)
preferite: la loro scelta dipende dal tipo di
linguaggio in cui si codifica l'algoritmo
• La scelta dell'algoritmo ottimo dipende dal
linguaggio a disposizione: occorre
conoscere bene il linguaggio e le primitive
che esso offre
Fondamenti di Informatica
16