Diagramma di flusso (Flow chart)
Un diagramma di flusso (o flow chart) è una rappresentazione grafica di un algoritmo. Si potrebbe dire che i diagrammi di flusso forniscono un linguaggio universale per scrivere algoritmi.
Le operazioni elementari che si possono rappresentare con un flow chart sono di cinque tipi diversi, a ciascuno dei quali corrisponde un diverso simbolo grafico (blocco):
Blocco iniziale
Viene posto all'inizio
dell'algoritmo ed è unico per ogni dato algoritmo (indica il punto
in cui deve iniziare l'esecuzione e ogni algoritmo ha un solo blocco
di inizio);
Blocco finale
E'
analogo al precedente, ma segnala la fine dell'algoritmo. Viene
messo dunque per indicare il termine dell'esecuzione. A differenza
del blocco iniziale, ci possono essere più blocchi finali per un
singolo algoritmo (cioè un algoritmo può terminare, a seconda dei
casi, in punti diversi);
Blocco di elaborazione o
di operazione interna
Indica l'esecuzione di una qualsiasi
operazione all'interno dell'algoritmo (nell'esempio in figura qui
sotto, l'operazione è l'incremento del valore della variabile
x);
Blocco di controllo o di
test
Serve per selezionare due differenti percorsi
all'interno di un dato algoritmo, a seconda che sia verificata
oppure no la condizione scritta all'interno del blocco (nell'esempio
in figura se x>0 viene presa la strada indicata con SI,
altrimenti l'esecuzione prosegue per la strada indicata con NO);
Blocco di
input/output
Questo blocco serve per indicare una fra
due operazioni diverse:
a) l'acquisizione di un valore dalla
tastiera di un computer;
b) la visualizzazione di un valore sullo
schermo di un computer (o su un'altra periferica di output, come per
esempio una stampante).
A seconda di quale delle due
operazioni si vuole eseguire, sul blocco viene scritto LEGGI oppure
SCRIVI (o ancora ACQUISISCI o STAMPA o altre scritte che ne
chiariscono lo scopo).
Il blocco di input/output è utile quando
si vuole schematizzare con un diagramma di flusso un algoritmo che
dovrà essere eseguito da un calcolatore (che dovrà quindi
diventare un programma).
Blocco di connessione
Serve semplicemente
per connettere fra loro più percorsi all'interno dell'algoritmo.
In un diagramma di flusso i blocchi precedenti sono collegati fra di loro per mezzo di frecce che indicano la direzione di esecuzione dell'algoritmo stesso. In generale le frecce indicano un percorso che, partendo da un unico blocco di inizio, termina alla fine in un blocco finale.
Un esempio di algoritmo scritto usando un diagramma di flusso
La rappresentazione per mezzo dei diagrammi di flusso è abbastanza semplice e naturale e viene usata non solo in informatica ma in molti altri ambiti applicativi. Per questa ragione non si ritiene opportuno dilungarsi troppo su questo aspetto. Piuttosto forniamo qui di seguito un esempio di scrittura di algoritmo, con riferimento al problema di moltiplicare fra loro due numeri interi usando solo le addizioni.
La rappresentazione dell'algoritmo con il linguaggio dei diagrammi di flusso è la seguente:
Definizione
In un algoritmo si dice struttura di controllo (control structure) un gruppo di istruzioni con un unico punto di ingresso e un unico punto di uscita. Un altro modo per definire una struttura di controllo è quello di considerarla come un gruppo di istruzioni "collegate fra loro", nel senso che vengono eseguite insieme oppure la cui esecuzione dipende l'una dall'altra.
Qualche esempio chiarirà meglio il concetto. Occorre intanto dire che in qualsiasi algoritmo si possono individuare solo tre tipi di strutture di controllo e precisamente:
la sequenza
la selezione
il ciclo
Sequenza
Come suggerisce il nome, una sequenza è un gruppo di istruzioni che devono essere eseguite una dopo l'altra, in successione.
Un esempio di sequenza è quella mostrata qui sotto e che serve per calcolare area e perimetro di un cerchio data la misura del raggio:
Gli algoritmi più semplici (come quello mostrato qui sopra) sono costituiti da un'unica sequenza di istruzioni.
Es. Scambio di liquido fra due bicchieri
Supponiamo di avere due bicchieri, denominati A e B, pieni rispettivamente uno di acqua e l'altro di vino, e di voler travasare A in B e viceversa.
Il problema può essere risolto usando un terzo bicchiere C e l'algoritmo è il seguente:
1) versa A in C
2) versa B in A
3) versa C in B
Selezione
La struttura detta selezione permette di eseguire istruzioni diverse a seconda della condizione scritta all'interno di un blocco di test. Un esempio semplice di selezione è presente nel seguente algoritmo che acquisisce un numero e lo rende positivo se è negativo:
Si osservi il metodo usato per rendere positivo il numero (se negativo):
numero = - (numero)
La selezione corrisponde in italiano all'istruzione SE... ALLORA.
Es. Ordinamento di 3 numeri
Siano dati tre valori A, B e C e li si vuole ordinare in modo crescente, cioè in modo che A contenga il valore più piccolo di tutti, B quello intermedio e C il più grande. L'algoritmo deve naturalmente funzionare con qualsiasi scelta di valori di A, B e C. Ecco una soluzione possibile:
1) SE B < A, ALLORA scambia B con A
2) SE C < A, ALLORA
scambia C con A
3) SE B < A, ALLORA scambia B con A
Si noti che l'istruzione 1 e la 3 sono uguali. Tuttavia vengono eseguite con valori diversi e dunque, in generale, producono risultati diversi. L'istruzione "scambia" può essere ulteriormente dettagliata specificando tutti i passaggi intermedi necessari ad effettuare lo scambio fra il contenuto di due variabili.
Una selezione si dice semplice o a una via quando prevede l'esecuzione di un solo blocco di istruzioni nel caso in cui la condizione sia vera. Nel caso di condizione falsa, la selezione semplice non esegue nessuna istruzione. Un esempio di selezione semplice è:
SE piove ALLORA prendi l'ombrello
Se la condizione è falsa (cioè se NON piove), non viene prevista nessuna istruzione.
In una selezione a due vie, invece, viene eseguito qualcosa sia nel caso in cui la condizione sia vera sia nel caso in cui la condizione sia falsa. La selezione a due vie viene tradotta in italiano con SE... ALLORA.... ALTRIMENTI...., come nell'esempio seguente:
SE il semaforo è rosso ALLORA passa ALTRIMENTI fermati
In questo caso l'istruzione passa viene eseguita se la condizione è vera (cioè SE il semaforo è rosso), mentre l'istruzione fermati viene eseguita se la condizione è falsa.
Ciclo
Un ciclo è un gruppo di istruzioni in un algoritmo che devono essere ripetute più volte.
Es. Moltiplicazione fra due numeri senza usare il prodotto
Siano dati due numeri interi A e B. Si vuole calcolare il prodotto di A per B senza usare l'operatore di moltiplicazione, ovvero semplicemente eseguendo ripetutamente la somma. Ecco una possibile soluzione:
1) C = 0
2) RIPETI FINTANTOCHE' A è diverso da zero
- C = C
+ B
- A = A -1
3) Il risultato della moltiplicazione è in C
Osserviamo che anche il ciclo, come la selezione, contiene un blocco di test. In questo caso però il blocco di test controlla la ripetizione di un gruppo di istruzioni e non semplicemente la scelta fra due diversi percorsi nell'algortimo.
La presenza di un ciclo all'interno di un algoritmo si distingue facilmente per via del percorso di ritorno, cioè di un ramo dell'algoritmo che torna indietro (a indicare il fatto che alcune istruzioni vengono ripetute).
Il ciclo viene tradotto in italiano con RIPETI FINTANTOCHE'... Si consideri il seguente esempio:
RIPETI FINTANTOCHE' ci sono ancora patate |
|
|
- prendi una patata dal cesto |
|
- sbuccia la patata |
|
- getta la patata nella pentola |
Si noti che le tre istruzioni del ciclo vengono eseguite molte volte, finché ci sono ancora patate.
Il teorema di Böhm-Jacopini
Enunciato nel 1966 dagli informatici Corrado Böhm e Giuseppe Jacopini, afferma che qualunque algoritmo può essere realizzato utilizzando le sole tre strutture di controllo fondamentali: la sequenza, la selezione ed il ciclo.
Questo teorema riveste un'importanza fondamentale per lo sviluppo dei linguaggi di programmazione, in quanto dimostra che un linguaggio che permetta di realizzare sequenze, selezioni e cicli permette anche di implementare qualsiasi algoritmo. In sostanza la possibilità di eseguire i tre tipi di strutture fondamentali rende un linguaggio di programmazione "completo", nel senso che non sono necessarie altre strutture per eseguire qualsiasi algoritmo.
Algoritmo complessi possono essere costituiti da molte sequenze, selezioni e cicli a volte anche annidati uno dentro l'altro. A titolo di esempio si consideri il seguente diagramma di flusso relativo a un algoritmo per il calcolo della radice quadrata di un numero:
Sitografia : http://www.programmiamo.altervista.org