Prima di scrivere un programma bisogna decidere che cosa dovrà fare, in quale ordine e come reagirà alle diverse situazioni. Il diagramma di flusso serve proprio a questo: rappresenta graficamente un algoritmo usando simboli convenzionali e frecce che mostrano il percorso dell'esecuzione.

Il NIST definisce un algoritmo come un processo matematico chiaramente specificato o un insieme di regole che, se seguito, produce un risultato prestabilito. Il diagramma non sostituisce l'algoritmo: è uno dei modi possibili per descriverlo, controllarlo e comunicarlo prima di trasformarlo in un linguaggio di programmazione.

Che cos'è un diagramma di flusso?

La definizione collegata allo standard ISO 5807 descrive il flowchart come una rappresentazione grafica della definizione, dell'analisi o del metodo di soluzione di un problema, nella quale i simboli rappresentano operazioni, dati, flusso e altre funzioni. Lo standard ISO 5807 fornisce simboli e convenzioni per diagrammi di programma, dati e sistemi.

Un buon diagramma risponde almeno a quattro domande:

  • da dove comincia e dove termina il procedimento;
  • quali dati entrano e quali risultati escono;
  • quali elaborazioni vengono eseguite;
  • quali strade vengono scelte quando una condizione è vera o falsa.
Infografica sui simboli base dei diagrammi di flusso con un esempio decisionale mare o montagna Ovale, rettangolo, parallelogramma, rombo, frecce e connettori formano il vocabolario visivo di base di un diagramma di flusso.

I simboli fondamentali

Ovale o terminale: inizio e fine

Il terminale indica l'avvio o la conclusione del procedimento. Un diagramma dovrebbe avere un punto iniziale chiaramente riconoscibile e almeno un'uscita finale. Nei programmi Flowgorithm il terminale iniziale della funzione principale porta normalmente il nome Main, mentre molti diagrammi tradizionali usano le parole “Inizio” e “Fine”.

Rettangolo: processo o elaborazione

Il rettangolo contiene un'azione interna: un calcolo, un'assegnazione, una modifica di variabile o una preparazione di dati. Esempi:

somma = numero1 + numero2 contatore = contatore + 1 prezzo_finale = prezzo * 1.22

Il processo trasforma lo stato del problema senza chiedere necessariamente nuovi dati all'utente.

Parallelogramma: input e output

Il parallelogramma rappresenta l'ingresso o l'uscita dei dati. L'input acquisisce un valore da tastiera, sensore, file o altra sorgente. L'output mostra o invia un risultato.

Leggi età Scrivi "Sei maggiorenne"

Input e output sono spesso disegnati con la stessa forma, ma il testo interno deve rendere chiaro se il dato entra oppure esce.

Rombo: decisione

Il rombo contiene una condizione che può essere valutata come vera o falsa. Da esso partono normalmente due rami, chiaramente etichettati. Una domanda utile deve essere formulata in modo preciso:

età >= 18? risposta == "S"? numero % 2 == 0?

Il rombo non “esegue” entrambe le strade. Ne sceglie una in base al risultato logico della condizione.

Frecce: direzione del controllo

Le linee con freccia indicano l'ordine di esecuzione. Senza frecce, la posizione geometrica dei simboli può diventare ambigua. Un diagramma chiaro procede preferibilmente dall'alto verso il basso o da sinistra verso destra, limitando gli incroci.

Connettori: collegare senza creare un groviglio

Il connettore permette di interrompere e riprendere un percorso in un altro punto, evitando linee molto lunghe o incrociate. I connettori corrispondenti devono avere la stessa etichetta. Sono utili, ma un uso eccessivo può rendere più difficile seguire il flusso.

Leggere l'esempio “mare o montagna”

Il diagramma dell'immagine segue questa logica:

  1. il procedimento comincia;
  2. viene mostrata una domanda;
  3. l'utente inserisce una risposta;
  4. il rombo verifica se la risposta è uguale a “S”;
  5. se la condizione è vera, viene mostrato “Vai al mare!”;
  6. se è falsa, viene mostrato “Meglio la montagna!”;
  7. i due rami si ricongiungono e il procedimento termina.

Il punto più importante non è la destinazione turistica, ma la struttura: una sequenza iniziale, una decisione, due rami alternativi e una riunione finale.

Dal diagramma allo pseudocodice

La stessa logica può essere descritta senza dipendere da un linguaggio specifico:

INIZIO SCRIVI "Il mare è calmo? S/N" LEGGI risposta SE risposta = "S" ALLORA SCRIVI "Vai al mare!" ALTRIMENTI SCRIVI "Meglio la montagna!" FINE SE FINE

Lo pseudocodice mantiene la struttura dell'algoritmo, ma usa frasi ordinate invece di simboli. È spesso il ponte più comodo fra il disegno e il codice.

Dal diagramma a Python

La documentazione ufficiale Python definisce if, while e for come costrutti tradizionali di controllo del flusso. L'esempio può diventare:

risposta = input("Il mare è calmo? S/N: ").strip().upper() if risposta == "S": print("Vai al mare!") else: print("Meglio la montagna!")

L'ovale non compare come istruzione Python: l'avvio coincide con l'inizio del programma e la fine con il completamento del codice. Il parallelogramma di input diventa input(); quello di output diventa print(); il rombo diventa if ... else. L'indentazione mostra quali istruzioni appartengono a ciascun ramo.

Le tre strutture fondamentali della programmazione

Sequenza

Le istruzioni vengono eseguite una dopo l'altra:

Leggi base Leggi altezza area = base * altezza / 2 Scrivi area

Non esistono deviazioni: ogni blocco conduce al successivo.

Selezione

Una condizione determina quale ramo percorrere. La forma più comune è if/else, ma possono esserci più alternative attraverso condizioni concatenate.

SE voto >= 6 Scrivi "Promosso" ALTRIMENTI Scrivi "Da recuperare"

Iterazione o ciclo

Una parte del diagramma torna verso una condizione precedente. Il ciclo continua finché la condizione prevista resta vera oppure fino a quando si verifica l'evento di uscita.

contatore = 1 MENTRE contatore <= 5 Scrivi contatore contatore = contatore + 1 FINE MENTRE

La freccia di ritorno è essenziale: rende visibile che il programma ripete dei blocchi anziché proseguire una sola volta.

Come disegnare correttamente un ciclo

Un ciclo ben costruito deve contenere:

  • un'inizializzazione, per esempio contatore = 1;
  • una condizione di continuazione o uscita;
  • il corpo del ciclo;
  • un aggiornamento che avvicini il programma alla fine.

Se manca l'aggiornamento, il diagramma può rappresentare un ciclo infinito. Se la condizione è sbagliata, il corpo può non essere eseguito mai oppure essere eseguito una volta di troppo.

Flowgorithm: diagrammi che possono essere eseguiti

Flowgorithm si presenta come un linguaggio gratuito per principianti basato su diagrammi di flusso grafici. A differenza di un disegno statico, permette di inserire dichiarazioni, assegnazioni, input, output, decisioni, cicli e funzioni, quindi eseguire il programma e osservare il percorso seguito.

Il tutorial ufficiale mostra i terminali arrotondati della funzione principale e guida alla costruzione di un primo programma. La documentazione dei template elenca istruzioni come assegnazione, chiamata, dichiarazione, If, While, For, input e output. La funzione Source Code Viewer può inoltre tradurre il diagramma in diversi linguaggi e mettere in relazione i blocchi grafici con il codice generato.

Questo non significa che il codice prodotto debba essere copiato senza comprenderlo. Il vero vantaggio didattico è vedere la corrispondenza fra struttura visiva e struttura testuale.

I diagrammi di flusso sono “vecchia scuola”?

Sono nati molto prima dei moderni ambienti di sviluppo, ma non per questo sono inutili. Lo standard ISO 5807 è ancora pubblicato e confermato, e le stesse direttive ISO richiamano l'uso di tale standard per la preparazione dei flowchart nei documenti tecnici.

Restano particolarmente utili per:

  • insegnare sequenza, decisione e ciclo;
  • spiegare una procedura a persone con competenze diverse;
  • analizzare un problema prima di scegliere il linguaggio;
  • documentare processi brevi o critici;
  • individuare rami mancanti e condizioni poco chiare;
  • confrontare un algoritmo con la sua implementazione.

Diventano meno efficaci quando il programma è enorme, ha moltissime eccezioni, usa concorrenza complessa o richiede centinaia di collegamenti. In questi casi si possono usare pseudocodice, diagrammi UML, tabelle decisionali, macchine a stati o documentazione direttamente collegata al codice.

Buone pratiche per un diagramma leggibile

  • usare un titolo che descriva il problema;
  • mantenere il flusso principale dall'alto verso il basso;
  • scrivere azioni brevi, con un solo compito per blocco;
  • formulare le decisioni come domande verificabili;
  • etichettare chiaramente i rami Vero/Falso o Sì/No;
  • evitare linee diagonali e incroci inutili;
  • usare connettori solo quando migliorano davvero la lettura;
  • verificare ogni possibile percorso, non soltanto il caso più favorevole;
  • mantenere coerenti nomi di variabili e termini;
  • aggiornare il diagramma quando cambia il programma.

Dal problema all'algoritmo: un metodo pratico

Prima di aprire Flowgorithm o scrivere Python, conviene seguire questa sequenza:

  1. definire l'obiettivo: quale risultato deve essere prodotto?
  2. elencare gli input: quali dati sono necessari?
  3. stabilire gli output: che cosa deve vedere o ricevere l'utente?
  4. individuare i casi: quali condizioni cambiano il percorso?
  5. riconoscere le ripetizioni: quali azioni devono essere cicliche?
  6. disegnare il flusso: usare simboli coerenti e frecce chiare;
  7. simulare a mano: provare valori normali, estremi ed errati;
  8. tradurre in codice: conservare la stessa struttura logica;
  9. testare: confrontare il risultato reale con quello atteso.

Errori frequenti

  • Mettere una domanda in un rettangolo: le condizioni appartengono al rombo.
  • Non etichettare i rami: non si capisce quale percorso corrisponde a vero o falso.
  • Disegnare frecce senza direzione: l'ordine di esecuzione diventa ambiguo.
  • Creare un ciclo senza aggiornamento: il flusso può non terminare.
  • Confondere input e processo: leggere un valore non equivale a calcolarlo.
  • Inserire troppe azioni nello stesso blocco: il diagramma perde precisione.
  • Disegnare dopo aver finito il programma senza aggiornarlo: la documentazione non rappresenta più il codice.

Domande frequenti

Un diagramma di flusso è un programma?

Normalmente è una rappresentazione di un algoritmo. In strumenti come Flowgorithm, però, il diagramma contiene istruzioni eseguibili e funziona come un programma visuale.

Ogni rombo deve avere due uscite?

Una decisione booleana ha normalmente due esiti. Entrambi devono essere rappresentati, anche quando uno conduce direttamente alla prosecuzione o alla fine.

Il parallelogramma serve sia per input sia per output?

Sì, secondo la convenzione più comune. Il verbo scritto nel simbolo deve rendere chiara la direzione del dato.

Posso tradurre automaticamente un diagramma in Python?

Flowgorithm possiede un visualizzatore di codice per diversi linguaggi. Il risultato va comunque letto e verificato: la comprensione dell'algoritmo resta indispensabile.

Quando conviene usare lo pseudocodice invece del diagramma?

Quando l'algoritmo è lungo, contiene molte strutture annidate o deve essere modificato spesso. Lo pseudocodice occupa meno spazio e resta vicino al codice.

Fonti ufficiali e approfondimenti