UA7 - LEZ05 Diagrammi A Blocchi

Scarica in formato pdf o txt
Scarica in formato pdf o txt
Sei sulla pagina 1di 49

Unità di apprendimento 7

La soluzione dei problemi


e
il progetto degli algoritmi
Unità di apprendimento 7
Lezione 5

Diagrammi a blocchi
e top-down
In questa lezione impareremo:

 come a descrivere gli algoritmi in


pseudocodice
 a descrivere gli algoritmi con i
diagrammi di flusso
 a utilizzare la tecnica top-down
L’uomo come esecutore di algoritmi

 Con algoritmo intendiamo l’“insieme di azioni


elementari che consentono di risolvere un
problema trasformando i dati iniziali del
problema stesso nel risultato”.
 Non necessariamente il problema deve
essere di tipo matematico.
 L’esecutore dell’algoritmo può quindi essere
anche l’uomo.
L’uomo come esecutore di algoritmi

 Un altro algoritmo può descrivere il


procedimento che seguiamo per sostituire
l’olio nel motore della nostra automobile.
 Un altro algoritmo è il quello che descrive le
operazioni che vengono eseguite per
prelevare una bibita in lattina dalla macchina
distributrice automatica.
Prima rappresentazione degli
algoritmi
 La prima rappresentazione degli
algoritmi è quella che viene effettuata in
linguaggio naturale.
 Vengono elencate una alla volta
(sequenzialmente) le operazioni che
devono essere eseguite.
 Si scrivono una per riga.
Prima rappresentazione degli
algoritmi
 Esempio
 Problema: algoritmo del “buongiorno”
Al suono della sveglia mi stiracchio assonnato, scendo
dal letto di malavoglia e vado in bagno a fare una doccia
tonificante; in cucina mi aspetta una ricca colazione al
termine della quale mi vesto e mi pettino.
Dopo aver dato un’ultima controllata al contenuto dello
zaino sono pronto per uscire: indosso il giubbotto, saluto
la mamma, esco di casa e mi dirigo verso la fermata
dell’autobus.
Prima rappresentazione degli
algoritmi
 Individuazione le istruzioni elementari
Prima rappresentazione degli
algoritmi
 Mettiamolo ora in forma impersonale
Prima rappresentazione degli
algoritmi
 Abbiamo commesso alcune imprecisioni,
se non dei veri e propri errori.
 La soluzione proposta manca delle
caratteristiche di generalità
 Dobbiamo considerare anche il caso di
giorni non feriali (domenica e festivi
compresi).
 Introduciamo una prima rettifica,
effettuando un supplemento d’analisi.
Prima rappresentazione degli
algoritmi
 Al suono della sveglia → ho diverse
possibilità
Prima rappresentazione degli
algoritmi
Una nuova versione potrebbe essere
Prima rappresentazione degli
algoritmi
 Problema: registrare un film con un
videoregistratore
Individuato il programma che si vuole registrare, quindi il
canale e l’ora in cui inizia la trasmissione, è necessario
procurarsi un DVD vuoto; quindi si predispone il
videoregistratore e si attende l’ora di inizio: a questo punto
si comincia a registrare.
Durante la registrazione non è necessaria la presenza di
nessun “operatore”: è sufficiente ricordarsi di controllare
ogni tanto che non sia terminato il programma.
Prima rappresentazione degli
algoritmi
Prima rappresentazione degli
algoritmi
In questo caso le operazioni descritte non sono elementari,
si è cioè utilizzato un livello di descrizione troppo elevato: per
esempio, la 6 e la 8 richiedono più operazioni.
Prima rappresentazione degli
algoritmi

Anche l’istruzione 4 è complessa in quanto richiede più


istruzioni elementari per essere portarla a termine:
Prima rappresentazione degli
algoritmi

 La descrizione in linguaggio naturale


comporta a volte la scomposizione di
un’azione in azioni più elementari.
 Il risultato finale può essere di non facile
comprensione nella sua interezza.
 Può comportare istruzioni ripetitive e
alternative che ne rendono poco agibile
la corretta interpretazione.
Seconda rappresentazione degli
algoritmi

 E’ possibile descrivere gli algoritmi


mediante un linguaggio grafico che è
alla base della rappresentazione di tutti
gli algoritmi.
 Anche gli algoritmi che descrivono i
compiti di un elaboratore possono
essere scritti nel medesimo linguaggio
grafico.
Diagrammi a blocchi o flow chart

 Il metodo più semplice e più diffuso per


descrivere gli algoritmi è quello che
utilizza i diagrammi a blocchi (o flow
chart, “diagrammi di flusso”).
 Si tratta di una rappresentazione
grafica, di facile interpretazione per
chiunque.
Diagrammi a blocchi o flow chart

 Possiamo distinguere tre diversi elementi


grafici utilizzati per differenziare la natura
delle operazioni:

blocco terminale: è usato solo per


indicare l’inizio e la fine
dell’algoritmo, che devono essere
unici nel diagramma.
Diagrammi a blocchi o flow chart

blocco di comunicazione: al suo interno


vengono scritte le operazioni di dialogo tra
l’uomo e la macchina (leggi, scrivi ecc.).

blocco di elaborazione: contiene le istruzioni


vere e proprie che compiono operazioni.
Diagrammi a blocchi o flow chart

 Le operazioni vengono eseguite seguendo le


frecce, una dopo l’altra, quindi in sequenza.
 La sequenza di operazioni è la caratteristica
principale di un algoritmo ed è la struttura
fondamentale di un programma scritto in un
linguaggio di programmazione imperativo.
Diagrammi a blocchi o flow-chart

 Il diagramma a blocchi
di figura descrive le
operazioni necessarie
per effettuare il calcolo
del perimetro e dell’area
di un quadrato.
Diagrammi a blocchi o flow-chart

 Il diagramma di flusso viene trasformarlo


nel linguaggio di progetto (o
pseudolinguaggio)
 Viene scritto istruzione per istruzione, in
sequenza, come nel seguente esempio:
Diagrammi a blocchi o flow-chart

 La pseudocodifica è l’ultimo passo per


arrivare alla scrittura di un programma in
linguaggio di programmazione
 Dopo la scrittura del programma in
pseudolinguaggio è sufficiente tradurre
ogni singola istruzione nel formato
richiesto dal linguaggio C oppure Pascal.
 esempio
precedente:
Diagrammi a blocchi o flow-chart

 Esempio: Quanto costa andare a scuola?


 Calcoliamo il costo settimanale di carburante
utilizzato per andare a scuola.

 Innanzitutto individuiamo lo operazioni da


eseguire, cioè l’algoritmo che risolve il problema:
1. calcolare il numero di litri di benzina consumati;
2. calcolare il costo totale del carburante giornaliero;
3. determinare il costo settimanale.
Diagrammi a blocchi o flow-chart

 E’ necessario avere a disposizione alcuni dati


da fornire al programma, in modo che esso
possa elaborarli.
 Questi dati, chiamati dati di ingresso (o
input), sono:
1. il costo di un litro di carburante;
2. il numero di chilometri tra la casa e la scuola;
3. il numero di chilometri che il mezzo utilizzato
effettua con un litro di carburante.
Diagrammi a blocchi o flow-chart

 I risultati della elaborazione prendono il


nome di dati in uscita (o output) del
programma e vengono comunicati
all’utente.
 Possiamo ora scrivere il diagramma di
flusso del programma:
Diagrammi a blocchi o flow-chart
Diagrammi a blocchi o flow-chart

 La traduzione in pseudocodice è la seguente


Diagrammi a blocchi o flow-chart

 L’algoritmo che abbiamo scritto ha la proprietà


di essere generico
 Può essere utilizzato per la risoluzione di
problemi simili senza che venga specificato:
• il tipo di automezzo utilizzato
• il tipo di percorso effettuato
• il carburante impiegato
 Potrebbe ad esempio essere applicato al
calcolo dei costi di trasporto aereo di carbone
dalle miniere del Sud Africa a Parigi!
Diagrammi a blocchi o flow-chart

 La sequenza delle istruzioni è ordinata,


cioè esiste un ordine preciso in base al
quale vengono eseguite le istruzioni
 Queste non possono essere scambiate di
posto tra di loro.
 Il numero di operazioni deve essere finito:
possono essere anche moltissime, ma non
in numero infinito, altrimenti l’algoritmo non
terminerebbe mai.
Diagrammi a blocchi o flow-chart

 Ogni operazione deve essere chiara, in


modo che l’esecutore la possa comprendere
ed eseguire ogni istruzione senza errori di
interpretazione.
 Deve sempre esserci una fine:
• sia che venga prodotto un risultato valido;
• sia che non esista soluzione.
 I risultati devono essere gli stessi tutte le
volte che l’algoritmo viene eseguito sugli
stessi dati, anche se dovesse essere
utilizzato un diverso elaboratore.
Diagrammi a blocchi o flow-chart

 Vediamo un esempio più complesso, dove è


necessario individuare la strategia:

 Descrivi l’algoritmo che permetta di riempire


un secchio della capacità di 4 litri con soli 2
litri d’acqua utilizzando solo due secchi con
capacità volumetrica rispettivamente di 4 e 3
litri.
Diagrammi a blocchi o flow-chart

 Con strategia intendiamo il “ragionamento”


che ci permette di ottenere la soluzione, cioè
l’idea che abbiamo avuto per risolvere “il
nocciolo della questione”.
 Questo problema non ha una soluzione
immediata: dobbiamo effettuare un insieme
di ragionamenti e deduzioni.
Diagrammi a blocchi o flow-chart

 Dall’analisi del testo ci accorgiamo che


la differenza tra i due contenitori è di 1
litro di capacità.
 Questa quantità ci può servire per
ottenere la quantità di 2 litri desiderata.
 La sequenza delle azioni è la seguente:
Diagrammi a blocchi o flow-chart

 riempio per primo il secchio da 4 litri;


 lo travaso in quello da 3 litri in modo che
rimanga 1 litro nel primo secchio;
 ora svuoto il secchio da 3 litri;
 travaso il litro presente nel secchio da 4 litri
in quello da 3 litri;
 riempio nuovamente il secchio da 4 litri;
 travaso due litri in quello da 3 litri, dove 1 litro
è già presente;
 nel secchio da 4 litri sono rimasti 2 litri.
Diagrammi a blocchi o flow-chart

 Il diagramma di flusso del programma è:


Diagrammi a blocchi o flow-chart

 La traduzione in pseudolinguaggio è la
seguente
La programmazione strutturata

 Con il termine programmazione strutturata si


intende una tecnica di programmazione
 emerso tra gli anni Sessanta e Settanta che
ha introdotto i concetti fondamentali che sono
 stati alla base di tutti gli altri paradigmi
successivi, non ultimo quello orientato agli
oggetti.
La programmazione strutturata

 Le idee chiave della programmazione


strutturata si possono ricondurre alla critica
dell’istruzione del salto incondizionato (o goto,
“vai a”).
 Nei primi linguaggi era lo strumento
fondamentale per la definizione degli algoritmi.
 Rendeva il codice scritto praticamente
incomprensibile, tanto da essere chiamato
spaghetti code per la sua natura
“ingarbugliata”!
La programmazione strutturata

 La programmazione strutturata è una


tecnica di programmazione che limita
l’utilizzo delle regole ammesse per
descrivere gli algoritmi a sole tre regole
fondamentali:
• la sequenza (o concatenazione);
• la selezione (o alternativa);
• l’iterazione (o ciclo, ripetizione).
La programmazione strutturata

 I linguaggi di programmazione strutturati


iniziarono a emergere nei primi anni Settanta
facendo tesoro delle idee dei due matematici
italiani Corrado Bohm e Giuseppe Jacopini.
 Per primi sottolinearono, in un teorema,
come le tre figure strutturali fondamentali
offrissero un insieme di strutture di controllo
completo, che garantivano la possibilità di
descrivere tutti gli algoritmi.
La programmazione strutturata

TEOREMA DI BOHM E JACOPINI


Qualsiasi programma può essere
riscritto avendo a disposizione tre
tipi di strutture di controllo:
sequenza, ripetizione e alternativa.
La programmazione strutturata

 Se il linguaggio di programmazione ammette


almeno una forma di sequenza, una di
alternativa e una di ripetizione, è in grado di
descrivere ogni algoritmo.
 Nei moderni linguaggi, per semplificare
l’operato dei programmatori, vengono fornite
alcune varianti per ciascuna famiglia di
strutture di controllo, ma devono essere
sempre presenti tutte e tre.
Diagrammi a blocchi o flow-chart

 Tra i linguaggi che ammettono le tre figure


strutturali fondamentali e quindi permettono
di scrivere i programmi che codificano
qualunque algoritmo computabile, si possono
citare:
• Pascal
• C
• Visual Basic
• Cobol
• Java
• PHP …
ABBIAMO IMPARATO CHE...

Potrebbero piacerti anche