← Programmazione
C++ · Prerequisiti

Fondamenti della Programmazione

Algoritmi, variabili, costanti, condizioni e cicli — i concetti essenziali da capire prima di scrivere la prima riga di codice.

🎓 3° anno ITIS/SIA 📋 Fase introduttiva ⏰ ~30 min

Che cos'è un algoritmo?

Un algoritmo è una sequenza finita di istruzioni ordinate e non ambigue che descrive come risolvere un problema. Il nome deriva dal matematico persiano Al-Khwarizmi (IX sec.), ma il concetto è quotidiano: ogni volta che segui una ricetta, monti un mobile con le istruzioni o usi il navigatore, stai eseguendo un algoritmo.

Un algoritmo ben definito rispetta quattro proprietà:

Finitezza
Deve terminare dopo un numero finito di passi. Un algoritmo che non finisce mai non è utile.
🎯
Non ambiguità
Ogni istruzione deve essere chiara e precisa, senza spazio all'interpretazione.
📄
Generalità
Deve funzionare per tutte le istanze valide del problema, non solo per un caso specifico.
Eseguibilità
Ogni passo deve essere concretamente realizzabile con le risorse disponibili.
💡 Algoritmo ≠ Programma Un algoritmo è la logica della soluzione, descritta in linguaggio naturale o con un diagramma. Un programma è quella stessa logica tradotta in un linguaggio che il computer capisce (C++, Python, Java…). Lo stesso algoritmo può essere implementato in linguaggi diversi senza cambiare di una virgola.

Un esempio concreto

Algoritmo per preparare il tè:

  1. Riempi il bollitore d'acqua
  2. Accendi il bollitore
  3. Attendi finché l'acqua bolle — ← struttura iterativa (ciclo)
  4. Metti la bustina nella tazza e versa l'acqua
  5. Se vuoi lo zucchero, aggiungilo — ← struttura condizionale
  6. Togli la bustina dopo 3 minuti

Questo algoritmo è finito, non ambiguo, generale ed eseguibile. I due concetti evidenziati — ciclo e condizione — sono le strutture di controllo fondamentali di qualsiasi programma: le vedremo tra poco.

Dal problema al programma

Scrivere un programma non inizia dal codice. Inizia dal problema. Il percorso corretto è sempre lo stesso: capire il problema, progettare la soluzione (algoritmo), poi tradurla in codice.

Problema
Cosa devo risolvere?
📄
Algoritmo
Come lo risolvo?
💻
Programma
Scrivo in C++
▶️
Esecuzione
Il computer lo esegue
⚠ L'errore più comune Iniziare a scrivere codice prima di aver capito bene il problema porta quasi sempre a riscrivere tutto da capo. Pochi minuti con carta e penna per disegnare l'algoritmo risparmiano ore di debug.

Un programma è un algoritmo scritto in un linguaggio formale che la macchina sa interpretare. Il linguaggio ha regole rigide (sintassi): una virgola nel posto sbagliato, o una lettera maiuscola dove ci si aspetta la minuscola, può bloccare la compilazione. La precisione è tutto.

Variabili e costanti

Un programma lavora su dati. Per memorizzare un dato durante l'esecuzione si usano le variabili e le costanti. La differenza fondamentale sta nella possibilità di modifica:

Variabile
Come una lavagna: ha un'etichetta (il nome) e puoi scrivere, cancellare e riscrivere il contenuto quante volte vuoi durante l'esecuzione.
etichetta: "età"
contenuto: 16 → 17 → 18
🔒
Costante
Come un cartello stampato: ha un nome e un valore, ma il valore è fissato una volta per tutte e non può cambiare durante l'esecuzione.
etichetta: "IVA"
contenuto: 22 (fisso)

Il tipo di una variabile

Ogni variabile ha un tipo, che indica quale categoria di dati può contenere. Il tipo è importante: il computer memorizza un numero intero in modo diverso da un decimale o da un testo, e alloca per ciascuno una quantità di memoria diversa.

Tipo Cosa contiene Esempi In C++
Intero Numeri senza parte decimale 0, 42, −7, 1000 int
Decimale Numeri con parte frazionaria 3.14, −0.5, 9.81 double
Carattere Un singolo carattere 'A', 'z', '5', '!' char
Testo Sequenza di caratteri "ciao", "Mario Rossi" string
Booleano Solo vero o falso vero, falso bool
📌 Perché il tipo sbagliato è un problema Salvare 3.14 in una variabile intera produce 3 — la parte decimale viene persa senza avvisi. Scegliere il tipo giusto è parte dell'algoritmo, non un dettaglio tecnico.

Regole per i nomi

Il nome di una variabile (detto identificatore) deve iniziare con una lettera o underscore (_), non deve contenere spazi e non deve coincidere con una parola riservata del linguaggio (int, if, while…). Per convenzione, in C++ si usa il formato camelCase: etaUtente, prezzoTotale, numeroTentativi.

Input e Output

Ogni programma utile comunica con il mondo esterno. I dati che entrano nel programma si chiamano input; i risultati prodotti dal programma si chiamano output. Il programma è il motore che trasforma l'uno nell'altro.

🔢
Input
Tastiera, file,
sensore…
Elaborazione
L'algoritmo
viene eseguito
📺
Output
Schermo, file,
stampante…

Qualche esempio concreto:

📌 Input e Output in Flowgorithm e in C++ Nei diagrammi di flusso l'input e l'output si rappresentano con un parallelogramma. In C++, l'output si scrive con cout e l'input si legge con cin — li vedrai in dettaglio nella prossima guida.

I diagrammi di flusso

Un diagramma di flusso è una rappresentazione grafica di un algoritmo: ogni passo viene disegnato con un simbolo preciso, collegato al successivo da frecce che indicano la direzione di esecuzione. È il modo più immediato per ragionare su un algoritmo prima di scrivere codice.

Flowgorithm è lo strumento che useremo: permette di disegnare diagrammi di flusso eseguibili, trascinando i simboli e collegandoli. Una volta completato il diagramma, Flowgorithm lo esegue passo per passo mostrando il valore delle variabili ad ogni istruzione — e può generare automaticamente il codice C++ corrispondente.

📌 Flowgorithm nei laboratori Il programma è già installato sui PC di laboratorio. Avvialo, trascina i simboli per costruire il tuo algoritmo, premi Esegui per vederlo girare passo per passo. Nel menù di esportazione seleziona “C++” per visualizzare il codice generato.

I simboli standard

Ogni simbolo ha un significato univoco, codificato dagli standard ISO per i diagrammi di flusso. Impararli tutti ora ti permette di leggere e disegnare qualsiasi algoritmo.

Connettore — Freccia
Indica la direzione del flusso tra un simbolo e il successivo. Si legge dall'alto verso il basso; i rami del ciclo risalgono verso il rombo. Regola fondamentale: ogni blocco ha al più una freccia in ingresso e una in uscita — il rombo (decisione) è l'unica eccezione, con una freccia in ingresso e due in uscita (Sì e No).
Terminatore — Ovale
Segna il punto di inizio e di fine dell'algoritmo. Ogni diagramma ne ha esattamente due: uno in cima e uno in fondo. Senza di essi, il diagramma è incompleto.
Processo — Rettangolo
Rappresenta una singola istruzione o un calcolo. Dentro al rettangolo si scrive l'operazione da eseguire.
Esempi:   media = somma / n  ·  conta = conta + 1  ·  risultato = a * b
Input / Output — Parallelogramma
Rappresenta la lettura di un dato (input da tastiera) o la scrittura di un risultato (output a schermo). Lo stesso simbolo copre entrambe le direzioni: il testo dentro indica quale delle due.
Input:  Leggi età  ·  Output:  Scrivi “Accesso consentito”
Decisione — Rombo
Rappresenta una condizione con risposta vero o falso. È l'unica eccezione alla regola generale: ha una freccia in ingresso e due frecce in uscita, etichettate “Sì” (condizione vera) e “No” (condizione falsa). I due rami convergono più avanti nel diagramma.
Esempi:   età ≥ 18?  ·  somma > 100?  ·  conta < 10?
Dichiarazione variabile — specifico di Flowgorithm
In Flowgorithm la dichiarazione di una variabile ha un blocco dedicato, visivamente distinto dal Processo. Negli standard ISO si userebbe un normale rettangolo — Flowgorithm lo separa per chiarezza didattica, rendendo esplicito il momento in cui una variabile viene creata e il suo tipo scelto.
Dichiara età: Intero  ·  Dichiara nome: Stringa  ·  Dichiara media: Reale
💡 Con questi cinque simboli puoi rappresentare qualsiasi algoritmo Nelle due sezioni successive li vedrai combinati nelle due strutture fondamentali: la selezione (rombo con due rami) e l'iterazione (rombo con un ramo che torna indietro).

Selezione

Un programma non esegue sempre le stesse istruzioni: a volte deve scegliere quale percorso seguire in base a una condizione. Questo meccanismo si chiama struttura di selezione. Nel diagramma di flusso la riconosci dal rombo con due uscite etichettate Sì e No.

Condizione vera o falsa? No Blocco A Blocco B Prosegue…

Esempio

Algoritmo per controllare l'età di un utente:

  1. Dichiara la variabile età di tipo Intero
  2. Leggi età — (parallelogramma)
  3. Se età ≥ 18 → scrivi “Accesso consentito” — (rombo + ramo Sì)
  4. Altrimenti → scrivi “Accesso negato” — (ramo No)
💡 Se… altrimenti se… altrimenti… Puoi concatenare più condizioni: se voto ≥ 90 → “Ottimo”; altrimenti se voto ≥ 60 → “Sufficiente”; altrimenti → “Insufficiente”. Nel diagramma si traduce in rombi in cascata; in C++ in if, else if, else.

Iterazione

Spesso un programma deve ripetere un blocco di istruzioni più volte. Copiare le stesse istruzioni non ha senso: si usano i cicli (strutture iterative). Nel diagramma di flusso riconosci un ciclo dal rombo con una freccia di ritorno che risale verso di esso.

Condizione vera? No Istruzioni del ciclo Prosegue…

Tre tipi di ciclo

Tipo Quando usarlo Esempio in linguaggio naturale
while Non sai quante volte ripetere — dipende da una condizione “Continua a mescolare finché non si addensa”
for Sai esattamente quante volte ripetere “Ripeti l'esercizio 10 volte”
do–while Devi eseguire almeno una volta, poi verificare “Chiedi la password; se sbagliata, richiedi”
⚠ Il ciclo infinito Se la condizione non diventa mai falsa, il programma rimane bloccato e non termina mai. È uno degli errori logici più comuni: assicurati sempre che le istruzioni dentro il ciclo modifichino qualcosa che avvicina la condizione al “falso”.
💡 Dal diagramma al C++ Flowgorithm può generare il codice C++ del tuo diagramma. Il codice include alcune librerie fisse che non hai richiesto — è il template dello strumento. Quello che conta è riconoscere la struttura: if/else per la selezione, while e for per l'iterazione. La guida successiva ti spiega riga per riga come leggerlo e scriverlo.