ISTITUTO TECNICO INDUSTRIALE STATALE
Albert Einstein
Vimercate (MI)
INFORMATICA E SISTEMI AUTOMATICI
ALGORITMI E DIAGRAMMI DI FLUSSO
Classi Terze
Indirizzo Liceo Scientifico Tecnologico
1
ALGORITMO: DEFINIZIONE
Dall’arabo al-Kuwārizmi a sua volta dal greco aritmhós,
un algoritmo è un metodo generale che risolve con una sequenza finita di
passi un problema dato
ALGORITMO: CONCETTO
• Algoritmo per un problema P:
descrizione, in termini di azioni elementari, di un procedimento che risolve P
• Approccio procedurale alla soluzione di problemi (esistono altri approcci: logici,
simbolici, funzionali, ...)
NON TUTTI I PROBLEMI SONO COMPUTAZIONALI
cioè non per tutti i problemi è possibile definire una procedura computazionale (un algoritmo)
che consenta, a partire dai dati di ingresso, di ottenere i risultati. Pertanto:
LA SCIENZA DEGLI ALGORITMI DEVE LIMITARSI A CONSIDERARE
PROBLEMI COMPUTAZIONALI
FORMULAZIONE DI UN PROBLEMA
Definizione dei dati e dei risultati che si vogliono ottenere (a partire dai dati).
Processo di formulazione di un problema:
• individuazione dei dati in ingresso (Es.: Problema P = scrivere i primi 10 numeri primi)
• individuazione dei risultati desiderati
PROBLEMI E ISTANZE DI UN PROBLEMA
• Specificando quali sono i dati di ingresso si definisce una istanza di problema
Ad esempio:
problema P: dato un naturale n calcolare la somma dei primi n Naturali
istanza di P: risolvere P per n = 12 (ovvero calcolare la somma dei primi 12 naturali)
• Un problema può essere visto come l’insieme di tutte le sue possibili istanze
TIPOLOGIE DI PROBLEMI
Esempio: il problema del commesso viaggiatore
“Un commesso viaggiatore deve percorrere il miglior tragitto attraverso le n città nelle quali deve
effettuare le consegne…”
Nota la mappa con l’indicazione delle n città da raggiungere, è possibile definire problemi di
diversa tipologia:
• Problemi di DECISIONE Æ Risultato: SI/NO
(es.: esiste un possibile percorso con una certa lunghezza?)
• Problemi di RICERCA Æ Risultato: una possibile soluzione
(es.: trovare un percorso di lunghezza minore di k)
• Problemi di ENUMERAZIONE Æ Risultato: conteggio delle soluzioni
(es.: quanti sono i percorsi di lunghezza minore di k)
• Problemi di OTTIMIZZAZIONE Æ Risultato: una soluzione ottima rispetto ad un obiettivo
(es.: trovare un percorso di lunghezza minima)
ELEMENTI DI UN ALGORITMO
• Passi elementari: azioni atomiche non scomponibili in azioni semplici
2
•
Processo: sequenza ordinata di passi
PROPRIETÀ DI UN ALGORITMO
Un algoritmo deve avere le seguenti proprietà:
• Finitezza: numero finito di passi elementari e di dati manipolati
• Determinismo: risultati non dipendenti dalla esecuzione
• Realizzabilità: compatibile con le risorse a disposizione
• Efficienza: minimo numero di operazioni da compiere
INDIVIDUAZIONE DI UN ALGORITMO
• attenta analisi del problema da risolvere
• definizione dei possibili ingressi e uscite
• definizione delle strutture dati
• suddivisione in sottoproblemi
• definizione della sequenza di passi risolutiva
ALGORITMI: CARATTERISTICHE
1. Le ISTRUZIONI (l’insieme ordinato di operazioni da eseguire) sono in numero finito;
2. Ogni istruzione è univoca cioè non lascia dubbi o ambiguità sul da farsi;
3. Esiste un esecutore (ad esempio, l’utilizzatore del PC) in grado di eseguire le istruzioni
4. Le procedure risolvono una CLASSE di problemi
5. Non esiste un modo UNICO per risolvere un problema
Un algoritmo è CORRETTO se per ogni istanza di input termina con l’output corretto
RAPPRESENTAZIONE DI UN ALGORITMO: FLOW-CHART
Per rappresentare un algoritmo occorre individuare:
• i passi necessari per raggiungere la soluzione
• la loro corretta sequenza logica
Lo strumento più utilizzato per la rappresentazione di un algoritmo è il diagramma di flusso o
flow-chart. Esso è un formalismo grafico che rappresenta una descrizione più efficace e
meno ambigua di una descrizione a parole.
Gli elementi fondamentali di un flow-chart rappresentano una schematizzazione grafica della
sequenza logica (flusso di esecuzione) dei passi di un algoritmo:
• trasferimento di informazioni (dati e risultati)
• esecuzione di calcoli
• assunzione di decisioni
• esecuzioni di iterazioni
Gli elementi base di un flow-chart sono due:
• nodi (simboli grafici di forma diversa)
• archi
che assumono significato e forme diverse a seconda della funzione rappresentata:
3
SIMBOLO
DESCRIZIONE
Identifica l’inizio (START) e la fine (STOP) della sequenza
logica di passi di un algoritmo.
Viene utilizzato per indicare una elaborazione (ad
esempio, formula matematica) o assegnamento di un
valore ad una variabile (ad esempio, x=2).
Identifica le operazioni di INPUT dei dati.
Identifica le operazioni di OUTPUT dei risultati
Si inserisce nella sequenza logica dei passi di un
algoritmo ogni qualvolta vi è la necessita di prendere una
decisione di tipo booleano (vero/falso, si/no, 0/1, …).
Questo simbolo non identifica un passo dell’algoritmo ma
viene di solito utilizzato per chiudere le strutture
informatiche fondamentali.
Le frecce danno informazione sul verso del flusso
esecutivo di processo.
ESEMPIO DI ALGORITMO RAPPRESENTATO MEDIANTE FLOW-CHART
Inizia la
sequenza logica
dei passi
Legge il valore
assunto dalla
variabile
denominata Var1
Indica che la
sequenza di passi
continua alla
sezione 1
START
1
Var1
Somma Å Var1+Var2+Var3
Calcola il valore
della somma dei
valori assunti
dalle tre variabili
Var2
Somma
Stampa il valore
della variabile
Somma
Var3
STOP
1
Il simbolo Å presente nel blocco “Somma ...” indica
l’assegnazione del valore assunto dall’espressione a
secondo membro alla variabile dichiarata a primo
membro. Rappresenta, in informatica, un simbolo più
adatto per indicare l’uguaglianza.
4
IL LINGUAGGIO DEI DIAGRAMMI DI FLUSSO
• sono linguaggi grafici e perciò adatti alla descrizione di processi sequenziali; un processo
è sequenziale quando la esecuzione di una qualsiasi azione non può mai sovrapporsi
alla esecuzione di un’altra azione.
• la descrizione della soluzione ad un problema è inequivocabile, infatti i legami tra le
azioni e i controlli è rappresentato tramite segni grafici a cui sono associati specifici
significati;
• è un linguaggio adatto, essendo grafico, per comunicare un ALGORITMO ad un
esecutore umano e non da una macchina.
Il diagramma di flusso è un grafo contenente:
• un blocco iniziale
• un blocco finale
• un numero finito di blocchi di azione
• un numero finito di blocchi di controllo
per il quale valgono le seguenti condizioni:
1. Ciascun blocco di AZIONE ha una freccia entrante ed una uscente (fig. 1);
2. Ciascun blocco di CONTROLLO ha una freccia entrante e due uscenti (fig. 2);
3. Ciascuna FRECCIA entra in un blocco oppure in un nodo di chiusura (fig. 3);
4. Ciascun blocco è raggiungibile dal blocco INIZIALE;
5. Il blocco FINALE è raggiungibile dal blocco iniziale
Fig.1
Fig.2
Fig.3
LE STRUTTURE INFORMATICHE FONDAMENTALI
Fra i possibili modi di connettere blocchi elementari e frecce che rispettino la definizione di grafo
di flusso, ci sono i cosiddetti schemi di composizione o strutture informatiche fondamentali,
chiamati Sequenza, Selezione e Iterazione.
• Schema di SEQUENZA
Descrive la composizione sequenziale di due o più azioni elementari di un processo.
START
A1
A2
STOP
5
•
Schema di SELEZIONE
In dipendenza dall’esito di un controllo o test il comportamento è differente: si dovrà
eseguire l’azione A1 se C è vero, mentre l’azione da eseguire sarà A2 se C è falso.
Questo tipo di struttura può essere ulteriormente semplificata, eliminando A1 oppure A2
dallo schema.
V
A1
•
C
F
A2
Schema di ITERAZIONE
Esistono due modelli di iterazione (o cicli) ed entrambi servono per descrivere che
l’azione deve essere ripetuta quando l’esito del controllo lo richiede. Ogni schema
fondamentale ha un unico punto di ingresso ed un unico punto di uscita. Si parla di
iterazione con controllo in testa quando la condizione di iterazione è eseguita prima
delle eventuali azioni, mentre si dice che una iterazione è con controllo in coda se la
condizione di iterazione è eseguita successivamente alla prima esecuzione delle azioni.
A
V
C
F
ITERAZIONE CON
CONTROLLO IN TESTA
A
V
C
F
ITERAZIONE CON
CONTROLLO IN CODA
6
La differenza sostanziale fra i due modelli di iterazioni è che se il controllo C, in testa,
risulta inizialmente falso l’azione A non verrà mai eseguita, a differenza dell’iterazione
con controllo C in coda dove l’azione A viene eseguita almeno una volta.
Di solito le strutture iterative prevedono l’utilizzo di un contatore di ciclo che può
rappresentare anche la variabile di controllo C; in tal caso il contatore va sempre
inizializzato al di fuori del ciclo (prima di inserire la strutture iterativa) e incrementato o
decrementato al suo interno:
Inizializzazione
CONT Å 0
Incremento
CONT Å CONT +1
A
CONT <= 10
V
C
F
FLOW-CHART STRUTTURATI
Sono strutturati quei grafi di flusso che possono essere ricondotti ai tre schemi di composizione
fondamentali.
• Un flow-chart composto da una azione racchiusa tra inizio e fine è un flow-chart
strutturato (fig. 1).
• Se si hanno due flow-chart strutturati S1 ed S2 , la loro composizione secondo lo
schema di sequenza produce un flow-chart strutturato (fig. 2a, 2b, 2c).
• Se si hanno due flow-chart strutturati S1 e S2 ed un blocco di controllo C, sono strutturati
i flow-chart che si ottengono componendo essi secondo lo schema di selezione (fig. 3a,
3b, 3c).
• Se si hanno uno schema strutturato S e un blocco di controllo C (fig. 4a, 4b), allora sono
strutturati anche i flow-chart che si ottengono componendoli secondo gli schemi di
iterazione. (fig. 4c, 4d).
• Nessun altro tipo di flow-chart è strutturato.
7
START
START
START
START
A
S1
S2
S1
STOP
STOP
STOP
S2
Fig. 1
Fig. 2a
Fig. 2b
STOP
Fig. 2c
V
S1
Fig. 3a
C
F
V
S2
C
F
V
S1
Fig. 3b
C
F
S2
Fig. 3c
8
S
S
V
C
S
S
F
C
F
C
F
V
Fig. 4a
Fig. 4b
V
C
V
F
Fig. 4c
Fig. 4c
ESEMPIO
START
V
C
F
A1
C1
A2
F
V
V
F
S1
Iterazione con
controllo in coda
S
Selezione
C2
STOP
S2
Iterazione con
controllo in testa
9
TEOREMA DI JACOPINI-BÖHM
Dato un processo ‘P’ ed un grafo che lo descrive, è sempre possibile determinare un
processo ‘Q’ che sia descrivibile tramite un diagramma di flusso strutturato.
Due processi, che agiscono sullo stesso insieme di oggetti, si dicono EQUIVALENTI se
producono lo stesso effetto.
Due programmi equivalenti sottoposti agli stessi dati di ingresso o non terminano oppure
terminano entrambi producendo gli stessi dati di uscita.
RIFLESSIONI SUI DIAGRAMMI DI FLUSSO
• I diagrammi di flusso sono adatti alla comunicazione inter-umana, in quanto risultano per
noi di facile comprensione;
• Uno stesso diagramma di flusso è convertibile in più programmi codificati con diversi
linguaggi di programmazione.
• I diagrammi di flusso sono ingombranti, quasi mai entrano su un singolo foglio: ciò rende
difficile sia seguire il flusso di controllo che eseguire modifiche al diagramma.
• La notazione dei diagrammi di flusso non è naturalmente strutturata.
• Le modifiche tendono a de-strutturare il grafo.
AZIONI COME ISTRUZIONI
Ci sono tre tipologie di istruzioni:
• Assegnamento ed istruzioni aritmetico-logiche
Ö A = 5 (assegnamento di valori a variabili)
Ö A = A + 1 (assegnamento con istruzione aritmetica)
• Condizioni booleane
Ö A=5
(true se il valore di A è uguale a 5, false altrimenti)
Ö A>5
(true se il valore di A è maggiore di 5, false altrimenti)
Ö A<5
(true se il valore di A è minore di 5, false altrimenti)
Ö A >= 5 (true se il valore di A è maggiore o uguale a 5, false altrimenti)
Ö A <= 5 (true se il valore di A è minore o uguale a 5, false altrimenti)
Ö A <> 5 (true se il valore di A è diverso da 5, false altrimenti)
• Istruzioni di I/O
Ö Permettono di leggere valori di input ed assegnarli a variabili di processo
leggi A (vuol dire che ad A viene assegnato il valore letto)
Ö Permettono di scrivere i valori memorizzati dalle variabili di processo
scrivi A (vuol dire che viene stampato il valore di A)
STRUTTURA INFORMATICA “CASE”
Oltre ai tre schemi di composizione fondamentali, sequenza, selezione e iterazione, è
importante considerare anche la struttura cosiddetta case che rappresenta un insieme di
selezioni annidate. Infatti, nelle situazioni in cui è indispensabile realizzare più selezioni fra loro
annidate si può sostituire l’insieme di schemi semplici con un’unica struttura che, in modo più
lineare, comprende tutti i possibili “casi” che possono verificarsi. Ovviamente, la condizione di
10
selezione non è in questo caso di tipo booleano (due possibili valori assunti) ma diventa
l’assegnazione di un valore, ad una variabile S, detta variabile di switch.
1
A1
S
2
3
A2
N
A3
AN
In tal caso, a seconda del valore assunto dalla variabile S (1,2, … ,N) la struttura esegue uno
“switch” ad uno dei “case” previsti (Case 1,Case 2, … ,Case N), eseguendo le azioni ad esso
relative (A1,A2, … ,AN). La struttura si presenta quindi come strumento indispensabile per la
costruzione di algoritmi viste le potenzialità e la semplicità di utilizzo.
11