
Ripasso di inizio anno – appunti per la classe.
Lo pseudocodice è un modo semplice e strutturato di descrivere un algoritmo in lingua naturale (italiano+parole chiave) senza la rigidità della sintassi di un linguaggio di programmazione.
È come scrivere una ricetta: elenchi ingredienti (dati), spieghi i passaggi (istruzioni) e le condizioni (“se… allora…”). Non lo “esegue” il computer, ma lo capiscono persone (docenti, compagni, te stesso domani) e ti guida a tradurre poi tutto in codice (es. Arduino/C++).
Cosa rende utile lo pseudocodice
Chiedere agli studenti di scrivere pseudocodice non è un esercizio di progettazione, ma neanche un modo per semplificare la progettazione del nostro sistema, è un modo che permette di decidere prima che cosa deve accadere, poi si penserà a come scriverlo in un linguaggio di programmazione, nel nostro caso in C/C++ per Arduino.
Possiamo definire lo pseudocodice come ad una lingua ponte: viene compreso sia da chi programma ma anche da chi ancora non programma; detto in altro modo possiamo dire che “mette in fila le idee”, riduce gli errori di distrazione, rende veloce il debug e lascia una traccia chiara e leggibile del progetto.
E’ sicuramente uno strumento inclusivo: abbassa la soglia d’ingresso per chi fatica con la sintassi ed è più abile nel ragionamento.
Nella pratica se so raccontare bene l’algoritmo con verbi chiari (LEGGI, SE, MENTRE, RITORNA), tradurlo in codice diventa un’operazione quasi meccanica.
Avrete intuito che saper scrivere pseudocodice non è solo un’attività di progettazione del software, ma anche un modo per comprendere sistemi complessi che interessano non solo la programmazione ma la nostra vita quotidiana: organizzare lo studio, pianificare un viaggio, andare a scuola, ecc… tutto può essere reso pseudocodice, se vi allenerete a scrivere pseudocodice vi accorgerete di avere maggior percezione di un problema e lo comprenderete meglio.
Sintetizziamo quanto sopra detto con una lista puntata che vi servirà nello studio.
Vantaggi dello pseudocodice
- Chiarezza di idee: separate il cosa fare dal come scriverlo in C/C++.
- Comunicazione: è una lingua comune tra chi sa e chi non sa ancora programmare, oppure una lingua comune tra persone che serve per comprendere un sistema.
- Progettazione top-down: partite dal problema, lo scomponete in sotto-problemi, definite funzioni e responsabilità.
- Riduzione errori: se l’algoritmo è corretto in pseudocodice, gli errori in codice molto probabilmente si ridurranno a dettagli sintattici.
- Debug più rapido: quando il programma non funziona, si verifica prima la logica (lo pseudocodice), poi la sintassi.
- Documentazione: lasciate tracce intelligibili del progetto, quindi ottimo per la relazione di laboratorio.
- Valutazione: mostra il processo e non solo il risultato. Un buon pseudocodice rivela le vostre competenze di analisi, decomposizione, gestione dei casi limite (pensate a quanto diventa utile anche durante la prova scritta dell’esame di maturità… ne parlo più avanti)
- Inclusione: aiuta chi ha poca dimestichezza con la sintassi a concentrarsi sui concetti fondamentali (input, output, decisioni, cicli, dati).
Perché è importante usarlo nel laboratorio di sistemi elettronici
In laboratorio non scriviamo solo righe di codice: progettiamo sistemi con sensori, attuatori, tempi, soglie e stati.
Lo pseudocodice costringe a dichiarare pin, costanti e variabili di stato, a prevedere debounce, time-out, condizioni di errore, cioè chiarisce il flusso:
inizializzazione > letture > decisioni > azioni
e rivolgendomi agli studenti, vedrete che renderà i test al banco di lavoro più rapidi, nel senso che saprete già quali valori provare e che risposta aspettarmi su ad esempio un LED, buzzer o seriale.
Ritengo che tra i vantaggi più importanti nella realizzazione dello pseudocodice ci sia quella di facilitare il lavoro di gruppo:
ognuno implementa una funzione sapendo dove si inserisce nel flusso generale. Risultato: meno tentativi a vuoto, più tempo speso a capire cosa fa davvero il nostro sistema.
Nelle esercitazioni che svilupperete con Arduino ma in generale con qualsiasi scheda a microcontrollore, c’è sempre un “sistema” da far funzionare: sensori, attuatori, logica, tempi, soglie, stati.
Se scriverete prima lo pseudocodice:
- sarete obbligati a dichiarare ingressi (sensori), uscite (attuatori), costanti (soglie, pin), variabili di stato;
- sarà più chiaro il flusso: inizializzazione > ciclo principale > gestione eventi > funzioni di servizio;
- vi aiuterà a ragionare su casi limite (esempio: debounce, errori di misura, time-out);
- diventerete più rapidi nel passaggio alla codifica e nella verifica sperimentale al banco.
In pratica: pseudocodice = “schema funzionale” del vostro impianto in forma testuale.
Pensiamo ora ad un evento che vi coinvolgerà: l’esame di maturità
Sarebbe bello ottimizzare il tempo della prova scritta di sistemi (se questa sarà la materia della seconda prova) ma l’uso dello pseudocodice va bene anche per la progettazione di qualsiasi tipo di prova, anche per strutturare un tema di italiano.
All’orale la commissione potrebbe valutare anche come progettate, quindi non solo se il codice funziona. Saper scrivere su un foglio:
Requisiti > Pseudocodice > Schema I/O > Stralcio di codice > Piano di test
sicuramente comunica metodo, ordine e padronanza… e quindi fate una bella figura 😉
Lo pseudocodice vi aiuta a spiegare le scelte: perché una soglia? perché una macchina a stati? come gestisci i casi limite?
E vi mette al sicuro quando vi chiedono una variazione durante l’orale: se la logica è chiara, sapete subito dove intervenire. È un modo semplice per far vedere che sapete passare dall’idea all’implementazione in modo professionale.
Immaginate poi ad un insegnante che dovrà correggere il vostro compito, avere un buon pseudocodice vi assicuro che lo aiuta 😉
Quindi sintetizzando è molto importante ricordare:
- esporre prima lo pseudocodice mette in luce le vostre capacità progettuali;
- mostra che sapete astrarre dal codice e motivare le scelte;
- facilita domande e risposte: il docente può chiedervi di modificare una parte, ad esempio aggiungere un sensore e voi sapete intervenire nel flusso.
e non ultimo farà pensare: “questa persona è professionale”.
Ora andiamo al nocciolo della questione, vediamo come si fa lo pseudocodice, in realtà vi darò una linea guida, qualche esempio ed esercizi semplici che coinvolgono la vostra vita quotidiana, imparerete in brevissimo tempo.
Quello che scrivo da questo momento in poi dovrebbe essere inserito nelle prime pagine del vostro quaderno, dove andrete ad inserire i riferimenti delle schede che utilizziamo, della sintassi di programmazione ecc…
Nota i miei studenti (da recuperare)
Ricordo che ogni attività di progettazione che farete e consegnerete dovrà includere:
-
- diagramma di flusso
- pseudocodice
- sketch Arduino commentato in ogni parte
- breve relazione di funzionamento
- eventuale:
- schema elettrico
- schema topografico di collegamenti
- tabella misure
- grafici
- Sitografia
- Bibliografia
A tal proposito vi mostrerò un format di foglio di lavoro che potrete poi modificare secondo necessità.
Ogni progetto deve essere esposto anche oralmente.
In alcune occasioni vi sarà azione di debate, ovvero un confronto tra gruppi su specifici problemi tecnici da risolvere.
Regole di base
- Una istruzione per riga; rientra (indenta) i blocchi.
- Parole chiave in MAIUSCOLO: SE, ALTRIMENTI, MENTRE, PER, FUNZIONE, RITORNA, ATTENDI.
- Date nomi chiari a variabili e costanti: sogliaLuce, tempoGiallo, pinLedRosso, cioè usiamo la convenzione camelcase che combina più parole in un’unica stringa, scrivendo la prima parola in minuscolo e le parole successive con la loro iniziale maiuscola ad esempio: nomeUtente.
- In testa: Pin, Costanti, Variabili. Poi: Inizializzazione, Loop, Funzioni.
- Commentate perché fate qualcosa, non scrivete l’ovvio: “sommo 1 al contatore perché ogni impulso accende il led…”
Di seguito un template da copiare ed incollare:
/* Requisito sintetico: cosa deve fare il sistema */
COSTANTI:
pinLed = ...
pinBtn = ...
soglia = ...
VARIABILI:
stato = ...
conteggio = ...
INIZIALIZZA:
configura pin
azzera conteggi
LOOP PRINCIPALE:
leggi sensori
SE (condizione) ALLORA:
azione
ALTRIMENTI SE (...) ALLORA:
altra azione
ALTRIMENTI:
default
aggiorna attuatori
ATTENDI t ms
FUNZIONI:
FUNZIONE nome(parametri):
passi...
RITORNA valore
La checklist da seguire ASSOLUTAMENTE è questa:
- Input/Output identificati? (pin, range, unità)
- Costanti definite? (soglie, tempi, limiti)
- Stati chiari? (idle, misura, allarme, reset…)
- Casi limite previsti? (debounce, isteresi, time-out, valori anomali)
- Test plan minimo? (quali valori proverai e cosa ti aspetti di vedere)
Ora facciamo qualche esempio che coinvolge la nostra vita
01 – Sveglia e alzarsi
Diagramma di flusso Mermaid
graph TD
A[Inizio] --> B[Suona sveglia]
B --> C{Ancora sonno?}
C -- Si --> D[Attendi 5 minuti]
D --> B
C -- No --> E[Alzati dal letto]
E --> Z[Fine]
Diagramma di flusso

Pseudocodice
RIPETI
SUONA_SVEGLIA()
LEGGI risposta // "si" se hai ancora sonno, "no" altrimenti
SE risposta == "si" ALLORA
ATTENDI 5 minuti
ALTRIMENTI
ESCI DAL CICLO
FINE SE
FINCHÉ VERO
ALZATI_DAL_LETTO()
SCRIVI "Pronto per iniziare la giornata"
02 – Colazione semplice
Si pone che la scelta sia tra due tipologie di colazione, latte o te, in alternativa bisogna bere acqua.
Diagramma di flusso Mermaid
graph TD
A[Inizio] --> B[Apri cucina]
B --> C{Hai fame?}
C -- Si --> D[Scegli bevanda]
D --> E{Bevanda scelta latte?}
E -- Si --> F[Prepara latte]
E -- No --> G[Prepara te]
F --> H[Mangia colazione]
G --> H
C -- No --> I[Bevi acqua]
H --> Z[Fine]
I --> Z
Diagramma di flusso

Pseudocodice
APRI_CUCINA()
LEGGI fame // "si" oppure "no"
SE fame == "si" ALLORA
SCRIVI "Scegli una bevanda"
LEGGI bevanda // "latte" oppure "te"
SE bevanda == "latte" ALLORA
PREPARA_LATTE()
ALTRIMENTI
PREPARA_TE()
FINE SE
MANGIA_COLAZIONE()
ALTRIMENTI
BEVI_ACQUA()
FINE SE
SCRIVI "Colazione terminata"
03 – Prepara lo zaino
Diagramma di flusso Mermaid
APRI_DIARIO() LEGGI listaLibriRichiesti IMPOSTA zaino = lista_vuota PER ciascun libro IN listaLibriRichiesti: AGGIUNGI libro A zaino FINE PER CONTROLLA_ASTUCCIO() LEGGI mancaQualcosa // "si" oppure "no" MENTRE mancaQualcosa == "si" FAI LEGGI cosaManca AGGIUNGI cosaManca A zaino LEGGI mancaQualcosa // ricontrolla FINE MENTRE SCRIVI "Zaino pronto"
Diagramma di flusso

Pseudocodice
APRI_DIARIO() LEGGI listaLibriRichiesti IMPOSTA zaino = lista_vuota PER ciascun libro IN listaLibriRichiesti: AGGIUNGI libro A zaino FINE PER CONTROLLA_ASTUCCIO() LEGGI mancaQualcosa // "si" oppure "no" MENTRE mancaQualcosa == "si" FAI LEGGI cosaManca AGGIUNGI cosaManca A zaino LEGGI mancaQualcosa // ricontrolla FINE MENTRE SCRIVI "Zaino pronto"
04 – Uscire di casa in base al meteo
Si pone che, in funzione del tempo, la scelta sia tra due oggetti alternativi: ombrello o cappellino.
Diagramma di flusso Mermaid
graph TD
A[Inizio] --> B[Leggi meteo]
B --> C{Pioggia?}
C -- Si --> D[Prendi ombrello]
C -- No --> E[Prendi cappellino]
D --> F[Esci di casa]
E --> F
F --> Z[Fine]
Diagramma di flusso

Pseudocodice
LEGGI meteo // "pioggia" oppure "sereno" SE meteo == "pioggia" ALLORA PRENDI_OMBRELLO() ALTRIMENTI PRENDI_CAPPELLINO() FINE SE ESCI_DI_CASA() SCRIVI "Buona giornata"
05 – Zaino intelligente (liste + loop)
Diagramma di flusso Mermaid
graph TD
A[Inizio] --> B[Leggi orarioDelGiorno come elenco di materie]
B --> C[Inizializza libriNecessari come lista vuota]
C --> D[Imposta i = 0]
D --> E[Calcola n uguale a numero di materie]
E --> F{i minore di n?}
F -- Si --> G[Prendi materia in posizione i]
G --> H[Aggiungi materia a libriNecessari]
H --> I[Incrementa i di 1]
I --> F
F -- No --> L[Stampa Metti nello zaino elenco libriNecessari]
L --> Z[Fine]
Diagramma di flusso

Pseudocodice
LEGGI orarioDelGiorno // lista, es: ["Mate","Storia","Inglese","Sistemi"]
IMPOSTA libriNecessari a lista vuota
PER ogni materia in orarioDelGiorno:
AGGIUNGI materia a libriNecessari
SCRIVI "Metti nello zaino: " + libriNecessari
… e magari fate anche la versione per il quaderno e i materiali da portare con voi.
06 – Pomodoro di studio (ciclo + timer)
Visto che adotto questo metodo nella mia vita lavorativa, non potevo non propinare lo pseudocodice della tecnica del pomodoro.
Studiare a blocchi da 25’ con pause da 5’, per 4 cicli.
Diagramma di flusso Mermaid
graph TD
A[Inizio] --> B[Imposta pomodoro = 1]
B --> C{pomodoro <= 4} C -->|Si| D[Stampa Studia 25 minuti Pomodoro pomodoro]
D --> E[Attendi 25 minuti]
E --> F{pomodoro < 4} F -->|Si| G[Stampa Pausa 5 minuti]
G --> H[Attendi 5 minuti]
H --> J[Incrementa pomodoro di 1]
F -->|No| I[Salta pausa]
I --> J
J --> C
C -->|No| K[Stampa Sessione completata]
K --> Z[Fine]
Diagramma di flusso

Pseudocodice
PER pomodoro da 1 a 4:
SCRIVI "Studia 25 minuti (Pomodoro " + pomodoro + ")"
ATTENDI 25 minuti
SE (pomodoro < 4) ALLORA:
SCRIVI "Pausa 5 minuti"
ATTENDI 5 minuti
SCRIVI "Sessione completata!"
Per i miei studenti
Lista degli esercizi che dovrete fare come compito (vi dirò quando):
-
- Lavarsi i denti (tempo minimo per lavaggio 2 min).
- Merenda e soldi (se soldi maggiore di 2€ compro panino, altrimenti porto merenda da casa).
- Smartphone e batteria (se livello della batteria è inferiore al 20% ricaricare).
- Spegnere la luce uscendo di casa (tenere conto anche della chiusura con chiavi della porta di casa).
- Priorità compiti (ordinamento concettuale, ordinare le attività per scadenza e importanza).
- Vestiti in base al meteo (vestirsi in base al meteo (IF multiplo)).
- Abitudine acqua (promemoria ciclico, bere 1 bicchiere ogni ora tra le 9 e le 13).
- Media dei voti e situazione (input + aritmetica. Calcolare media e capire se sei sopra la soglia 6).
Seguiranno altri esercizi.
Nella prossima lezione vedremo come passare dallo pseudocodice ad uno sketch Arduino.
Buon pseudocodice a tutti 😉












