3 – Strutture di Controllo
1. Introduzione generale
Le strutture di controllo costituiscono il cuore di ogni linguaggio di programmazione. Esse permettono di modificare il normale flusso sequenziale di esecuzione delle istruzioni, introducendo la possibilità di:
-
prendere decisioni (branching);
-
ripetere istruzioni (looping);
-
selezionare alternative in maniera efficiente.
Dal punto di vista teorico, tali strutture sono collegate alla logica booleana e all’algebra dei predicati, che rappresentano il fondamento matematico della programmazione. Secondo il teorema di Böhm-Jacopini (1966), qualsiasi algoritmo può essere implementato utilizzando solo tre strutture fondamentali:
-
sequenza,
-
selezione (if/else, switch),
-
iterazione (for, while).
2. Strutture condizionali
2.1 If/Else
Il costrutto if permette di eseguire un blocco di codice solo se una condizione è vera. La forma generale è:
📘 Esempio (Python)
x = 7
if x % 2 == 0:
print("Numero pari")
else:
print("Numero dispari")
📘 Esempio (JavaScript)
let x = 7;
if (x % 2 === 0) {
console.log("Numero pari");
} else {
console.log("Numero dispari");
}
2.2 Operatori logici
Gli operatori logici consentono di combinare condizioni:
-
AND (&& o
and) → vero solo se entrambe le condizioni sono vere. -
OR (|| o
or) → vero se almeno una condizione è vera. -
NOT (! o
not) → inverte il valore della condizione.
📘 Esempio combinato
eta = 20
cittadinanza = "italiana"
if eta >= 18 and cittadinanza == "italiana":
print("Puoi votare")
3. Strutture iterative
3.1 Ciclo For
Il ciclo for è utile quando si conosce a priori il numero di iterazioni.
📘 Esempio
for i in range(5): # ripete da 0 a 4
print("Iterazione:", i)
3.2 Ciclo While
Il ciclo while viene usato quando non si conosce il numero di iterazioni a priori, ma si ripete finché una condizione è vera.
📘 Esempio
n = 0
while n < 5:
print("n vale:", n)
n += 1
3.3 Ciclo For…of (o foreach)
Nei linguaggi moderni (JavaScript, Python, Java) esiste un costrutto per iterare direttamente sugli elementi di una collezione.
📘 Esempio (JavaScript)
let numeri = [2, 4, 6, 8];
for (let n of numeri) {
console.log(n);
}
📘 Esempio (Python – foreach implicito)
numeri = [2, 4, 6, 8]
for n in numeri:
print(n)
4. Switch/Case
Lo switch è un costrutto che semplifica la gestione di più condizioni alternative. È concettualmente simile a una catena di if/elif, ma più leggibile.
📘 Esempio (JavaScript)
let giorno = 3;
switch (giorno) {
case 1:
console.log("Lunedì");
break;
case 2:
console.log("Martedì");
break;
case 3:
console.log("Mercoledì");
break;
default:
console.log("Altro giorno");
}
5. Esercizio applicativo – Stampare i numeri pari
Traccia
Scrivere un programma che stampi solo i numeri pari da 1 a N.
Soluzione 1 – Ciclo For con condizione
N = 20
for i in range(1, N+1):
if i % 2 == 0:
print(i)
Soluzione 2 – Incremento diretto (più efficiente)
N = 20
for i in range(2, N+1, 2): # parte da 2 e salta di 2
print(i)
Soluzione 3 – While loop
N = 20
i = 2
while i <= N:
print(i)
i += 2
Soluzione 4 – For…of con filtro (JavaScript)
let numeri = Array.from({length: 20}, (_, i) => i + 1);
for (let n of numeri) {
if (n % 2 === 0) {
console.log(n);
}
}
6. Osservazioni critiche
-
Efficienza: la seconda soluzione evita condizioni logiche, riducendo il numero di confronti.
-
Generalizzazione: lo stesso approccio può essere usato per stampare multipli di 3, numeri primi, ecc.
-
Didattica: l’esercizio è ideale per introdurre il concetto di modularità e ottimizzazione.
7. Conclusione
Il modulo sulle strutture di controllo non è soltanto un momento introduttivo, ma segna il passaggio dall’uso “statico” del linguaggio a un utilizzo realmente algoritmico. Con if, for, while e switch si entra nella dimensione del calcolo automatico in senso stretto: decisioni e ripetizioni, gli stessi meccanismi logici che caratterizzano l’agire umano, trovano una formalizzazione esatta all’interno del linguaggio di programmazione.

Nessun commento:
Posta un commento