Introduzione agli algoritmi
Quando deleghiamo un compito a un esecutore (persona o macchina), abbiamo bisogno di una sequenza di istruzioni
chiara, realizzabile e finita. Nel quotidiano sembriamo non averne bisogno (diciamo: “vado al ristorante e mangio una pastasciutta”),
ma per un esecutore non umano, ogni passaggio va reso esplicito: dimensione della pentola, riempimento, ebollizione, sale, tempi, scolatura e condimento.
Una sequenza finita di istruzioni non ambigue, ciascuna eseguibile dall’esecutore
previsto, che porta al completamento del compito.
Partiremo da esempi fenomenologici semplici (media dei voti, area del cerchio, sconti e IVA) e poi introdurremo gradualmente
le strutture di controllo (sequenza, selezione, iterazione) con i relativi diagrammi di flusso.
Esempio guida: calcolare la media dei voti
Obiettivo: leggere una sequenza di voti e calcolarne la media. A ogni voto letto aggiorniamo il totale e il conteggio; quando
i voti sono finiti, eseguiamo la divisione finale.
aggiorna totale
aggiorna conteggio
ci sono ancora voti?
sì → torna a “leggi un voto”
no → media = totale / conteggio; stampa media

Simboli del diagramma di flusso
- Rettangolo: istruzione/operazione.
- Parallelogramma: ingresso/uscita (lettura/stampa).
- Ovale: inizio/fine.
- Rombo: decisione (proposizione logica vera/falsa).
L’istruzione numerovoti = numerovoti + 1 significa:
“prendi il valore attuale di numerovoti, aggiungi 1 e memorizza il risultato in numerovoti”.
Non è un’uguaglianza algebrica, è un aggiornamento di variabile.
La Sequenza
La struttura più semplice: eseguire le istruzioni una dopo l’altra. Ad esempio, dati i raggio del cerchio, calcoliamo area
e circonferenza.

Leggi raggio
Area = raggio * raggio * 3.14
Circonferenza = 2 * raggio * 3.14
Stampa Area
Stampa Circonferenza
Fine
La Selezione a due vie
Dopo la sequenza, introduciamo la capacità di scegliere tra due percorsi in base a una condizione.
Esempio: nello stesso programma calcoliamo l’area di un rettangolo oppure di un triangolo rettangolo, in base all’input.

se è_rettangolo allora
leggi lato1
leggi lato2
area = lato1 * lato2
stampa area
altrimenti
leggi cateto1
leggi cateto2
area = (cateto1 * cateto2) / 2
stampa area
fine se
fine
se <condizione> allora
<sequenza1>
altrimenti
<sequenza2>
fine se
Calcolo del totale con sconto al 10% oltre una soglia e IVA 20% fino a €200, 15% sopra.
leggi numeroprodotti
leggi prezzo
leggi valorelimite
parziale = prezzo * numeroprodotti
se parziale >= valorelimite allora
parziale = parziale – parziale * 0.10
fine se
se parziale <= 200 allora
totale = parziale + parziale * 0.20
altrimenti
totale = parziale + parziale * 0.15
fine se
stampa totale
fine
Le Iterazioni: Ripeti/Finché, Mentre/Fai e Per
Molti compiti richiedono di ripetere azioni finché non succede qualcosa (evento o soglia), oppure per un numero noto di volte.
Ecco tre control-flow classici, con agganci fenomenologici.
Ripeti … Finché (controllo in coda)
Prima esegui, poi verifichi la condizione: ripeti finché non è soddisfatta. Fenomeno: “Tiro il dado finché esce 6”.

prezzomassimo = 0
ripeti
leggi prodotto
leggi prezzoprodotto
se prezzoprodotto > prezzomassimo allora
prezzomassimo = prezzoprodotto
prodottopiucaro = prodotto
fine se
stampa “Vuoi continuare? (si/no)”
leggi risposta
finché risposta = “no”
stampa prodottopiucaro
stampa prezzomassimo
fine
Mentre … Fai (controllo in testa)
Verifichi la condizione all’inizio: se è falsa, il corpo può non eseguire neppure una volta.
Fenomeno: “Continuo a camminare mentre il semaforo è verde”.

leggi n
totale = 0
contatore = 0
mentre contatore < n fai
contatore = contatore + 1
totale = totale + contatore
fine mentre
stampa totale
fine
Per (numero di iterazioni noto)
Usiamo per quando sappiamo a priori quante ripetizioni servono. Fenomeno: “Faccio 10 flessioni”.

per contatore = 1 fino a 10
risultato = contatore * 4
stampa risultato
fine per
fine
per i = 1 fino a 10
per j = 1 fino a 10
risultato = i * j
stampa risultato
fine per
fine per
fine
Equivalenze: le strutture sono trasformabili l’una nell’altra (Teorema di Böhm–Jacopini).
Tuttavia è buona pratica usare la forma più naturale (leggibilità prima di tutto).
Selezione a più vie
Quando le alternative sono molte e dipendono dal valore di un’unica variabile, la forma “se … altrimenti” annidata diventa poco leggibile.
La selezione a più vie (switch/case) compatta e chiarisce.
leggi giorno
seleziona giorno
caso lunedì: ore = 4
caso venerdì: ore = 5
caso sabato: ore = 7
caso domenica: ore = 0
caso altri_valori: ore = 8
fine seleziona
stampa ore
fine

Dalla tabella al codice: l’ascensore (automa di Mealy)
Colleghiamo ora le strutture viste con un esempio classico: l’ascensore, la cui logica è stata specificata da una tabella
(automa di Mealy). Possiamo implementarla con seleziona annidati.
| Ingressi | ||||
|---|---|---|---|---|
| Stato attuale | 1 | 2 | 3 | T |
| 1 | 1/F | 2/S | 2/S | T/G |
| 2 | 1/G | 2/F | 3/S | 1/G |
| 3 | 2/G | 2/G | 3/F | 2/G |
| T | 1/S | 1/S | 1/S | T/F |
leggi statoattuale
mentre vero fai
leggi ingresso
seleziona statoattuale
caso 1:
seleziona ingresso
caso 1: statofuturo = 1; uscita = F
caso 2: statofuturo = 2; uscita = S
caso 3: statofuturo = 2; uscita = S
caso T: statofuturo = T; uscita = G
fine seleziona
caso 2:
seleziona ingresso
caso 1: statofuturo = 1; uscita = G
caso 2: statofuturo = 2; uscita = F
caso 3: statofuturo = 3; uscita = S
caso T: statofuturo = 1; uscita = G
fine seleziona
caso 3:
seleziona ingresso
caso 1: statofuturo = 2; uscita = G
caso 2: statofuturo = 2; uscita = G
caso 3: statofuturo = 3; uscita = F
caso T: statofuturo = 2; uscita = G
fine seleziona
caso T:
seleziona ingresso
caso 1: statofuturo = 1; uscita = S
caso 2: statofuturo = 1; uscita = S
caso 3: statofuturo = 1; uscita = S
caso T: statofuturo = T; uscita = F
fine seleziona
fine seleziona
statoattuale = statofuturo
se uscita = F allora esci dal ciclo
fine mentre
fine
- Sequenza: istruzioni una dopo l’altra.
- Selezione a due vie: biforcazione su condizione (vero/falso).
- Selezione a più vie: scelta tra casi multipli su una variabile.
- Ripeti/Finché: almeno una esecuzione; test in coda.
- Mentre/Fai: può eseguire zero volte; test in testa.
- Per: numero di iterazioni noto a priori.
Esercizi
1) Sequenze e selezioni
- Scrivi un algoritmo che legge un intero e stampa: “pari” se è divisibile per 2, “dispari” altrimenti (diagramma + pseudocodice).
- Amplia l’esempio “sconti e IVA” introducendo una seconda soglia con sconto del 15% oltre € 500.
2) Iterazioni
- Media, massimo e minimo di una sequenza di voti terminata da un valore negativo (usa ripeti o mentre).
- Numeri primi: per ciascuno dei 20 numeri letti, verifica se è primo usando il resto (Mod). primo = vero
valore = 2
ripeti
se (n Mod valore) = 0 allora
primo = falso
altrimenti
valore = valore + 1
finché (valore > n/2) oppure (primo = falso) - Somma dei primi n numeri (usa mentre); poi riscrivilo con ripeti e con per.
3) Dalla grafica al codice
- Traduci in pseudocodice il seguente diagramma di flusso e spiega cosa calcola:

4) Comprensione concettuale
- Definisci “algoritmo”.
- Qual è la differenza tra ciclo mentre e ciclo ripeti? E tra mentre e per?
- Mostra come simulare un mentre con un ripeti e viceversa (usa piccoli esempi).
- Simula un ciclo per con mentre e con ripeti.
- Che differenza c’è tra selezione a due vie e a più vie? Quando preferire l’una o l’altra?
5) Quiz veloci
- Un ciclo ripeti:
- a) ha termine quando la condizione logica è vera ✅
- b) è un’iterazione a due vie ❌
- c) è un ciclo con controllo in testa ❌
- d) è una selezione iterativa ❌
- Il ciclo per:
- a) serve per effettuare selezioni ❌
- b) non può essere simulato con altri cicli ❌
- c) può simulare un ciclo ripeti ✅ (con contatore e condizione opportuna)
- d) teoricamente può non essere compreso in un linguaggio di programmazione ✅
- Il ciclo mentre:
- a) ha termine quando la condizione logica è vera ❌ (di solito si esce quando diventa falsa)
- b) è un ciclo con controllo in testa ✅
- c) si può simulare con un ciclo for ✅ (se noto il numero di iterazioni)
- d) esegue il corpo un numero fisso di volte ❌
- La struttura se:
- a) è un ciclo ❌
- b) è una selezione ✅
- c) è un’iterazione ❌
- d) è una sequenza ❌
In stampa per il lettore italiano puoi formattare con la virgola (3,14).