Problema

Un problema può essere definito come un quesito a cui bisogna dare una risposta, oppure, in altri termini, una esigenza che necessita di una soluzione.
Nella vita quotidiana veniamo spesso a contatto con problemi di natura differente, alcuni di cui conosciamo già la soluzione, altri la cui soluzione può non essere a noi nota.

Esempio 1 - Problema del contadino:
Un contadino ha con sé un lupo, una capra ed un cavolo e deve attraversare un fiume con una barca sulla quale può portare con sè solo il lupo, solo la capra o solo il cavolo. Egli deve fare attenzione, però, a non lasciare soli, in sua assenza, il lupo e la capra, perché il lupo mangerebbe la capra, la capra ed il cavolo, perché la capra mangerebbe il cavolo. Come deve procedere il contadino per attraversare il fiume portando sull'altra sponda sia il lupo, sia la capra, sia il cavolo?

Esempio 2 - L'orafo imbroglione:
Un ricco benestante consegna un certo quantitativo di oro ad un orafo, affinchè realizzi 18 monete d'oro, tutte uguali. L'orafo si appropria di una parte dell'oro e realizza 18 monete esteticamente uguali, ma una più leggera delle altre. Avendo a disposizione una bilancia a due bracci e solo 3 pesate, devi individuare la moneta più leggera. Come procedi?

Soluzione

La soluzione di un problema consiste in una sequenza di operazioni o azioni che devono essere compiute per risolvere il problema, ossia per raggiungere l'obiettivo desiderato.
Qualora la soluzione del problema non fosse già nota, potrebbe essere necessaria una fase di analisi per individuare una strategia risolutiva.
La strategia risolutiva che consente di risolvere il problema viene indicata, in informatica, con il termine algoritmo.

Algoritmo

Il termine algoritmo deriva dal nome del matematico persiano al-Khwarizmi, vissuto all'incirca nel IX secolo d.C., considerato il padre del calcolo algebrico ed a cui dobbiamo l'invenzione dei metodi per eseguire le quattro operazioni (addizione, sottrazione, moltiplicazione e divisione), che studiamo ancora al giorno d'oggi.
L'algoritmo si può quindi definire come una sequenza ordinata e finita di azioni o passi che permettono ad un esecutore di risolvere un problema.
Possiamo anche aggiungere che l'algoritmo parte da un insieme di elementi iniziali (input) ed attraverso l'esecuzione di una successione di azioni ordinata e finita, consente di giungere ad un insieme di risultati finali (output).

Graficamente, possiamo immaginarlo come illustrato nella figura seguente:

Rappresentazione di un algoritmo

Programma

Affinché un algoritmo possa essere eseguito da un esecutore è necessario che esso sia tradotto in un linguaggio comprensibile a tale categoria di esecutori.
Questo linguaggio è:

  • il linguaggio naturale, nel caso in cui l'esecutore sia un essere umano
  • un linguaggio di programmazione, nel caso in cui l'esecutore sia una macchina/computer
Giungiamo quindi alla definizione di programma come traduzione di un algoritmo in un linguaggio di programmazione, che ne consenta l'esecuzione attraverso una macchina/computer.