CHI HA PAURA DELL’INTELLIGENZA ARTIFICIALE?
3 – Strutture di Controllo
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).
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");
}
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")
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)
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
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)
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");
}
Scrivere un programma che stampi solo i numeri pari da 1 a N.
N = 20
for i in range(1, N+1):
if i % 2 == 0:
print(i)
N = 20
for i in range(2, N+1, 2): # parte da 2 e salta di 2
print(i)
N = 20
i = 2
while i <= N:
print(i)
i += 2
let numeri = Array.from({length: 20}, (_, i) => i + 1);
for (let n of numeri) {
if (n % 2 === 0) {
console.log(n);
}
}
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.
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.
Commenti
Posta un commento