Siamo ai primi di ottobre e in seconda, nelle classi con informatica (al liceo scientifico opzione scienze applicate sono 2 ore a settimana, ma lo stesso argomento compare anche in altri indirizzi), si sta partendo con gli algoritmi: foglio elettronico, diagrammi a blocchi e poi il primo linguaggio. La verifica, scritta o pratica, arriva fra cinque-otto settimane. Il punto in cui gli studenti si bloccano non è il diagramma in sé, ma il passaggio successivo: dal diagramma al codice, con i tipi di dato e il casting che lo accompagnano. Questo post è per arrivarci già allenati.
Se il foglio elettronico è l’altra metà del programma, ne parlo in foglio elettronico e algoritmi in seconda. Qui resto sul percorso diagramma, pseudocodice, Python.
Che cos’è un algoritmo, in pratica
Un algoritmo è una sequenza finita di passi, non ambigui, che trasforma dei dati in ingresso in un risultato. Il diagramma di flusso lo disegna; lo pseudocodice lo scrive in italiano strutturato; il codice lo scrive in un linguaggio che il computer esegue. Sono tre scritture dello stesso ragionamento, e l’abilità richiesta è passare da una all’altra senza perdere pezzi.
I blocchi del diagramma
Ogni forma ha un significato preciso e la verifica lo chiede spesso:
| Forma | Significato | Esempio |
|---|---|---|
| Ovale | Inizio / Fine | INIZIO, FINE |
| Parallelogramma | Input / Output | leggi a, scrivi risultato |
| Rettangolo | Processo (calcolo, assegnazione) | somma = somma + i |
| Rombo | Decisione (due uscite: Sì / No) | a > b ? |
Le frecce indicano l’ordine. Un rombo ha sempre due uscite, un rettangolo una sola. Tre strutture bastano per quasi tutto:
- sequenza: i blocchi uno dopo l’altro;
- selezione: un rombo e due rami (se… allora… altrimenti);
- iterazione: un rombo da cui una freccia torna indietro, a formare un ciclo.
Dal diagramma al codice: la procedura
- Disegna il diagramma, oppure scrivi i passi in elenco numerato.
- Riscrivilo in pseudocodice, una riga per blocco.
- Traduci riga per riga in Python: ogni parallelogramma d’ingresso diventa
input(), ogni parallelogramma di uscitaprint(), ogni rettangolo un’assegnazione, ogni rombo unifo unwhile. - Prova a mano il codice con due o tre valori (la “tabella di traccia”) prima di eseguirlo.
Un diagramma a parole si può scrivere così, con le frecce in ASCII, ed è un formato che puoi usare anche per ripassare.
Esercizio 1: il massimo fra due numeri
Diagramma:
(INIZIO)
|
v
/ leggi a, b /
|
v
< a > b ? > --Sì--> [ max = a ] --+
| |
No |
| |
v |
[ max = b ] ----------------------+
|
v
/ scrivi max /
|
v
(FINE)
Pseudocodice:
INIZIO
leggi a, b
SE a > b
ALLORA max = a
ALTRIMENTI max = b
scrivi max
FINE
Python:
a = int(input("Primo numero: "))
b = int(input("Secondo numero: "))
if a > b:
massimo = a
else:
massimo = b
print("Il massimo è", massimo)
Traccia a mano con a = 7, b = 12: la condizione 7 > 12 è falsa, quindi si esegue il ramo else, massimo vale 12 e viene stampato 12. Con a = 9, b = 9 la condizione è falsa e massimo vale 9, che è corretto: i due numeri sono uguali.
Sul biennio di informatica non c’è ancora una simulazione dedicata sul sito; per allenarti sul ragionamento logico-matematico intanto puoi usare le simulazioni per il liceo.
Esercizio 2: la somma dei primi n numeri con un ciclo
Voglio la somma dato . Serve una variabile che accumula (somma) e un contatore (i) che scorre da 1 a .
Diagramma a elenco numerato:
- INIZIO
- leggi n (parallelogramma)
- somma = 0, i = 1 (rettangolo)
- rombo: i <= n ?
- Sì → passo 5
- No → passo 7
- somma = somma + i (rettangolo)
- i = i + 1, poi torna al passo 4 (la freccia all’indietro è il ciclo)
- scrivi somma (parallelogramma)
- FINE
Pseudocodice:
INIZIO
leggi n
somma = 0
i = 1
FINCHÉ i <= n
somma = somma + i
i = i + 1
scrivi somma
FINE
Python:
n = int(input("Fino a quale numero? "))
somma = 0
i = 1
while i <= n:
somma = somma + i
i = i + 1
print("La somma è", somma)
Tabella di traccia con :
| passo | i | somma prima | somma dopo |
|---|---|---|---|
| 1 | 1 | 0 | 1 |
| 2 | 2 | 1 | 3 |
| 3 | 3 | 3 | 6 |
| 4 | 4 | 6 | 10 |
Poi i diventa 5, la condizione 5 <= 4 è falsa e il ciclo termina: il programma stampa 10. Come controllo, la formula di Gauss dà
e coincide. Due cose da non dimenticare: l’inizializzazione (se non metti somma = 0 il programma non parte, perché somma non esiste) e l’aggiornamento del contatore (se togli i = i + 1 il ciclo non finisce mai).
Esercizio 3: numero pari o dispari
Un numero intero è pari se il resto della divisione per 2 è zero. In Python il resto si ottiene con l’operatore %.
Diagramma a elenco numerato:
- INIZIO
- leggi n
- rombo: il resto di n diviso 2 è uguale a 0 ?
- Sì → scrivi “pari”
- No → scrivi “dispari”
- FINE (i due rami si ricongiungono qui)
Pseudocodice:
INIZIO
leggi n
SE resto(n, 2) = 0
ALLORA scrivi "pari"
ALTRIMENTI scrivi "dispari"
FINE
Python:
n = int(input("Inserisci un numero intero: "))
if n % 2 == 0:
print(n, "è pari")
else:
print(n, "è dispari")
Prova: con n = 14, 14 % 2 vale 0, quindi stampa “14 è pari”. Con n = 7, 7 % 2 vale 1, quindi “7 è dispari”. Con n = 0 stampa “pari”, ed è giusto: lo zero è pari.
Tipi di dato e casting
È qui che nasce il primo errore vero. La funzione input() restituisce sempre una stringa, anche se l’utente scrive un numero. Questo codice sembra giusto e non lo è:
a = input("Primo numero: ")
b = input("Secondo numero: ")
print(a + b)
Con 3 e 4 stampa 34, non 7: il + fra due stringhe le concatena. Per fare i conti serve il casting, cioè la conversione di tipo:
a = int(input("Primo numero: "))
b = int(input("Secondo numero: "))
print(a + b)
I tipi che incontri in questa fase sono quattro:
| Tipo | Che cos’è | Esempio | Conversione |
|---|---|---|---|
int | intero | 7 | int("7") |
float | numero con virgola | 3.5 | float("3.5") |
str | stringa di testo | "ciao" | str(7) |
bool | vero o falso | True | bool(0) è False |
Due dettagli che si pagano in verifica. In Python il separatore decimale è il punto, non la virgola: float("3,5") dà errore. E la divisione / restituisce sempre un float: 7 / 2 fa 3.5, mentre 7 // 2 fa 3 (divisione intera) e 7 % 2 fa 1 (resto). Se leggi un’altezza o un prezzo, usa float(input(...)); se leggi un conteggio, int(input(...)).
Gli errori tipici
- Indentazione. In Python il rientro non è estetica: definisce quali righe stanno dentro l’
ifo ilwhile. Sesomma = somma + iesce dal rientro, viene eseguita una volta sola, dopo il ciclo. Il codice gira e dà un risultato sbagliato, che è l’errore più difficile da vedere. =al posto di==. Il singolo=assegna, il doppio==confronta.if n % 2 = 0:dà errore di sintassi; il confronto giusto èif n % 2 == 0:.- Dimenticare i due punti dopo
if,else,while. - Dimenticare il casting. Senza
int()il programma non si ferma, ma confronta stringhe:"9" > "12"è vero, perché il confronto è alfabetico. Il massimo fra 9 e 12 verrebbe 9. - Ciclo infinito: manca l’aggiornamento del contatore, oppure la condizione non diventa mai falsa.
- Variabile non inizializzata: usare
sommaprima di aver scrittosomma = 0.
Un buon metodo per la verifica scritta: dopo aver scritto il codice, esegui a mano con un valore piccolo e scrivi la tabella di traccia. Spesso il professore la richiede, e comunque è il modo più rapido per scoprire dove il codice non fa ciò che pensavi.
Come allenarti nelle prossime settimane
- Per ogni esercizio fai sempre i tre passaggi: diagramma, pseudocodice, Python. Saltare lo pseudocodice sembra un risparmio e invece è il passaggio che mette in ordine le idee.
- Riscrivi i tre esercizi di sopra senza guardarli, poi varia: il minimo fra due numeri, la somma dei numeri pari fino a , il massimo fra tre numeri.
- Per ciascun programma prova almeno un caso limite: zero, numeri uguali, un solo elemento.
- Quando il codice funziona, cambia una riga di proposito e prevedi che cosa succede. Capire un errore prima di vederlo è esattamente ciò che serve in verifica.
Per il passo successivo del programma, cioè scrivere in Python con più autonomia, trovi programmazione Python da zero. Quando arrivano le funzioni c’è passaggio dei parametri per valore e per riferimento, e più avanti bubble, selection e insertion sort, che sono cicli annidati scritti con lo stesso metodo.
Se in classe state già andando più veloci, o se il passaggio dal diagramma al codice proprio non vi torna, ne parliamo volentieri: la pagina di informatica racconta come lavoro, e dai contatti puoi prenotare una diagnosi gratuita per capire da dove conviene partire.