Vedendo le statistiche del sito mi sono accorto che la parola più usata per arrivare a questo blog è, con ampio margine, la parola diagramma di flusso.
A quanto pare c’è molto interesse attorno a questo strumento che io trovo più didattico-scolastico che di vera utilità o valore scientifico. Come tutti i modelli di rappresentazione grafica è infatti improponibile per rappresentare un qualsivoglia programma complesso ma inoltre ha lo svantaggio di non avere la base teorica e formale che hanno altri modelli.
Ho comunque deciso di parlarne per colmare la mancanza facendovi però notare che esistono modelli più rigorosi quali automi a stati finiti, automi a pila e macchine di Turing.
Innanzitutto il diagramma di flusso (o flow chart, o diagramma a blocchi) è certamente il più semplice modello algoritmico immaginabile. La semplicità è tale che (almeno a me è successo così) viene spiegato in corsi di matematica o informatica alle elementari.
Un diagramma si compone principalmente di 5 blocchi:
- un blocco ad angoli smussati di inizio che rappresenta il punto di partenza del diagramma di flusso. Ovviamente ne può esistere solo uno per diagramma.
- un blocco ad angoli smussati di terminazione che rappresenta il punto in cui l’algoritmo cessa restituendo il risultato. Ci può essere un numero qualsiasi di blocchi di terminazione.
- un rettangolo che rappresenta le azioni da compiere in quel passo.
- una losanga (detto anche rettangolo inclinato) che rappresentano azioni di lettura/scrittura in memoria.
- un rombo che rappresenta una condizione su una variabile. Se la condizione è vera si segue la freccia con scritto vero, se la condizione è falsa si segue la freccia con scritto falso.
Per leggere un diagramma basta quindi seguire sequenzialmente le frecce a partire dal blocco di partenza fino ad arrivare ad uno dei blocchi di terminazione.
Questo è il classico esempio del fattoriale. Ricordiamoci però che tale diagramma è più complesso del solito in quanto viene calcolato ricorsivamente (ovvero il risultato è calcolato richiamando se stesso finché n è diverso da zero).
Non c’è molto da aggiungere. Come appare evidente un diagramma di flusso risulta inadeguato a descrivere algoritmi molto complessi a meno di condensare nei rettangoli più operazioni non elementari in una maxi-operazione. Ovviamente un diagramma di flusso è maggiormente dettagliato all’aumentare della atomicità delle operazioni descritte nei rettangoli (fino addirittura al punto di usare i rettangoli solo per sommare o sottrarre 1 alle variabili).
Il mio consiglio è quello di non concentrarvi sui diagrammi di flusso bensì su altri metodi molto più pratici come ad esempio lo pseudo codice ovvero una descrizione dell’algoritmo il più formale possibile e simile al linguaggio di programmazione reale.