Quando risolviamo un problema mediante un algoritmo, dobbiamo combinare le varie istruzioni utilizzando delle particolari strutture.
Ad esempio, l'algoritmo per determinare se un numero intero n è primo:
"Divido
ripetutamente il numero per tutti i numeri da 1 fino al numero n.
Se il resto di tali divisioni è 0 per 2 volte
allora il numero è primo."
Si osserva quindi che questo algoritmo ripete delle istruzioni e contiene un condizionale (se...allora).
Per scrivere programmi che risolvono problemi significativi occorre organizzare le istruzioni in tre strutture:
- la sequenza: le istruzioni vengono eseguite tutte nella sequenza in cui sono state scritte, dalla prima all'ultima.
- il condizionale (decision making): permette di eseguire o meno delle istruzioni a seconda che sia soddisfatta o meno una certa condizione (booleana); questa struttura permette quindi una 'ramificazione' del flusso delle istruzioni, facendo in modo che il programma esegua una sezione di codice o un'altra sezione di codice.
- il ciclo (loop): permette di eseguire una porzione di codice più volte, fino a che una condizione risulta soddisfatta.
Ogni passaggio attraverso il ciclo è detto iterazione.
E' stato dimostrato il seguente teorema fondamentale:
"Ogni algoritmo può essere espresso con le sole tre strutture di controllo fondamentali: sequenza di istruzioni, selezione e iterazione"
(teorema di Jacopini - Bohm, 1966)