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à:
Un esempio concreto
Algoritmo per preparare il tè:
- Riempi il bollitore d'acqua
- Accendi il bollitore
- Attendi finché l'acqua bolle — ← struttura iterativa (ciclo)
- Metti la bustina nella tazza e versa l'acqua
- Se vuoi lo zucchero, aggiungilo — ← struttura condizionale
- 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.
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:
contenuto: 16 → 17 → 18
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 |
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.
sensore…
viene eseguito
stampante…
Qualche esempio concreto:
- Calcolatrice: input = due numeri e un'operazione → output = risultato
- Convertitore temperature: input = gradi Celsius → output = gradi Fahrenheit
- Sistema di login: input = username e password → output = accesso consentito / negato
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.
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.
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.
Esempio
Algoritmo per controllare l'età di un utente:
- Dichiara la variabile età di tipo Intero
- Leggi età — (parallelogramma)
- Se età ≥ 18 → scrivi “Accesso consentito” — (rombo + ramo Sì)
- Altrimenti → scrivi “Accesso negato” — (ramo No)
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.
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” |
if/else per la selezione, while e for per l'iterazione. La guida successiva ti spiega riga per riga come leggerlo e scriverlo.