# Diagramma di flusso

In informatica il diagramma di flusso è una rappresentazione grafica delle operazioni da eseguire per l'esecuzione di un algoritmo. Ogni singolo passo è visualizzato tramite una serie di simboli standard.
Esso consente di descrivere tramite un linguaggio di modellazione grafico:
* le operazioni da compiere;
* la sequenza nella quale devono essere compiute, rappresentata con frecce di collegamento.
Per questa loro connotazione topologica i diagrammi di flusso possono essere ricondotti alla classe più ampia dei diagrammi a blocchi, che a loro volta rientrano nell'ancora più vasta categoria delle mappe concettuali, utilizzate soprattutto per la descrizione e la rappresentazione delle informazioni e della conoscenza.

## Utilizzo

I diagrammi di flusso trovano la loro applicazione in vari ambiti, ma quello in cui storicamente si sono maggiormente affermati è stato quello informatico dove, solo in tempi più recenti, sono stati affiancati da altri strumenti metodologici quali lo pseudocodice e l'UML.

## Blocchi elementari

Esistono varie notazioni per la rappresentazione con diagrammi di flusso.Tutte le notazioni sottendono a un meta-modello molto semplice, caratterizzato da una lettura sequenziale:
* si parte dal blocco iniziale
* si segue la freccia in uscita
* si giunge al blocco successivo e si effettua l'operazione descritta nel blocco
* si procede iterando i passi 2 e 3 fino a giungere al blocco finale.
Tra le operazioni si distinguono:
* azioni, che comportano un'attività o un'elaborazione da svolgere
* test, che indicano due o più direzioni in base a un fattore di decisione (vero o falso)
* ingresso/uscita, che comportano l'immissione di informazioni dall'esterno oppure l'invio di informazioni verso l'esterno
La notazione più semplice e più frequentemente utilizzata prevede dunque 5 tipi di blocchi elementari:
| blocco iniziale | blocco finale |
| blocco di I/O | blocco di elaborazione |
| blocco decisionale o test ||
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à

* condizioni sui blocchi:
** blocco azione e blocco lettura/scrittura: ogni blocco di questi due tipi ha una sola freccia entrante e una sola freccia uscente
** blocco decisionale: ogni blocco di questo genere ha una sola freccia entrante e due frecce uscenti
* condizioni sulle frecce:
** ogni freccia deve entrare in un blocco
* condizioni sui percorsi:
** dal blocco iniziale deve essere possibile raggiungere ogni blocco
** da ogni blocco dev'essere possibile raggiungere il blocco finale

## Esempio

Dato l'algoritmo per il calcolo del fattoriale in maniera ricorsiva
    $\mathrm {fatt} (n)=n!=\left\{{\begin{matrix}1,&{\mbox{se }}n=0\\n\cdot (n-1)!,&{\mbox{se }}n\neq 0\end{matrix}}\right.$
un possibile diagramma di flusso per rappresentarlo:
Dove tale diagramma rappresenta una procedura ricorsiva, denominata "fatt", che richiama sé stessa.

## Strumenti digitali

* Software gratis: Draw.io è un software di diagrammi online gratuito per la creazione di diagrammi di flusso, diagrammi di processo, organigrammi, UML, ER e diagrammi di rete. GitMind è un software di diagrammi online gratuito per la creazione di diagrammi di flusso, organigrammi, UML, swimlane, che fornisce modelli di programma predefiniti.
* Software proprietario: Lucidchart è una piattaforma proprietaria basata sul web che consente agli utenti di collaborare alla stesura e alla condivisione di grafici e diagrammi. SmartDraw è uno strumento di diagramma utilizzato per creare diagrammi di flusso, organigrammi, mappe mentali e grafici di progetto. Visme è uno strumento di grafica online che può aiutare a creare diagrammi e grafici.