Algoritmi, Pseudocodice e Flowchart: Come Ragiona il Computer Passo-Passo Spiegato Semplice

Tempo di lettura: 9 min

Oggi la parola "algoritmo" è sulla bocca di tutti: sentiamo parlare dell’algoritmo di Instagram o TikTok che decide quali video mostrarci, dell’algoritmo di Google che ordina le ricerche sul web, o degli algoritmi bancari che approvano un pagamento in un millisecondo.

Spesso questo termine viene avvolto da un’aura di mistero, quasi fosse un’entità magica e segreta.

In realtà, l’idea alla base di un algoritmo è una delle cose più antiche, umane e affascinanti della storia. Il termine deriva dal nome del grande matematico e astronomo persiano del nono secolo, Muḥammad ibn Mūsā al-Khwārizmī, considerato uno dei padri dell’algebra.

Un algoritmo non è altro che una ricetta logica perfetta: una sequenza ordinata, chiarissima e finita di istruzioni che riceve dei dati di partenza e li elabora per raggiungere un risultato certo.

In questa guida scopriremo come si progetta un algoritmo prima ancora di toccare la tastiera, come disegnarlo graficamente con i Diagrammi di Flusso (Flowchart) e come scriverlo in Pseudocodice, il linguaggio ponte universale tra la mente umana e il computer.


1. La Ricetta della Torta: Perché il Computer Non Capisce "Quanto Basta"

Per capire la differenza tra come ragiona un essere umano e come ragiona un calcolatore, possiamo confrontare una comune ricetta di cucina con un algoritmo informatico:


Analogia Didattica

La Ricetta del Cuoco contro l’Algoritmo del Computer

🥣 La Ricetta Umana (Ambigua)
Un libro di cucina scrive:
“Aggiungi un pizzico di sale quanto basta, inforna a calore moderato finché la superficie non risulta dorata e croccante”.
Un essere umano capisce al volo cosa fare grazie all’esperienza, agli occhi e al buon senso.
Piena di Ambiguità

💻 L’Algoritmo per il Computer (Univoco)
Il computer non ha occhi, palato né buon senso! Di fronte a “quanto basta”, andrebbe in errore.
Un algoritmo deve specificare:
“Aggiungi esattamente 4,5 grammi di cloruro di sodio; imposta la resistenza a 180°C per esattamente 25 minuti”.
Precisione Chirurgica al 100%


2. Le 5 Proprietà Obbligatorie di un Vero Algoritmo

Perché una sequenza di istruzioni possa essere definita formalmente un "algoritmo" in matematica e informatica, deve rispettare cinque regole ferree:

  1. Finitezza: Il procedimento non può continuare all’infinito; deve terminare prima o poi dopo un numero preciso di passaggi.
  2. Determinatezza (Zero Ambiguità): Ogni singolo passaggio deve essere chiarissimo e ammettere una sola interpretazione. Dati gli stessi ingressi, l’algoritmo deve compiere sempre gli stessi identici passi.
  3. Effettività (Fattibilità Reale): Ogni comando deve essere materialmente realizzabile dall’esecutore in un tempo umano ragionevole (non puoi ordinare al computer di "calcolare tutti i decimali infiniti di Pi Greco").
  4. Dati in Ingresso (Input): L’algoritmo riceve dei dati di partenza su cui lavorare (ad esempio i voti di uno studente o il saldo del conto).
  5. Risultato in Uscita (Output): Deve produrre almeno un risultato concreto che risolva il problema iniziale (ad esempio la media finale o la ricevuta del pagamento).

3. I Diagrammi di Flusso (Flowchart): Disegnare i Pensieri

Prima di scrivere il codice in linguaggi complessi come C++ o Java, il modo migliore per verificare se un ragionamento fila liscio è disegnarlo graficamente.

Questo disegno prende il nome di Diagramma di Flusso (o Flowchart). Lo standard internazionale ISO 5807 ha codificato forme geometriche precise per ciascun tipo di azione:

⭕
Ovale (Terminatore)
Indica l’Inizio o la Fine dell’algoritmo.

→
▱
Parallelogramma (I/O)
Indica l’ingresso o l’uscita dei dati: Leggi un valore dalla tastiera o Scrivi un risultato sullo schermo.

→
▭
Rettangolo (Azione/Calcolo)
Un’operazione concreta compiuta dal processore: ad esempio un calcolo matematico (somma = a + b) o una modifica di memoria.

→
⋄
Rombo (Decisione / Bivio)
La domanda condizionale con due frecce in uscita: una per il ramo VERO (Sì) e una per il ramo FALSO (No)!


4. Il Teorema di Böhm-Jacopini: I Tre Mattoni di Tutto il Software

Nel 1966 due brillanti informatici italiani, Corrado Böhm e Giuseppe Jacopini, formularono un teorema storico che ha cambiato per sempre l’ingegneria del software.

Il loro teorema dimostrò matematicamente che qualsiasi programma informatico dell’universo — dal più piccolo script scolastico fino al sistema di guida autonoma di una navetta spaziale — può essere scritto combinando soltanto TRE strutture elementari:

  1. La Sequenza: Esegui l’azione 1, poi subito l’azione 2, poi l’azione 3 in ordine dritto.
  2. La Selezione (La Decisione): SE una condizione è vera fai l’azione A, ALTRIMENTI fai l’azione B.
  3. L’Iterazione (Il Ciclo): MENTRE una condizione resta vera, continua a ripetere l’azione C.

Non serve inventarsi nient’altro! Tutta la complessità del mondo digitale non è altro che un sapiente intreccio di sequenze, decisioni e ripetizioni.


5. Lo Pseudocodice: Il Ponte tra l’Umano e la Macchina

I diagrammi di flusso sono ideali per visualizzare a colpo d’occhio bivi e ripetizioni, ma per algoritmi composti da decine o centinaia di passaggi diventano ingombranti da disegnare.

Per questo l’informatica adotta lo Pseudocodice: un linguaggio ponte formale che impiega vocaboli naturali (italiano o inglese), organizzati con la rigida disciplina logica di un vero linguaggio di programmazione (INIZIO, LEGGI, SE... ALLORA, ALTRIMENTI, MENTRE, SCRIVI, FINE).

💡 La Scala Lineare dell’Informatica in 3 Livelli:

  1. Livello 1 · Pensiero Umano (Linguaggio Naturale): "Prendi due numeri e stabilisci qual è il maggiore."
  2. Livello 2 · Pseudocodice (Ponte Logico Lineare): INIZIO ➔ LEGGI ➔ SE...ALLORA ➔ SCRIVI ➔ FINE (indipendente dalla macchina).
  3. Livello 3 · Codice Eseguibile (Macchina): if/else, input(), print() in Python o C++ (eseguito dal processore).

1. Il Flusso Logico Lineare dell’Algoritmo

Prima di scrivere il codice, schematizziamo la decisione con un diagramma di flusso rigorosamente lineare dall’inizio alla fine:

Flusso Logico Lineare: Trovare il Massimo tra Due Numeri

flowchart TD

Start(["🟢 INIZIO"]) --> Input[/"📥 LEGGI numero1, numero2"/]

Input --> Cond{"❓ È numero1 maggiore di numero2?"}
Cond -- "VERO (Sì)" --> Assign1["📦 massimo = numero1"]
Cond -- "FALSO (No)" --> Assign2["📦 massimo = numero2"]

Assign1 --> Output[/"📤 SCRIVI 'Il massimo è: ', massimo"/]
Assign2 --> Output

Output --> Finish(["🔴 FINE"])

2. Confronto Diretto a Specchio: Pseudocodice vs Codice Reale

Ecco come ogni singola riga di logica umana trova la sua esatta traduzione nell’istruzione eseguibile per il calcolatore:

Dal Pensiero Umano al Software: Confronto Lineare a Specchio

Ponte Didattico Umano-Macchina
Pseudocodice Logica Umana
01"pseudo-kw-block">INIZIO
02
03"pseudo-kw-io">LEGGI numero1, numero2
04
05"pseudo-kw-flow">SE numero1 > numero2 "pseudo-kw-flow">ALLORA
06
07massimo "pseudo-assign">← numero1
08
09"pseudo-kw-flow">ALTRIMENTI
10
11massimo "pseudo-assign">← numero2
12
13"pseudo-kw-block">FINE "pseudo-kw-flow">SE
14
15"pseudo-kw-io">SCRIVI "Il numero più grande è: ", massimo
16
17"pseudo-kw-block">FINE
Codice Python Macchina
01numero1 = "py-builtin">int("py-builtin">input("Inserisci il primo numero: "))
02
03numero2 = "py-builtin">int("py-builtin">input("Inserisci il secondo numero: "))
04"py-kw">if numero1 > numero2:
05
06massimo = numero1
07
08"py-kw">else:
09
10massimo = numero2
11"py-builtin">print("Il numero più grande è:", massimo)
Analisi Lineare del Flusso Logico:

Osserva la corrispondenza lineare e diretta tra i due blocchi:

  1. Acquisizione Dati (Input): LEGGI numero1, numero2 esprime l'intenzione logica pura; in Python viene tradotta con input(), incapsulato in int() per convertire la digitazione della tastiera in cifre intere.
  2. Selezione Condizionale (Bivio): SE numero1 > numero2 ALLORA pone la verifica logica; in Python diventa l'istruzione if numero1 > numero2:. L'assegnazione concettuale massimo <- numero1 viene espressa dall'operatore = del computer.
  3. Ramo Alternativo (Fallback): ALTRIMENTI diventa la clausola else:, assicurando che una delle due vie venga percorsa in ogni caso.
  4. Restituzione Risultato (Output): SCRIVI comunica l'esito finale all'utente, affidato in Python alla funzione standard print().

Lo pseudocodice consente di collaudare e validare al 100% la linearità logica del ragionamento prima di occuparsi della sintassi, delle parentesi o dei dettagli operativi del compilatore!


6. Quadro sinottico comparativo degli Strumenti di Progettazione

Strumento A Cosa Serve Linguaggio Usato Vantaggio Principale Limite Principale
Descrizione a Parole Prima bozza discorsiva dell’idea. Italiano comune informale. Immediata da spiegare a chiunque. Troppo vaga e piena di ambiguità.
Diagramma di Flusso (Flowchart) Mappa geometrica visiva dei bivi e dei cicli. Simboli geometrici standard ISO 5807 con frecce. Chiarissimo e visivo a colpo d’occhio. Diventa ingombrante e gigante per programmi lunghi.
Pseudocodice Bozza strutturata dell’algoritmo indipendente dal PC. Italiano strutturato con parole chiave formali. Veloce da scrivere, ordinato e universale. Non può essere eseguito direttamente dal computer.
Codice Sorgente Reale Il programma finale consegnato alla macchina. Python, C++, Java, JavaScript, Rust. Direttamente eseguibile e funzionante al 100%. Rigido: un solo errore di battitura blocca l’esecuzione.

7. Domande Frequenti sugli Algoritmi (FAQ)

Qual è la differenza tra un Algoritmo e un Programma?

  • L’Algoritmo è l’idea teorica, la ricetta logica e la strategia matematica astratta per risolvere un problema (può essere scritto anche su un tovagliolo di carta).
  • Il Programma è la traduzione concreta e tangibile di quell’algoritmo in un preciso linguaggio di programmazione (come Python o C++), registrato in un file eseguibile dal computer.

Perché il Teorema di Böhm-Jacopini ha eliminato il comando "GOTO"?

Nei primissimi linguaggi degli anni ’60 esisteva il comando GOTO (vai a), che permetteva al programma di saltare liberamente da una riga qualsiasi a un’altra in modo selvaggio. Questo creava programmi caotici e impossibili da comprendere e riparare, soprannominati ironicamente "Spaghetti Code". Il teorema dimostrò che il salto GOTO era totalmente inutile: bastavano sequenza, selezione e cicli per fare tutto in modo pulito e strutturato!

Cosa significa che un algoritmo è "Deterministico"?

Significa che non lascia nulla al caso o alla fortuna: ogni volta che inserisci gli stessi dati in ingresso, l’algoritmo compirà sempre gli stessi identici passaggi e produrrà sempre lo stesso identico risultato, sia che venga eseguito oggi, domani o tra cinquant’anni.

Chi progetta gli algoritmi nei grandi motori di ricerca?

Vengono progettati da squadre di ingegneri del software, matematici e data scientist. Algoritmi celebri come il PageRank di Google analizzano miliardi di pagine web incrociando parole chiave, autorevolezza delle fonti e link reciproci per restituire i risultati più utili in pochi millesimi di secondo.


8. Glossario essenziale

  • Algoritmo: Sequenza finita, ordinata e non ambigua di istruzioni volta a risolvere un problema determinato.
  • Flowchart (Diagramma di Flusso): Rappresentazione schematica bidimensionale delle istruzioni di un algoritmo tramite blocchi geometrici convenzionali.
  • Pseudocodice: Linguaggio informale strutturato a metà strada tra il linguaggio naturale umano e la sintassi formale di programmazione.
  • Böhm-Jacopini: Il teorema fondamentale dell’informatica che sancisce la sufficienza di sequenza, selezione e iterazione per esprimere qualsiasi algoritmo computabile.
  • Variabile Accumulatore: Una variabile utilizzata all’interno di un ciclo per sommare progressivamente una serie di valori numerici (es. somma = somma + voto).

Fonti e Riferimenti Accademici Ufficiali

  • Cormen, T. H., Leiserson, C. E., Rivest, R. L., & Stein, C.: Introduction to Algorithms (4th Edition), MIT Press. Capitolo 1: "The Role of Algorithms in Computing – Algorithms as a Technology".
  • Knuth, Donald E.: The Art of Computer Programming, Volume 1: Fundamental Algorithms, Addison-Wesley. Sezione 1.1: "Algorithms – Definition and Properties".
  • Böhm, Corrado, & Jacopini, Giuseppe (1966): Flow Diagrams, Turing Machines and Languages with Only Two Formation Rules. Communications of the ACM, Vol. 9, No. 5. L’articolo accademico fondativo della programmazione strutturata.
  • International Organization for Standardization (ISO 5807:1985): Information processing – Documentation symbols and conventions for data, program and system flowcharts, program network charts and system resources charts: ISO Standards Catalogue

Lascia un contributo o commento

L'indirizzo email non verrà pubblicato.