Flow chart: diagrammi di flusso
Un diagramma di flusso rappresenta graficamente un algoritmo con simboli standard e
frecce orientate. È efficace perché visualizza struttura e costrutti (sequenza, selezione, iterazione).
Regole base
- Usa solo i 4 blocchi standard + frecce orientate.
- Un solo Start e un solo Stop.
- I rami alternativi si ricongiungono prima di Stop.
I quattro blocchi fondamentali
| Blocco | Forma | Immagine | Uso tipico | Esempio |
|---|---|---|---|---|
| Inizio/Fine | Ovale | ![]() |
Punto di ingresso/uscita del diagramma | Start / Stop |
| I/O | Parallelogramma | ![]() |
Lettura da tastiera, stampa a video | “Leggi N” • “Stampa Somma” |
| Elaborazione | Rettangolo | ![]() |
Assegnazioni e calcoli | S = A + B |
| Decisione | Rombo | ![]() |
Test con rami vero/falso | N % 2 == 0 ? |
Esempio di flow chart (sequenza)

Esercizi – Flow chart
Esercizio 1 — Riconosci i blocchi
Indica, nell’immagine precedente, quali blocchi sono I/O, quali di elaborazione e dove sono Start/Stop.
Soluzione
- I/O: “Leggi A”, “Leggi B”, “Stampa S”.
- Elaborazione: “S = A + B”.
- Start/Stop: ovali iniziale e finale.
Esercizio 2 — Pari/Dispari
Disegna un flow chart che legge N e stampa “pari” se N%2==0, altrimenti “dispari”.
Soluzione (schema)
Start → Leggi N → Decisione N%2==0? → V: Stampa “pari” → Stop; F: Stampa “dispari” → Stop.
Esercizio 3 — Ricongiungi i rami
Nel flow chart di cui sopra, fai convergere entrambi i rami su un unico Stop.
Soluzione
Entrambi i rami (V e F) puntano a un unico blocco Stop.
Costrutto if (senza else)
Esegue il blocco solo quando la condizione è true; altrimenti prosegue oltre.

if senza else.Esempi
// C
if (x > 100) {
printf("Maggiore di 100\n");
}
// C++
if (x % 2 == 0) {
std::cout << "Numero pari\n";
}
Esercizi – if senza else
Esercizio 1 — “OK” se a>b
Stampa “OK” solo se a > b (C e C++).
Soluzione
// C
if (a > b) { printf("OK\n"); }
// C++
if (a > b) { std::cout << "OK\n"; }
Esercizio 2 — Bonus se importo≥100
Se importo >= 100, aumenta bonus di 10.
Soluzione
// C
if (importo >= 100) { bonus += 10; }
// C++
if (importo >= 100) { bonus += 10; }
Esercizio 3 — Evita divisione per zero
Stampa a/b solo se b != 0.
Soluzione
// C
if (b != 0) { printf("%d\n", a/b); }
// C++
if (b != 0) { std::cout << (a/b) << '\n'; }
Attività
- Leggi una temperatura
T. SeT <= 0stampa “Gelo”. - Leggi una password. Se vuota, stampa “Password mancante”.
Costrutto if … else
Sceglie un ramo se la condizione è vera, l’altro se è falsa; i rami si ricongiungono.

if … else.Esempi
// C
if (n % 3 == 0) {
printf("Divisibile per 3\n");
} else {
printf("Non divisibile per 3\n");
}
// C++
if (x >= 18) {
std::cout << "Maggiorenne\n";
} else {
std::cout << "Minorenne\n";
}
Esercizi – if … else
Esercizio 1 — Positivo/Negativo
Se x >= 0 stampa “positivo”, altrimenti “negativo”.
Soluzione
// C
if (x >= 0) printf("positivo\n"); else printf("negativo\n");
// C++
if (x >= 0) std::cout << "positivo\n"; else std::cout << "negativo\n";
Esercizio 2 — Sufficiente/Insufficiente
Se voto >= 6 stampa “sufficiente”, altrimenti “insufficiente”.
Soluzione
// C
if (voto >= 6) printf("sufficiente\n"); else printf("insufficiente\n");
// C++
if (voto >= 6) std::cout << "sufficiente\n"; else std::cout << "insufficiente\n";
Esercizio 3 — Pari/Dispari
Se n % 2 == 0 stampa “pari”, altrimenti “dispari”.
Soluzione
// C
if (n % 2 == 0) printf("pari\n"); else printf("dispari\n");
// C++
if (n % 2 == 0) std::cout << "pari\n"; else std::cout << "dispari\n";
Attività
- Scrivi un programma che legga un anno e dica se è bisestile con regola base: divisibile per 4 → sì, altrimenti no (versione semplice con
if/else). - Leggi due interi e stampa il maggiore (senza ternario, usa
if/else).
Costrutto if … else if … else
Valuta le condizioni dall’alto verso il basso; esegue il primo ramo vero, altrimenti l’else finale (se presente).

if … else if … else.Esempi
// C
if (voto >= 28) {
printf("Eccellente\n");
} else if (voto >= 24) {
printf("Buono\n");
} else if (voto >= 18) {
printf("Sufficiente\n");
} else {
printf("Insufficiente\n");
}
// C++
if (temp > 30) {
std::cout << "Caldo\n";
} else if (temp >= 10) {
std::cout << "Mite\n";
} else {
std::cout << "Freddo\n";
}
Esercizi – if … else if … else
Esercizio 1 — Classificazione voto
“Eccellente” (≥28), “Buono” (24–27), “Sufficiente” (18–23), “Insufficiente” (<18).
Soluzione
// C
if (voto >= 28) printf("Eccellente\n");
else if (voto >= 24) printf("Buono\n");
else if (voto >= 18) printf("Sufficiente\n");
else printf("Insufficiente\n");
// C++
if (voto >= 28) std::cout << "Eccellente\n";
else if (voto >= 24) std::cout << "Buono\n";
else if (voto >= 18) std::cout << "Sufficiente\n";
else std::cout << "Insufficiente\n";
Esercizio 2 — Fasce d’età
“Bambino” (< 12), “Ragazzo” (12–17), “Adulto” (18–64), “Senior” (≥65).
Soluzione
// C (con puts) o C++
if (eta < 12) puts("Bambino");
else if (eta < 18) puts("Ragazzo");
else if (eta < 65) puts("Adulto");
else puts("Senior");
Esercizio 3 — Voto 0–30 (messaggi)
0–15: “Respinto”, 16–20: “Orale”, 21–30: “Promosso”. Fuori range: “Valore non corretto”.
Soluzione
// C
if (voto < 0 || voto > 30) printf("Valore non corretto\n");
else if (voto >= 21) printf("Promosso\n");
else if (voto >= 16) printf("Orale\n");
else printf("Respinto\n");
Attività
- Scrivi “calcolatrice tasse” a scaglioni (tre soglie con
else if), stampa aliquota applicata. - Leggi tre numeri e stampa “tutti uguali”, “due uguali”, “tutti diversi”.
Espressioni condizionali (operatore ternario)
Sintassi: (condizione) ? ramoIf : ramoElse; — produce un valore utile in assegnazioni.
// Max tra due valori
max = (a > b) ? a : b;
// C++: evitare divisione per zero in stampa
if (b) std::cout << a/b;
else std::cout << "impossibile";
// Nota: if(b) ≡ if(b != 0); if(!b) ≡ if(b == 0)
Esercizi – Ternario
Esercizio 1 — Minimo di due
Soluzione
min = (a < b) ? a : b;
Esercizio 2 — Assoluto
Soluzione
absx = (x >= 0) ? x : -x;
Esercizio 3 — Etichetta pari/dispari
Soluzione
// C++
std::string et = (n % 2 == 0) ? "pari" : "dispari";
Attività di laboratorio
Attività A — Indovina numero (0–9)
Completa i “buchi” (C e C++). Stampa anche il numero generato.
Soluzione
// C
#include <stdio.h>
#include <stdlib.h>
int main(){
int magico, x;
magico = rand() % 10;
printf("Indovina il numero: ");
scanf("%d", &x);
if (x == magico) printf("ESATTO\n"); else printf("ERRATO\n");
printf("Numero generato=%d\n", magico);
return 0;
}
// C++
#include <iostream>
#include <cstdlib>
using namespace std;
int main(){
int magico = rand() % 10, x;
cout << "Indovina il numero: ";
cin >> x;
if (x == magico) cout << "ESATTO\n"; else cout << "ERRATO\n";
cout << "Numero generato=" << magico << endl;
return 0;
}
Attività B — Voto 0–30 (versione robusta)
Leggi un intero 0–30 e stampa messaggi: “Valore non corretto” fuori range; 21–30 “Promosso”; 16–20 “Orale”; ≤15 “Respinto”.
Soluzione C
#include <stdio.h>
int main(){
int voto;
printf("Inserire il voto: ");
scanf("%d", &voto);
if (voto < 0 || voto > 30) printf("Valore non corretto!\n");
else if (voto > 20) printf("Hai passato l'esame e puoi registrarlo!\n");
else if (voto >= 16) printf("Dovrai sostenere l'orale se vuoi passare!\n");
else printf("Mi dispiace... respinto!\n");
return 0;
}
Attività C — Correggi il codice (C)
Rendi corretto e ben indentato il programma.
Soluzione
#include <stdio.h>
int main(){
int x;
printf("Inserisci un numero: ");
scanf("%d", &x);
if (x == 3){
printf("Numero uguale a tre\n");
} else {
printf("Numero diverso da tre\n");
}
return 0;
}
Esercizi di verifica
Vero/Falso
- In un flow chart ci possono essere più blocchi di Stop. …… ☐ V ☐ F
- Il blocco rombo serve per l’I/O. …… ☐ V ☐ F
- Nel costrutto
if … elseviene eseguito sempre e solo uno dei due rami. …… ☐ V ☐ F
Soluzioni V/F
- F (si usa un solo Stop; i rami si ricongiungono)
- F (l’I/O è il parallelogramma; il rombo è la decisione)
- V
Risposta multipla
- Qual è il blocco usato per i test logici?
A) Ovale B) Parallelogramma C) Rettangolo D) Rombo - Nel ternario, quale parte si valuta se la condizione è falsa?
A) condizione B) ramoIf C) ramoElse D) nessuna - In una catena
else if…
A) si eseguono tutti i rami veri
B) si esegue solo il primo vero
C) si esegue sempre l’else
D) non è previsto l’else
Soluzioni (multiple)
- D
- C
- B



