Diagrammi di Flusso
Costantino Grana [email protected]
Diagramma di Flusso
โข Il diagramma di flusso (flow chart) รจ una rappresentazione grafica delle operazioni da eseguire per l'esecuzione di un algoritmo;
โข Esso consente di descrivere, tramite un linguaggio di modellazione grafico:
โข le operazioni da compiere, rappresentate mediante sagome convenzionali;
โข la sequenza nella quale devono essere compiute, rappresentata con frecce di collegamento;
Diagramma di Flusso
โข Il diagramma di flusso รจ caratterizzato da una lettura sequenziale:
1. si parte dal blocco iniziale;
2. si segue la freccia in uscita;
3. si giunge al blocco successivo e si effettua l'operazione descritta nel blocco;
4. si procede iterando i passi 2 e 3 fino a giungere al blocco finale.
โข Tra le operazioni si distinguono:
โข Azione: una attivitร o un'elaborazione da svolgere
โข Test: indica due direzioni in base a un fattore di decisione (vero o falso)
โข Ingresso/Uscita: comporta l'immissione di informazioni dall'esterno oppure
Diagramma di Flusso
Blocco Iniziale
inizio (o nome dellโalgoritmo)
Blocco Finale
fine condizione
V
F
Blocco Decisionale o di Test o di Selezione
leggi qualcosa scrivi qualcosa
Blocco di Input/Output Blocco di Elaborazione
operazione da eseguire
Diagramma di Flusso
โข Una combinazione di blocchi elementari descrive un algoritmo se:
โข viene usato un numero finito di blocchi;
โข lo schema inizia con un blocco iniziale e termina con un blocco finale;
โข ogni blocco soddisfa le condizioni di validitร ;
โข Condizioni di validitร :
โข Il blocco assegnamento (lettura e scrittura) e il blocco elaborazione hanno una sola freccia entrante e una sola freccia uscente;
โข Il blocco di controllo ha una freccia entrante e due frecce uscenti etichettate con V (Vero) e F (Falso);
โข Ogni freccia deve entrare in un blocco;
โข Dal blocco iniziale deve essere possibile raggiungere ogni blocco;
โข Da ogni blocco dev'essere possibile raggiungere il blocco finale;
Diagramma di Flusso
โข A volte vi รจ la necessitร di modellare algoritmi che
presuppongono di conoscere determinati parametri (input) o che forniscono un risultato (output).
โข Lโalgoritmo triplica-numero, ad esempio, deve ricevere in ingresso il numero di cui calcolare il triplo.
โข Per poter far riferimento a questo numero arbitrario, come in matematica, abbiamo la necessitร di dargli un nome.
โข Per questo motivo, nellโambito del corso estendiamo i blocchi di inizio e di fine aggiungendo la possibilitร di specificare
parametri di input e output.
Blocchi Inizio e Fine
โข La rappresentazione che utilizzeremo รจ la seguente:
Blocco Iniziale Blocco Finale
triplica-numero
x fine ris
Blocchi Inizio e Fine
โข Se ci sono piรน parametri li separiamo con virgole:
Blocco Iniziale Blocco Finale
fai-cose-con-tre-numeri
x, y, z fine ris1, ris2
Blocco Condizione/Selezione/Test
โข A seconda delle capacitร del sistema, รจ possibile utilizzare condizioni piรน o meno complesse.
โข Un sistema potrebbe essere in grado di fare verifiche solo del tipo a > b, a < b o a = b, oppure potrebbe consentire anche verifiche piรน complesse come 4 < a < 10.
x = 0 V
F
Blocco di Elaborazione
โข Un discorso analogo puรฒ essere fatto per le operazioni che รจ possibile eseguire nei blocchi di elaborazione.
โข La quasi totalitร dei blocchi di elaborazione prevede di assegnare il risultato di unโoperazione (o un dato) a una variabile.
โข Con variabile intendiamo una ยซscatolaยป che รจ in grado di
contenere numeri o altri dati e a cui รจ possibile fare riferimento, ad esempio dandole un nome come abbiamo fatto con i
parametri di input e output.
โข Assegnare significa inserire dentro una ยซscatolaยป un dato,
ottenibile anche come risultato di un calcolo. Il simbolo utilizzato per lโassegnamento รจ โ
Blocco di Elaborazione
โข Il concetto di assegnamento in informatica รจ profondamente diverso da quello di uguaglianza matematica!
โข In matematica, quando due cose sono uguali significa che sono la stessa cosa. Quindi quando scriviamo ๐ฅ๐ฅ = 5 in matematica stiamo dicendo che ๐๐ รจ ๐๐ e in questo contesto ๐ฅ๐ฅ รจ e sarร sempre 5.
โข Non vi รจ quindi alcun concetto temporale: non ha senso chiedersi quanto valeva ๐ฅ๐ฅ prima.
โข In informatica allโassegnamento corrisponde unโoperazione che viene eseguita in uno specifico momento.
โข Quindi, quando scriviamo ๐ฅ๐ฅ โ 5 stiamo dicendo che prima nella
ยซscatolaยป ๐ฅ๐ฅ cโera qualcosa, ma dopo lโassegnamento cโรจ il valore 5.
โข In seguito, il valore contenuto in ๐ฅ๐ฅ potrebbe cambiare ulteriormente.
Il concetto di tempo assume quindi un ruolo fondamentale.
Blocco di Elaborazione
โข Scrivere il nome di una variabile a sinistra dellโassegnamento (โ) significa che il valore di quello che si trova a destra verrร inserito nella ยซscatolaยป corrispondente alla variabile stessa.
โข Ad esempio, il blocco elaborazione che segue mette il valore 5 dentro ๐ฅ๐ฅ:
๐ฅ๐ฅ โ 5
Blocco di Elaborazione
โข Scrivere il nome di una variabile a destra dellโassegnamento (โ) significa guardare il valore contenuto nella variabile e
utilizzarlo per fare dei calcoli.
โข Il contenuto della variabile non viene modificato dallโoperazione di lettura: ยซguardareยป dentro una ยซscatolaยป non ne cambia il
contenuto.
โข Ad esempio, il blocco elaborazione che segue copia dentro ๐ฅ๐ฅ il valore contenuto in ๐ฆ๐ฆ:
๐ฅ๐ฅ โ ๐ฆ๐ฆ
Blocco di Elaborazione
โข Il blocco elaborazione che segue guarda il contenuto di ๐ฆ๐ฆ, lo moltiplica per 5 e mette il risultato dentro ๐ฅ๐ฅ:
โข Il blocco elaborazione che segue legge il contenuto di ๐ฅ๐ฅ, gli somma 1, e mette il risultato nuovamente dentro ๐ฅ๐ฅ:
๐ฅ๐ฅ โ ๐ฆ๐ฆ ร 5
๐ฅ๐ฅ โ ๐ฅ๐ฅ + 1
Terminologia
โข Lโoperazione di ยซguardareยป il contenuto di una ยซscatolaยป sarร identificata con il termine lettura del contenuto di una variabile, o piรน semplicemente lettura di una variabile.
โข I termini scrivere o assegnare verranno utilizzati per riferirsi allโoperazione di ยซmettereยป qualcosa dentro una ยซscatolaยป.
โข Il contenuto di una ยซscatolaยป รจ il suo valore.
โข Dopo aver eseguito ๐ฅ๐ฅ โ 4, si dice che ๐ฅ๐ฅ vale 4. Che cosa abbiamo fatto? Abbiamo assegnato 4 a ๐ฅ๐ฅ.
โข Se eseguiamo ๐ฅ๐ฅ โ ๐ฅ๐ฅ + 1, stiamo assegnando a ๐ฅ๐ฅ il risultato di ๐ฅ๐ฅ + 1. Come lo si calcola? 1) Si legge ๐ฅ๐ฅ; 2) Si incrementa il
La Sequenza di Operazioni
โข Uno dei concetti fondamentali in informatica รจ quello di
sequenza, ovvero un elenco di operazioni da eseguire una dopo lโaltra.
โข Al termine dellโesecuzione di una operazione si procede con la successiva, e cosรฌ via fino a quando le operazioni non sono
terminate.
โข Questa modalitร di esecuzione delle operazioni รจ detta
sequenziale in contrapposizione ad una esecuzione parallela in cui piรน attivitร vengono eseguite contemporaneamente.
โข La sequenzialitร รจ intrinseca nella rappresentazione mediante diagrammi di flusso.
La Sequenza di Operazioni
โข Un esempio di sequenza รจ riportato a destra.
โข Al ๐ก๐ก๐ก๐ก๐ก๐ก๐ก๐ก๐ก๐ก 1 non possiamo dire cosa vale ๐๐ non possiamo dire cosa vale ๐ก๐ก, e non possiamo
dire cosa vale ๐๐.
โข Al ๐ก๐ก๐ก๐ก๐ก๐ก๐ก๐ก๐ก๐ก 2 possiamo dire cosa vale ๐๐, ovvero 5, ma non possiamo dire cosa valgono ๐ก๐ก o ๐๐.
๐๐ โ 5
๐ก๐ก โ 2
๐๐ โ ๐๐ ร ๐ก๐ก
1 2 3 4
โข Al ๐ก๐ก๐ก๐ก๐ก๐ก๐ก๐ก๐ก๐ก 3 possiamo dire cosa valgono ๐๐ (5) e ๐ก๐ก (2), ma non possiamo dire cosa vale ๐๐.
โข Al ๐ก๐ก๐ก๐ก๐ก๐ก๐ก๐ก๐ก๐ก 4 possiamo dire che ๐๐ vale 5, ๐ก๐ก vale 2 e che ๐๐ vale 10,
Esempio 1
โข Dati due numeri ๐๐ e ๐๐ scrivere il diagramma di flusso dell'algoritmo che trova il massimo e lo salva in ๐๐.
โข Ad esempio, se i numeri ๐๐ e ๐๐ fossero rispettivamente 4 e 7 il programma dovrebbe salvare in ๐๐ il valore di ๐๐, ovvero 7.
Esempio 1
massimo
๐๐ > ๐๐
V
F
๐๐ โ ๐๐ ๐๐ โ ๐๐
a, b
Come Modellare la Ripetizione
โข A volte รจ necessario ripetere un insieme di operazioni piรน volte.
โข Purtroppo non esiste un blocco specifico nei diagrammi di flusso per modellare questo concetto.
โข Ad ogni modo รจ possibile comporre i blocchi a disposizione per ottenere il risultato desiderato, ovvero la ripetizione di una (o piรน) istruzioni un numero fissato di volte.
Come Modellare la Ripetizione
โฆ
condizione
V
F
operazioni da ripetere
โฆ
Come Modellare la Ripetizione
โข Il concetto di ripetizione richiede di contare il numero di volte in cui le istruzioni sono state ripetute, in modo tale da potersi
fermare (interrompere la ripetizione) quando necessario.
โข Contare significa:
โข definire uno stato iniziale, ad esempio ๐๐ โ 0 (questa fase รจ chiamata in informatica fase di inizializzazione)
โข cambiare lo stato dopo aver ripetuto le istruzioni, ad esempio ๐๐ โ ๐๐ + 1 (questa fase รจ chiamata in informatica fase di aggiornamento);
Come Modellare la Ripetizione
condizione
V
F
operazioni da ripetere
๐๐ โ 0
๐๐ โ ๐๐ + 1
โข Tipicamente la condizione di
ripetizione dovrร essere correlata alla variabile utilizzata per
contare, i nell'esempio a destra.
โข Se ad esempio dovessi ripetere le operazioni n volte la condizione dovrebbe essere ๐๐ < n.
โข La condizione, insieme all'inizializzazione e
all'aggiornamento, rappresenta uno degli elementi chiave della
Esempio 2
โข Dati due numeri ๐๐ e ๐๐ scrivere il diagramma di flusso dell'algoritmo che calcola il prodotto dei numeri (๐๐ ร ๐๐)
utilizzando solo la somma. L'algoritmo deve salvare il risultato in ๐๐. Si assuma che ๐๐ sia sempre un numero intero positivo, al piรน nullo. Il numero ๐๐ puรฒ essere un qualunque numero reale.
โข Ad esempio, se i numeri ๐๐ e ๐๐ fossero rispettivamente 4.1 e 3 l'algoritmo dovrebbe calcolare ๐๐ = 4.1 + 4.1 + 4.1 ovvero
sommare 4.1 (๐๐) per 3 (๐๐) volte.
Esempio 2
prodotto
๐๐ < ๐๐
V
F
๐๐ โ ๐๐ + ๐๐ ๐๐ โ ๐๐ + 1
๐๐ โ 0 ๐๐ โ 0 a, b