Gli algoritmi e la loro rappresentazione pag. 5

annuncio pubblicitario
Gli algoritmi e la loro rappresentazione
pag. 5
Rappresentazione grafica di un algoritmo: il flow chart
Per rappresentare un algoritmo si usa un metodo grafico, chiamato FLOW CHART o DIAGRAMMA DI
FLUSSO. Guardando questo disegno, si ha una comprensione immediata della complessità e della
articolazione dell'algoritmo. E’ come una “mappa” dell’algoritmo, di più facile lettura rispetto alla lista delle
istruzioni che dà un’idea visiva della logica di soluzione del problema che l’algoritmo risolve.
Molti libretti di istruzioni propongono le istruzioni in forma grafica.
Le istruzioni che compongono l'algoritmo vengono racchiuse in simboli speciali, diversi a secondo del tipo
di istruzione. In questo modo il simbolo aiuta a comprendere il tipo di istruzione che si deve eseguire.
Tutti questi simboli vengono collegati tra di loro da frecce per far capire in che ordine vanno eseguite le varie
istruzioni. Per trovare l’istruzione da eseguire , basta seguire le frecce.
I simboli usati nel flow chart sono i seguenti:
Rettangoli
Si mettono nei rettangoli le istruzioni la cui esecuzione non è visibile
all’esterno. Tipicamente si mettono nei rettangoli le istruzioni che
ordinano ad un computer di eseguire dei calcoli
I
O
Parallelogrammi
Si mettono nei parallelogrammi le istruzioni che in un programma
interagiscono con il mondo esterno o con l’operatore. Le istruzioni in cui
la macchina richiede dei dati si mettono in un parallelogramma con la I di
Input. Le istruzioni in cui la macchina comunica un risultato si mettono in
un parallelogramma con la O di Output
Terminatori
Indicano il punto in cui l’algoritmo inizia e gli eventuali punti di fine delle
istruzioni da eseguire.
Inizio
Istruzione 1
Il flow chart di una SEQUENZA si presenta come quello qui accanto.
Notiamo le frecce che collegano fra loro i vari blocchi del Flow Chart
Il verso della freccia indica il verso di percorrenza e quindi di esecuzione dell'algoritmo.
Istruzione 2
Da ognuno dei precedenti simboli può "uscire" SOLO UNA FRECCIA, in quanto finita la
esecuzione della istruzione SOLO UNA è la istruzione da eseguire subito dopo.
Istruzione 3
In un algoritmo per l’essere umano è tuttavia un po’ difficile definire esattamente i simboli
da usare
…………
Il flow si disegna prima di scrivere l'algoritmo sotto forma di istruzioni vere e proprie.
…………
Il flow rappresenta il metodo di soluzione del problema; da esso si capisce quali
operazioni vanno affrontate per arrivare al risultato finale e in che ordine esse vanno
eseguite.
Fine
E’ come un pro-memoria. Dall’esame di un flow chart si può discutere facilmente sulla
sua ottimizzazione
Il flow chart deve essere di facile comprensione: indica infatti quali operazioni vanno eseguite.
Il programma derivato dal flow sarà comprensibile solo da chi conosce quel linguaggio di programmazione.
Uno stesso flow chart può essere tradotto in linguaggi di programmazione diversi.
I sottoproblemi
Le istruzioni che compongono il flow chart precedente possono risultare elementari o no a seconda
dell'esecutore che le legge.
A.S. 08-09 ©Rauch
Gli algoritmi e la loro rappresentazione
pag. 6
Alcune delle istruzioni sono infatti un po’ complesse, richiedono cioè la esecuzione di molte azioni che però
non sono state esplicitate, ad esempio Lavati.
Si suppone che la istruzione Lavati sia elementare per tutti, cioè che tutti la sappiano eseguire, anche se è
ambigua perché potrebbe essere interpretata in modi diversi da esecutori diversi.
Se Lavati non risulta elementare allora significa che è un problema da risolvere all’interno del problema più
grosso “Risveglio”: si dice che siamo di fronte ad un sottoproblema.
In questo caso al posto dell’unica istruzione Lavati, bisogna fornire un insieme di istruzioni esplicative che
portino alla soluzione del sottoproblema Lavaggio
I sottoproblemi vengono indicati nel flow con un simbolo particolare:
Questo simbolo indica che c’è un sottoproblema da risolvere. Significa che per
risolverlo sono necessarie diverse istruzioni.
La definizione delle istruzioni vere e proprie che portano alla soluzione di quel
sottoproblema viene cioè rimandata ad una successiva fase di analisi di
maggior dettaglio.
Questo modo di procedere aiuta nel disegno del flow perché consente comunque di proseguire nell’analisi
del problema che si sta affrontando, anche se nel momento della sua scrittura non sia ha la minima idea di
come quel particolare sottoproblema si risolva.
Un flow chart di 1° livello, o a grandi blocchi è quello in cui vengono individuati i vari sottoproblemi da
affrontare per arrivare alla soluzione del problema.
Si può poi ritornare sui vari sottoproblemi in sospeso in un secondo momento e tracciare un flow più
dettagliato o di secondo livello e così via fino a quando tutte le istruzioni individuate risultano elementari
per l’esecutore.
Ovviamente non occorre riscrivere tutto il flow: si provvede a dettagliare solo il flow del sottoproblema, come
se il nuovo problema da affrontare fosse ora il sottoproblema.
RISVEGLIO
Questo flow chart di 1 livello evidenzia i sottoproblemi presenti nel problema “Risveglio”
Sono state ritenute elementari le istruzioni:
Spegni la
sveglia
Alzati
¾
¾
¾
¾
Spegni la sveglia
Alzati
Ascolta la radio
Esci
Lavaggio
Lavaggio, Vestizione e Colazione sono stati ritenuti dei sottoproblemi.
Vestizione
Per disegnare il flow chart di 2 livello non occorre ridisegnare tutto il flow.
Si provvede a dettagliare solo il flow del sottoproblema che si vuole risolvere.
Colazione
Si ricomincia cioè daccapo nella operazione di analisi come se il nuovo problema da
affrontare fosse Lavaggio, Vestizione, Colazione
Lavaggio
Vestizione
Colazione
Ascolta la radio
Esci di casa
?
?
?
FINE
A.S. 08-09 ©Rauch
Gli algoritmi e la loro rappresentazione
pag. 7
La deviazione dalla sequenza: la scelta
Se si prova a dettagliare l’algoritmo che risolve i sottoproblemi proposti, ci si accorge subito che al crescere
della complessità del problema e del livello di dettaglio, una semplice sequenza non è più sufficiente. Ma
anche l’algoritmo Risveglio che abbiamo scritto come sequenza è punitivo per l’esecutore: dovrebbe dargli
una maggiore flessibilità.
Le istruzioni cioè si eseguono in sequenza fino a quando non si raggiunge un certo punto dell’algoritmo in
cui viene richiesto all’esecutore di prendere una decisione sul da farsi. Ad un certo punto dell’esecuzione
l’algoritmo potrebbe prevedere una alternativa e l’esecutore potrebbe operare una scelta. Il programma può
deviare dalla sequenza.
La SCELTA è tra due possibilità.
L’algoritmo propone cioè una condizione da controllare, formulata come una domanda a cui l’esecutore
deve poter dare una risposta. La domanda è formulata in modo che si possa rispondere solo SI o NO. Si è
di fronte a un “bivio”.
Nel flow chart per indicare che l’algoritmo devia dalla sequenza a causa di una scelta si usa il simbolo:
All’interno del rombo si pone la domanda a cui l’esecutore deve rispondere Si o No
Dal rombo si dipartono due frecce. Una freccia punta alle istruzioni da eseguire nel
caso si risponda Si alla domanda contenuta nel rombo. L’altra freccia punta verso le
?
istruzioni da eseguire se si risponde No.
Notiamo che il rombo è l’unico simbolo
del flow da cui escono due frecce.
Ad esempio nel caso dell’algoritmo precedente non è affatto
detto che si debba per forza fare colazione tutte le mattine:
potremmo offrire una SCELTA all’esecutore.
Condizione da controllare:
Hai fame?
Se risponde SI l’esecutore devia dalla sequenza ed esegue
le istruzioni che risolvono il sottoproblema COLAZIONE
Se risponde NO l’esecutore prosegue in sequenza evitando
così di fare colazione.
Ad esempio potremmo aggiungere prima della istruzione
ESCI DI CASA la seguente scelta:
GUARDA FUORI
DALLA FINESTRA
SI
COLAZIONE
HAI FAME?
NO
Se risponde SI l’esecutore devia dalla sequenza ed esegue le
istruzioni che lo portano a prendere con sé l’ombrello
Se risponde NO l’esecutore prosegue in sequenza evitando
così di mettere l’ombrello in borsa.
Ovviamente questo presuppone che in borsa non ci sia già
l’ombrello. Con questo algoritmo si corre il rischio di uscire di
casa con due ombrelli!
SI
BRUTTO
TEMPO ?
Il problema nasce dalla formulazione non precisa della
condizione da controllare. La domanda giusta sarebbe:
PRENDI L’OMBRELLO
NO
Brutto tempo E Sei senza ombrello?
Questa è una condizione composta. Si tratta di rispondere a due domande. Solo se l’esecutore risponde Si
a tutte e due le domande, la risposta complessiva è Si e quindi si devia dalla sequenza per prendere
l’ombrello. Se si risponde No a una delle domande o a tutte e due la risposta complessiva è No e quindi si
prosegue in sequenza.
A.S. 08-09 ©Rauch
Gli algoritmi e la loro rappresentazione
pag. 8
Le due condizioni sono tra loro in And logico: Brutto Tempo AND Sei senza Ombrello
Brutto tempo?
No
No
Si
SI
Sei Senza Ombrello?
No
Si
No
SI
Risposta
No
No
No
SI
Solo se le condizioni sono entrambe Vere (Si – 1) la Risposta complessiva è Vera (Si – 1)
La scelta può anche mostrarsi nel seguente
modo:
In seguito alla scelta il flow si divide in due
rami diversi.
CONTROLLA LA
TEMPERATURA
L’esecutore deve eseguire delle istruzioni in
alternativa.
SI
INDOSSA IL
CAPPOTTO
FA
FREDDO?
NO
INDOSSA LA GIACCA
In entrambe i casi si DEVIA dalla sequenza,
per poi tornarvi quando e' terminata la
esecuzione delle rispettive istruzioni.
Quando si trasformano i flow in un insieme di
istruzioni comprensibili all'esecutore, sorgerà la esigenza di evidenziare in qualche modo la presenza di una
scelta.
Nella scrittura dell’algoritmo saranno necessarie cioè delle parole "speciali" per far capire all'esecutore:
¾
¾
¾
¾
quale è la condizione da controllare
dove iniziano e dove finiscono le istruzioni da eseguire se si risponde SI
dove riprende la normale sequenza (cioè dove finisce tutta la scelta)
nel caso di scelta "completa" dove iniziano e dove finiscono le istruzioni da eseguire se si risponde NO.
Queste “parole speciali” saranno diverse a seconda del linguaggio di programmazione.
A.S. 08-09 ©Rauch
Gli algoritmi e la loro rappresentazione
pag. 9
I Cicli
Un altro tipo di deviazione dalla sequenza è rappresentato dai Cicli.
Si dice che l'esecutore sta svolgendo un ciclo quando una istruzione o un
gruppo di istruzioni vengono eseguite tante volte quante sono necessarie per
ottenere un risultato.
Prima o poi deve essere possibile uscire dal ciclo.
E' cioè considerato un algoritmo scorretto il così detto "Ciclo Eterno" cioè un
algoritmo che propone all'esecutore la esecuzione all'infinito delle stesse
istruzioni ed il cui flow è qui di fianco rappresentato.
Ci deve essere quindi una condizione da controllare per decidere se rimanere in
ciclo o uscire da esso. Deve essere possibile cioè per l'esecutore operare una
SCELTA.
Istruzione n.
1
Istruzione n.
2
Ad esempio all'interno dell'algoritmo "Lavaggio", uno dei sottoproblemi
da affrontare è sicuramente Sciacquarsi.
Come si fa?
Bisogna Passare e mani sotto l’acqua
Passare le mani sotto
l'acqua
Questa istruzione però non va eseguita una volta sola.
Bisogna continuare a PASSARE LE MANI SOTTO L'ACQUA cioè
bisogna eseguire più volte questa istruzione, controllando se sulle
mani è ancora PRESENTE IL SAPONE.
L'operazione SCIACQUARSI è quindi un ciclo in cui si rimane per
effetto di una scelta.
La condizione da controllare per continuare ad eseguire il ciclo è
SAPONE PRESENTE. Se si risponde SI le frecce riportano l'esecutore
all'inizio del ciclo. Se si risponde NO si esce dal ciclo.
Si
Sapone
presente
No
SAPONE PRESENTE è quindi la condizione che deve essere VERA per continuare a ripetere, cioè per
rimanere in ciclo.
In italiano diremmo: Devi passare le mani sotto l'acqua MENTRE c'è del sapone presente su di esse.
Facciamo un altro esempio. La operazione da eseguire dopo
SCIACQUARSI è ASCIUGARSI. Come si fa?
Bisogna STROFINARE LE MANI CON L'ASCIUGAMANO.
Strofinare le mani con
l'asciugamano
Questa istruzione però non va eseguita una volta sola.
Bisogna
continuare
a
STROFINARE
LE
MANI
CON
L'ASCIUGAMANO cioè bisogna eseguire più volte questa istruzione,
controllando se LE MANI SONO ASCIUTTE.
No
Mani asciutte
L'operazione ASCIUGARSI è quindi un ciclo da cui si esce per effetto
di una scelta.
La condizione da controllare per uscire dal ciclo è LE MANI SONO
ASCIUTTE. Se si risponde NO le frecce riportano l'esecutore all'inizio
del ciclo. Se si risponde SI si esce dal ciclo.
Si
LE MANI SONO ASCIUTTE è quindi la condizione che deve essere VERA per smettere di ripetere, cioè per
uscire dal ciclo.
In italiano diremmo: Devi strofinare le mani con l'asciugamano FINO A QUANDO le mani risultano asciutte.
Esistono quindi due possibilità:
A.S. 08-09 ©Rauch
Gli algoritmi e la loro rappresentazione
pag. 10
1) Si continua a rimanere nel ciclo, cioè si continua a ripetere quando la condizione si verifica (cioè quando
si risponde SI alla domanda posta nel rombo). Si ripete cioè Mentre risulta Vera la condizione
specificata.
2)
Si esce dal ciclo quando la condizione si verifica (cioè quando si risponde SI alla domanda posta nel
rombo). Si ripete cioè Finchè diventa Vera la condizione specificata.
Notiamo che in entrambe i casi le istruzioni che compongono il ciclo vengono eseguite per lo meno una
volta.
Infatti provenendo dalla sequenza l'esecutore esegue le istruzioni del ciclo e solo a fine ciclo incontra la
scelta che gli consente di capire se tali istruzioni vanno eseguite di nuovo oppure no.
Il controllo della condizione avviene cioè a Fine Ciclo.
Esistono dei casi in cui il controllo deve essere effettuato a Inizio Ciclo. Sono i casi in cui esiste la
possibilità che le istruzioni che compongono il ciclo non debbano essere MAI eseguite. Si controlla quindi la
prima volta se bisogna entrare in ciclo e poi se è necessario rimanervi.
Ad esempio il sottoproblema COLAZIONE si risolve sicuramente con un ciclo di istruzioni.
La condizione da controllare per rimanere in ciclo e' AFFAMATO, la
condizione da controllare per uscire e' SAZIO.
Mangia un boccone
Però non si MANGIA prima e poi si controlla se si e' sazi o affamati.
Il ciclo qui accanto ci costringe a mangiare un boccone comunque, anche
se non abbiamo fame!
Si
In effetti si dovrebbe mangiare solo se si risponde SI al controllo
"AFFAMATO" o NO al controllo "SAZIO".
Affamato
In questi casi cioè il controllo della condizione va posto PRIMA delle
istruzioni da ripetere, non dopo, come mostrato dai seguenti flow chart
No
AFFAMATO
No
SAZIO
Si
Si
No
Mangia un boccone
Mangia un boccone
Notiamo come un ciclo si trasforma nell’altro semplicemente negando la condizione:
Affamato?
È infatti la condizione contraria a
Sazio?
A.S. 08-09 ©Rauch
Gli algoritmi e la loro rappresentazione
pag. 11
Lo sai Che……?
Algoritmo è un termine che deriva dal nome del matematico persiano Al Khwarazmi, autore, attorno all' 825
d. C., di un importante testo matematico. Dalla forma latina del suo nome, Algorismus, deriva la parola
moderna algoritmo.
Questo termine viene usato per indicare un qualsiasi metodo di calcolo (algebrico o numerico), come pure
una sequenza di operazioni, da eseguire nell'ordine assegnato.
Esercizi
Disegnare il flow chart dei seguenti algoritmi, avendo cura di inserire tutte le istruzioni necessarie, come se
fossero diretti ad un esecutore poco intelligente e privo di iniziativa.
1) Le uova sode (da il Cucchiaio di argento)
Ingredienti: 6 uova
Procedimento: Si mettono le uova in un recipiente ricoprendole di acqua fredda, si porta il recipiente sul
fuoco e si contano sette minuti dal momento che l’acqua leva il bollore. Si passano subito in acqua fredda.
2) Dal libretto istruzioni televisore LCD della LG
Selezione dei Menù
Premendo ripetutamente il tasto Menu del telecomando appaiono via via i menu operativi :
t
Immagine, Suono, Ora, Stazione e Speciale
selezionare un’opzione all’interno del menu desiderato si premono i tastitudel
3 OK 4 Per
telecomando. L’opzione selezionata viene evidenziata da un cambiamento di colore (da
bianco a rosso). Modificare per mezzo dei pulsanti 34l’impostazione dell’opzione che si è
u
selezionata. Per visualizzare gli eventuali sotto menu premere OK
Sintonizzazione Automatica
Menu Stazione
Premere il pulsante Menu in modo da visualizzare il menu operativo
Ricerca Automatica
Stazione
Ricerca Manuale
Sistemazione Programmi
Selezionare per mezzo dei pulsanti tul’opzione Ricerca Automatica
Programma Favorito
Premere il pulsante OK per visualizzare il sottomenu Ricerca Automatica.
Selezionare per mezzo dei pulsanti tu l’opzione Sistema
Selezionare il sistema premendo i tasti 34:
L
: Secam L/L’ (Francia
Ricerca Automatica
BG
: PAL B/G, SECAM B/G (Europa/Europa Orientale)
Sistema
BG
I
: PAL I /II (Regno Unito, Irlanda)
Memorizza dal prog.
1
Partenza
DK
: PAL D/K, SECAM D/K (Europa Orientale)
Premere i tasti tu per selezionare Memorizza dal Prog
Selezionare poer mezzo dei tasti 34 il numero del programma dal quale si desidera abbia inizio la
memorizzazione.
Premere i tasti tu per selezionare Partenza
Premere il tasto OK per dare inizio alla sintonizzazione automatica.
Vengono memorizzate tutte le stazioni ricevute. Il nome della stazione viene memorizzato per quelle stazioni
che lo rendono disponibile, altrimenti alla stazione viene assegnato come nome il numero del canale
preceduto da C.
Per concludere la programmazione automatica premere il tasto Menu.
Quando la programmazione automatica viene completata il menu Sistemazione Programmi appare sullo
schermo. Consultare il paragrafo “Riordino dei Programmi” per riordinare i programmi menorizzati.
Premere il tasto TV/AV per tornare ai normali programmi televisivi.
3) Calcolo dell’area del rettangolo (dal libro di Geometria)
Detta B la base del rettangolo espressa in metri e H la sua altezza espressa in metri, l’area del rettangolo si
calcola applicando la seguente formula:
A = B⋅H
A.S. 08-09 ©Rauch
Scarica