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):

  1. 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 di inizio

  2. 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 finale

  3. 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 operazione interna

  4. 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 controllo

  5. 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 input output

  6. Blocco di connessione
    Serve semplicemente per connettere fra loro più percorsi all'interno dell'algoritmo.

    Blocco di connessione

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:

Algoritmo per la moltiplicazione di due numeri senza prodotto





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:

  1. la sequenza

  2. la selezione

  3. 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:

sequenza

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:

selezione

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



ciclo

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:

Algoritmo contenente selezioni e cicli















Sitografia : http://www.programmiamo.altervista.org