|
Prima di analizzare i seguenti esempi di algoritmi consulta la seguente sezione: risoluzione effettiva dei problemi
Determinare il maggiore di due numeri, x e y
P1. calcolare la differenza d fra x e y (d x- y);
P2. valutare se d è maggiore di 0:
In caso affermativo la soluzione è x;
In caso negativo la soluzione è y.
Prima di proporre una soluzione occorre definire quali problemi si considerano come elementari. Si ipotizi che siano problemi elementari il calcolo della differenza fra due numeri e la valutazione del segno positivo o negativo. Una soluzione del problema emerge dall'osservazione che un numero è maggiore di un altro se la loro differenza è positiva. Nel passo P1 è presente una struttura di tipo a b detta di assegnamento. Il termine a è una variabile, cioè un contenitore di valori, che assume il valore b. La struttura del passo P2 è detta condizionale. In essa è infatti presente una condizione logica, che può essere vera o falsa, detta predicato. In conseguenza della determinazione del valore di verità di tale predicato, viene effettuata la scelta tra due azioni esclusive. Nel caso di algoritmi con un numero di passi molto elevato, si può arrestare la scomposizione in sottoproblemi a un punto che non include ancora dei problemi elementari, purché di essi sia comunque nota una scomposizione in problemi elementari, che rimane temporaneamente implicita. Questi vengono detti problemi terminali. In questa prospettiva si può quindi considerare la seguente variante del problema finora analizzato:
Determinare il maggiore dei tre numeri, x, y e z.
Utilizzando l'algoritmo ottenuto per la soluzione del problema 1, si può considerare terminale il problema di trovare il maggiore di due numeri:
P1. valutare se x è maggiore di y (problema 1);
in caso affermativo eseguire il passo P2;
in caso negativo eseguire il passo P3;
P2. la soluzione corrisponde al maggiore tra x e z (problema 1);
P3. la soluzione corrisponde al maggiore tra y e z (problema 1).
Determinare il maggiore di n numeri interi
P1. trovare il maggiore tra i primi due numeri;
P2. trovare il maggiore fra il terzo numero e il risultato del sottoproblema precedente;
P3. trovare il maggiore fra il quarto numero e il risultato del sottoproblema precedente;
Pn-1. trovare il maggiore fra l'ultimo numero e il risultato del sottoproblema precedente.
E' inoltre possibile riscrivere l'algoritmo in una forma molto più sintetica:
P1. trovare il maggiore tra i primi due numeri;
P2. finché ci sono numeri da verificare ripetere il passo P3;
P3. trovare il maggiore fra il nuovo numero da esaminare e il maggiore trovato in precedenza.
Tale struttura indica che l'azione (il passo P3) deve essere ripetuta ciclicamente, valutando ogni volta il predicato ("ci sono numeri da verificare") , e passando a risolvere il sottoproblema successivo allorché il predicato diviene falso. Soluzioni di questo tipo si dicono soluzioni iterattive. Ogni sottoproblema è indicato come iterazione elementare, e la struttura nella quale la soluzione viene espressa come struttura iterattiva o ciclo (loop).
Tutto quanto riportato in questa pagina è a puro scopo informativo personale. Se non ti trovi in accordo con quanto riportato nella pagina, vuoi fare delle precisazioni, vuoi fare delle aggiunte o hai delle proposte e dei consigli da dare, puoi farlo mandando un email. Ogni indicazione è fondamentale per la continua crescita del sito.