"INFORMATICA GENERALE" DI Piero Gallo e Fabio Salerno

CAPITOLO 2 - PROBLEMI E ALGORITMI
IL MATERIALE
DEL PRESENTE
CAPITOLO
E' STATO INTEGRALMENTE
TRATTO
DAL
LIBRO DI TESTO
"INFORMATICA GENERALE" DI Piero Gallo e Fabio Salerno
VOLUME 1
PER UNA VISIONE PIU' GENERALE DELL' ARGOMENTO SE NE CONSIGLIA L'ACQUISTO
Problemi e algoritmi
•
-
.
.-
CONOSCENZE
• Concetto di dato e informazione
1 I problemi
Preparare una torta, calcolare l'area di un rettangolo, piantare fiori nel giardino, ordinare 100 numeri, sono tutti problemi. Alcuni possono apparire più semplici, altri più compiessi, altri ancora assurdi. Ma come facciamo a definire un problema facile, difficile o
assurdo? .Eprincipalmente: che cos'è un problema?
"
Un problema è un quesito che attende una risposta, detta soluzione.
Non è semplice trovare una soluzione a un problema. Spesso pensiamo di averla trovata
ma, dopo un'attenta verifica, ci rendiamo conto che non fornisce i risultati che attendevamo. Siamo quindi costretti a trovare una nuova soluzione e la cerchiamo per tentativi. Se
un tentativo non ha successo si riprova con un altro, magari sfruttando i punti validi della
soluzione fallita e facendo tesoro dell'insuccesso precedente. Il lavoro mentale volto alla
ricerca della soluzione prende il nome di processo risolutivo (Fig. Cl.1).
"
Un processo risolutivo
è un insieme di passi da compiere per giungere alla soluzione di
un problema.
Figura (1.1
"
"
Processo risolutivo
---~
Soluzione
Unità di apprendimento
La soluzione o risultato o risultato finale è l'obiettivo
"
Cl • Problemi e algor/tmi
che vogliamo raggiungere.
"
Per poter risolvere un problema sono necessarie alcune informazioni iniziali e indispensabili che chiameremo dati iniziali.
Consideriamo, ad esempio, l'emissione di un biglietto ferroviario da parte di un addetto in
un'agenzia viaggi, il signor Gino. La situazione può essere schematizzata nel seguente
modo (Fig. C1.2):
Figura C1.2
Dati iniziali:
Stazione di partenza
Stazione di arrivo
Data di partenza
Numero di persone in pa~enza
Orario ferroviario per
la consultazione dei treni
Problema: emettere
un biglietto ferrovìarro
,
J
Risultato finale:
biglietto
Processo risolutivo
ProbkIna:
Emettere un biglietto
..
! •
lo
'1.
Il cliente, entrando in agenzia, effettua
"vorrei un biglietto
Biglietto
la seguente richiesta:
per due persone da Roma a Milano per il 20 marzo"
Ottenuto il biglietto, il cliente lo-osserverà attentamente per verificare la correttezza delle
informazioni contenute. Il suo criterio di verifica consisterà nel controllare che (Fig. C1.3):
•
•
•
•
"
la stazione di partenza coincida con Roma;
la stazione di arrivo con Milano;
la data sia il 20 marzo;
il numero di persone sia due.
1/ criterio di verifica è un controllo
rispondenti
agli obiettivi
sui risultati
finali
per verificare
che questi siano
iniziali.
"
..
Figura C1.3
Problema:
Emettere un biglietto
Risultati finali
o
I·
~.
i-
a
,-
..ro.
l~
,.
---~
Dati iniziali
Biglietto
da Roma
a Milano
per 2 persone
il 20 marzo
t__
Verifica dei risultati
2 La formulazione dei
Formulare correttamente
un problema
roblemi
o affermare
che un problema
è ben formulato,
vuoi dire:
1. chiarire gli obiettivi
giungere;
finali, cioè lo scopo che la soluzione del problema
intende
rag-
Area tematica [ • Le best della proçrsmmszlons
2. possedere le informazioni iniziali, cioè le informazioni necessarie a ottenere la soluzione del problema;
3. individuare il criterio di verifica, cioè il modo con cui verificare che la soluzione ottenuta sia effettivamente quella cercata.
Un esempio di problema mal formulato è: "calcolare il Massimo Comun Divisore", Tale problema non potrà mai essere risolto in quanto mancano le informazioni iniziali e cioè i valori
numerici sui quali calcolare il Massimo Comun Divisore. Occorre pertanto riformularlo!
Il problema dell'emissione del biglietto ferroviario sarebbe stato mal formulato in uno
qualsiasi dei seguenti modi:
"vorrei un biglietto
"vorrei un biglietto
"vorrei un biglietto
per due persone"
per il 20 marzo"
per Milano".
Consideriamo un problema ben formulato. Può accadere che, nonostante vari tentativi di
ricerca della soluzione, non si riesca a trovarne neanche una. In questo caso ci si trova di
fronte a un problema non risolvi bile. Possiamo allora affermare che:
"
un problema non è risolvi bile se, pur essendo correttamente
soluzioni.
Ad esempio: "vorrei un biglietto
formulato,
non ammette
per due persone da Roma per la Luna"!
3 Descrivere il·processo risolutivo
La nostra attenzione si sofferma, ora, sulla descrizione del processo risolutivo di un dato
problema, ovviamente ben formulato.
Descrivere il processo risolutivo è un'attività creativa che richiede l'apporto di una persona in grado di risolverlo. Persone competenti diverse potrebbero ottenere diversi processi
risolutivi che raggiungono gli stessi risultati finali. In questo caso alcuni di questi processi
saranno più efficienti altri meno, alcuni più eleganti altri meno e così via.
Nella ricerca della soluzione di un problema non si possono definire criteri, ma si possono
proporre suggerimenti e strategie, che possono essere utilizzati in un considerevolenumero di situazioni problematiche .
. Pertanto, per giungere alla soluzione di un problema è necessario:
• conoscere il tema oggetto del problema. È indiscusso il grande vantaggio offerto dalla
conoscenza dell'argomento relativo al problema preso in esame. Occorre, cioè, una persona competente in materia;
• utilizzare metodi risolutivi già spèrimentati. È assolutamente sbagliato affrontare i problemi come casi isolati. "L'esperienza fa maestri", si dice. I problemi, nella loro complessità, hanno spesso elementi in comune tra loro, che possono essere sfruttati per adattare metodi risolutivi già individuati e sperimentati alle nuove situazioni problernatiche,
• scindere il problema in sottoproblemi. Risolvere un problema partendo dai soli dati iniziali potrebbe talvolta essere di estrema difficoltà. È buona norma individuare in un problema dei problemi più piccoli, in modo da concentrarsi sulla loro risoluzione che, ovviamente, sarà più semplice rispetto al problema generale. Se ad esempio, il problema è
quello di "preparare una torta gelato al cioccolato", è possibile individuare immediatamente tre sottoproblemi:
- preparare la base per una torta;
- preparare un gelato al cioccolato;
- farcire la torta con il gelato.
Il
------------~--------------------1·,
Unità di apprendimento
Cl • Problemi e algaritmi
Ogni sottoproblerna, a sua volta, potrebbe essere suddiviso in ulteriori sottoproblemi
sino a un livello ritenuto di semplice soluzione. Procedendo in questo modo noncorriamo il rischio di dover tenere sotto controllo troppe cose da fare contemporaneamente.
• ripercorrere il cammino all'indietro, Spesso accade che nel cammino percorso durante un
processo risolutivo ci accorgiamo che la strada seguita non porta a nessuna soluzione. In
questo caso è opportuno ripercorrere i passi, tornare indietro a un punto del cammino
dal quale si possa ripartire per un'altra strada.
LI Chi risolve il croblema
Quando si risolve un problema è sempre possibile far riferimento
"
a due tipi di attori:
il risolutore, cioè colui che definisce la soluzione necessaria per risolvere il problema
attraverso il processo risolutivo;
.
l'esecutore (o processore), cioè colui che esegue le azioni descritte dal risolutore per
giungere concretamente alla soluzione del problema.
Il risolutore è la persona che produce il processo risolutivo per un dato problema, mentre
l'esecutore è la persona senza esperienza e senza iniziativa che sa soltanto eseguire le azioni elementari suggerite dal risolutore(Fig. (1.4).
Figura C1.4
Risolutore ed
esecutore
Processo
risolutivo
umano
Risolutore:
Obiettivo
iniziale
Luigi
-,.---_ .....•
I
~
.
D_at_i
_in_iz_ia_li_---'I---+
Esecutore:
Risultati finali
Gino
Verifica dei risultati
Fornire le azioni da compiere è un'attività creativa e pertanto propria degli esseri umani,
mentre eseguire le azioni è un'attività di per sé non creativa e pertanto propria delle macchine, in particolare dei computer.
Spesso l'esecutore sarà identificato non più con una persona ma con il computer (Fig. (1.5)!
"
Rrea tematica
Figura C1.5
Processo
Risolutore:
Obiettivo
iniziale
risolutivo
Luigi
I
__
[ • Le basi della programmazione
I~
~D_a_ti_i_ni_Zia_l_i
__
-.lt...
Risultati
finali
-,.-----'
Esecutore
Verifica
dei risultati
5 Descrizioni rigorose
Facciamo un esempio di processo risolutivo. Potremmo considerare un qualsiasi problema,
sia esso di tipo matematico sia preso dalla vita di tutti i giorni, poiché le considerazioni che
faremo hanno validità generale.
Consideriamo, allora, il seguente problema:
Problema 1: "Cucinare la pasta asciutta per la propria famiglia"
Come possiamo immaginare, è ben diverso cucinare pasta asciutta per 2 persone o per 8
persone. È evidente che manca un dato iniziale importantissimo:
il numero di persone di
cui è composta la nost-ra famiglia.
Indichiamo genericamente con N questo dato iniziale. Quindi:
Dati iniziali
')
N: numero di persone di cui è composta
. Un primo processo risolutivo
seguenti passi:
1.
2.
3.
4.
5.
6.
7.
8.
la propria famiglia
che il risolutore
prendere una pentola adeguata
aggiungere dell'acqua nella pentola
accendere il fuoco e mettere la pentola
attendere che l'acqua bolla
aggiungere il sale
versare la pasta nella pentola
attendere che sia cotta
scolare la pasta togliendo l'acqua.
potrebbe
formulare
può essere composta dai
sul fornello
Questo processo risolutivo a prima vista sembrerebbe sufficiente a descrivere la soluzione
del nostro problema, ma osserviamolo meglio!
Nel passo 1 si parla di "pentola adeguata". Ma cosa vuoi dire adeguata? Ciò che può essere adeguato per una persona potrebbe non esserlo per un'altra. Questo aggettivo risulta, pertanto,
ambiguo e, quindi, non eseguibile dall'esecutore "stupido" da noi indicato. Come ambigue
sarebbero le frasi: "una pentola sufficiente" oppure "una pentola giusta". È ambigua anche la
136
Unità di apprendimento
O • PrDblemi e algDritmi
frase: "una pentola per N persone". Come fa l'esecutore a stabilire quanto deve essere grande
una pentola per N persone? Possiamospiegarglielo trasformando il passo 1 nel modo seguente:
1. prendere una pentola da N * L litri dove L è il numero di litri a persona (ad esempio
L 0,5 , cioè, mezzo litro a persona).
=
L è, ora, un nuovo dato iniziale, che andiamo ad aggiungere
nostro problema.
all'insieme dei dati iniziali del
Dati iniziali
N: numero di persone di cui è composta la propria famiglia
L: litri di acqua per persona
Non è sempre immediatamente chiaro quali siano i dati iniziali di un problema, anzi, spesso ci si arriva durante la stesura del processo risolutivo. Riscriviamo, allora, anche il passo
2 che, ora, diventa:
2. aggiungere
N
* L litri di acqua nella pentola
I passi 1 e 2 così riscritti ci aiutano a formalizzare il problema e il processo risolutivo e a
dare rigore alle nostre descrizioni.
Osserviamo, ora, il passo 3. Tale passo non è sufficientemente dettagliato. Cosa vuoi dire per
un esecutore (stupido) attendere che l'acqua bolla? Occorre essere più precisi e scrivere:
3. attendere finché la temperatura
ge i 100 gradi centigradi
dell'acqua (misurata con un termometro)
raggiun-
Anche gli altri passi devono essere riscritti per evitare ambiguità: occorre essere precisi nella
descrizione del da farsi. Una possibile riscrittura del processo risolutivo, pertanto, può essere:
Processo risolutivo
1. prendere una pentola da N * L litri dove L è il numero di litri a persona (ad esempio
L 0,5 mezzo litro a persona)
2. aggiungere N * L litri di acqua nella pentola
3. accendere il fuoco e mettere la pentola sul fornello acceso
4. attendere finché la temperatura dell'acqua (misurata con- un termometro) raggiun. gei 100 gradi centigradi
5. aggiungere N * 5 grammi di sale
6. versare N * G grammi di pasta nella pentola
7. attendere M minuti
8. scolare la pasta togliendo l'acqua.
=
dove:
5 indica la quantità in grammi di sale per ogni persona;
M indica il tempo in minuti di cottura;
G indica i grammi di pasta per persona.
I dati iniziali sono ora i seguenti:
Dati iniziali
N: numero di persone
L: litri di acqua per persona
G: quantità di pasta per persona
S: grammi di sale per persona
M: tempo di cottura
Rrea tematica
[ • Le basi della programmazione
Il processo risolutivo (descritto da un risolutore) è ora rigoroso nel senso che:
• non è ambiguo;
• è più completo;
• è sufficientemente
dettagliato.
Solo in questo modo l'esecutore può compiere le azioni necessarie a risolvere il problema.
Il problema appena analizzato è ben formulato; infatti, per quanto detto:
1. l'obiettivo finale è "cucinarela pasta asciutta" ed è, pertanto, esplicito;
2. il criterio di verifica sarà controllare che il risultato sia: "pasta asciutta correttamente
cucinata: cioè al dente, non scotta, giustamente salata ecc.";
3. i dati iniziali indispensabili per proseguire nel processo risolutivo sono tutti presenti e cioè:
N: numero di persone;
L: litri di acqua per persona;
G: grammi di pasta per persona;
S: grammi di sale per persona;
M: tempo di cottura.
L'assenza di uno solo di tali dati non consentirebbe all'esecutore di cucinare la pasta.
Notiamo, infine, che il processo risolutivo descrive come cucinare un qualsiasi tipo di pasta
e non solo spaqhetti o farfalline. Si dice che tale soluzione è generale.
"
Un processo risolutivo è generale quando risolve problemi simili, cioè, problemi
fanno parte di una stessa famiglia di problemi detta classe di problemi.
che
"
Nel nostro esempio la classe di problemi è: "cucinare pasta asciutta". Se, invece, dobbiamo
risolvere un'equazione di secondo grado, descriveremo come risolvere qualunque equazione di secondo grado e non solo una specifica equazione. Questo a condizione che ci
forniscano, ogni volta, i coefficienti dell'equazione di cui vogliamo trovare le radici.
6 L'al oritmo
Sappiamo che un processo risolutivo è caratterizzato da una serie di passi. Per essere più
precisi, al termine passo dobbiamo sostituire quello di azione.
Si definisce azione un qualunque evento di cui sono noti il soggetto, detto esecutore,
l'oggetto, o gli oggetti, su cui l'esecutore deve agire e la trasformazione prodotta su di
"
essi in un'unità finita di tempo.
La frase Giuseppe mangia un ananas puntualizza un'azione, in quanto, in un'unità finita
di tempo, Giuseppe (esecutore) opera una trasformazione sull'ananas (oggetto). Se poniamo l'accento sull'azione svolta e su come Giuseppe mangia un ananas, risulta evidente che
tale azione è composta da azioni più semplici. Dettagliatamente,
infatti, l'azione in questione si può scomporre nel seguente modo:
•
•
•
•
Giuseppe
Giuseppe
Giuseppe
Giuseppe
prende un ananas;
sbuccia l'ananas;
taglia a fette l'ananas;'
mastica l'ananas.
Le azioni devono awenire in sequenza, una dopo l'altra (non si ritiene quindi possibile che
Giuseppe tagli a fette l'ananas e, contemporaneamente,
lo mastichi). È preferibile ordinare tali azioni numerandole.
138
"
Unità di apprendimento
"
O
+ Problemi
e etaotttrnt
Un'azione si dice elementare quando non può essere scomposta in altre azioni più semplici.
"
Prendiamo in esame il seguente problema:
Problema 2: "Prelevare una somma dal bancomat"
Dati iniziali
C: codice segreto
I: importo da prelevare
Per descrivere il processo risolutivo
azioni elementari:
1.
2.
3.
4.
5.
possiamo utilizzare
introdurre la carta nel lettore
digitare il codice segreto (
digitare l'importo da prelevare I
ritirare la carta dal bancomat
prelevare le banconote
Abbiamo ora tutti gli elementi per comprendere
"
la seguente sequenza ordinata di
Si definisce algoritmo una sequenza finita e
no la soluzione di un problema (Fig. (1.6).
la seguente definizione:
ordinata di azioni elementari che descrivo"
Figura (1.6
Algoritmo
:: Azione 1
:: Azione 2
,
---+ ·.,
• I
··,:
• I
:! Azione
Risolutore:
Obiettivo
iniziale
Luigi
I
___
N
D_a_t_i
i_ni_Zi_al_i
__
I~
--,.-._-------..
Risultati finali
Esecutore
Verifica dei risultati
Affinché si possa parlare di algoritmo è necessario che vengano rispettate le caratteristiche fondamentali viste nei paragrafi precedenti. Un algoritmo deve essere infatti:
• finito: il processo risolutivo descritto dall'algoritmo deve essere çomposto da un numero
finito di azioni elementari;
• univoco o non ambiguo o preciso: ogni azione deve essere definita nei suoi effetti rigorosamente e senza ambiguità per l'esecutore;
• generale: deve essere valido non solo per un particolare problema, ma per tutti i problemi di una stessa classe;
• completo: deve considerare tutti i casi possibili che si possono verificare durante l'esecuzione e, per ogni caso, indicare la soluzione da seguire;
Area tematica [ • Le basi della aroarsmmeztone
• osservabile nei risultati: deve esserci riscontro oggettivo del risultato, Nell'esempio del
problema del "cucinare la pasta" ottengo della pasta da mangiare;
• deterministico: a ogni unità finita di tempo l'esecutore deve scegliere e compiere una e
una sola azione, Si dice anche che partendo dagli stessi dati iniziali, l'esecuzione dell'algoritmo deve fornire sempre gli stessi risultati finali,
Non è detto che un algoritmo debba sempre terminare, È possibile, infatti, avere algoritmi che pur avendo un numero finito di azioni le eseguono infinite volte e quindi non terminano mai. Si pensi, ad esempio, all'algoritmo che esegue la divisione tra due numeri
naturali, D (dividendo) e d (divisore), Se D vale 1 e d vale 3 (cioè stiamo eseguendo 1 "diviso" 3), notiamo che avremo come quoziente un numero periodico 0,333333,., (0,3),
l'algoritmo che effettua la divisione (pur avendo un numero finito di azioni elementari)
non si fermerà, perché il quoziente è periodico, Per farlo fermare dovremmo imporre
all'algoritmo lo stop dopo un certo numero di cifre decimali per il quoziente, L'algoritmo,
quindi, non terminerà per particolari ingressi.
TItermine algoritmo deriva dal nome di
un matematico arabo del IX secolo: Abu
Leonardo da Pisa, un altro grandissimo
matematico vissuto intorno agli inizi del
XIll secolo e universalmente riconosciuto
con il 'soprannome di Fibonacci,
rtferendosì alle importanti scoperte del
matematico arabo era solito semplificare il
suo nome in questo modo: "Algoritmo
diceva che...". Considerato che Abu Ja'far
Mohammed ibn Musa al-Kowarizmi Si era
sempre interessato allo studio dei
procedimenti aritmetici di calcolo
necessari per risolvere i problemi, il
termine algorìtmo venne utilizzato per
indicare questo tipo di procedimento.
Ja'far lIIIohammed ibn lIIIusa al.-Kowarizmi
(tradotto dall'arabo, il nome ha il
seguente significato: padre dì Ja'far,
Maometto, figlio di Mosè, nativo di
Kowarizmi, dove Kowarizmi è il nome
dell'odierna città russa !p;)iv~)\
Nell'825, questo personaggio pubblicò due
opere: una di aritmetica e una intitolata
Kitab Al-jabr Wal Muqabala. Dalla parte
centrale di quest'ultima ebbe origine la
parola inglese algebra, mentre il termine
algoritmo deriva da modifiche e
adattamenti del nome del matematico.
Riconsideriamo il problema (e il relativo algoritmo) del "prelievo dal bancomat" introdotto nel paragrafo precedente. Le azioni descritte in quel semplice algoritmo sono perfetta-.
mente applicabili se:
• il bancomat funziona correttamente;
• il codice segreto viene inserito correttamente.
In altre parole l'algoritmo che descrive la soluzione del problema 2 non è completo!
Trasformiamolo,
allora, nel modo riportato di seguito, Per semplicità, supporremo che, in
caso di inserimento errato del codice segreto, il bancomat non consenta di ridiqitarlo.
'1. Verifica che il bancomat funzioni correttamente
9. Cercare un altro bancomat
2. Introdurre la carta nel lettore
3. Digitare il codice segreto
4. Verifica che il codice sia corretto
È corretto·
------.
8. Operazione
terminata
5. Digitare l'importo da prelevare
6. Prelevare le banconote
7. Ritirare la carta dal bancomat
Unità di apprendimento
Cl • Problemi e algoritmi
Questa versione ha una nuova veste grafica. Per facilitare la lettura abbiamo utilizzato le
frecce per visualizzare i percorsi logici presenti nell'algoritmo.
Abbiamo, inoltre, raggruppato le azioni da eseguire al verificarsi di determinate situazioni.
7 La rappresentazione degli algoritmi
Per indicare le azioni negli algoritmi analizzati finora abbiamo utilizzato la lingua italiana che
. è un linguaggio naturale. Questo linguaggio però pur essendo molto utile per chiarire le idee
sul problema, non si presta bene a una precisa descrizione dell'algoritmo.
Il linguaggio naturale, infatti, contiene sinonimi, ambiguità e, talvolta, anche eccezioni, metafore, allegorie.
Sedobbiamo affermare che uno studente è molto volenteroso possiamo anche utilizzare gli aggettivi:
zelante, operoso, attivo, alacre, sollecito, dinamico, solerte ecc. Inoltre, se proviamo a leggere la frase:
"Ieri sera ho visto Giuseppe con un conoscente"
vediamo che può essere interpretata in due modi diversi. Vale a dire:
"Ieri sera ho visto Giuseppe che era in compagnia
di un conoscente"
oppure:
"Ieri sera ho visto Giuseppe mentre ero in compagnia
di un conoscente".
Un altro esempio di ambiguità sono le istruzioni 1 e 2 del processo risolutivo relativo al problema
"Cucinare la pasta asciutta per la propria famiglia":
1. prendere una pentola adeguata;
2. aggiungere dell'acqua nella pentola.
Per rappresentare
• al formalismo
• al formalismo
inglese).
un algoritmo
possiamo ricorrrere:
dello pseudolinguaggio;
di diagrammi a blocchi (abbreviato
in DaB o detto
anche flow-chart
in
Diamo uno sguardo alle figure Cl.7a e 'C'l.Zb. La figura Cl.7a riporta una descrizione formale dell'algoritmo
detta pseudocodice perché, pur essendo strutturata come un codice
scritto in un linguaggio di programmazione,
si serve di un linguaggio molto vicino a quello naturale, detto pseudolinguaggio
o linguaggio di progetto. L'attività di scrittura prende
il nome di pseudocodifica. Tale attività è una fase intermedia che si pone tra la fase di analisi del problema e quella di codifica in un vero e proprio linguaggio di programmazione.
Scopo principale della pseudocodifica è di portare il risolutore a esprimere le proprie istruzioni in una forma naturale, utilizzando frasi ed espressioni elementari della lingua italiana. Ciò permette di concentrarsi sulla risoluzione logica del problema, invece che sulla
forma e sui vincoli da rispettare nella sua enunciazione. Nella prossima unità vedremo le
regole da seguire per scrivere correttamente
algoritmi in pseudolinguaggio.
Nella figura Cl.7b si ricorrere, invece, ai Diagrammi a Blocchi (abbreviato in DaB o detto
anche flow-chart
in inglese). Un DaB è una descrizione grafica dell'algoritmo
mediante
appositi simboli che mette in evidenza il flusso di esecuzione delle istruzioni.
Figura C1.7a
Algoritmo: Prelievo dal bancomat (in pseudocodice).
1.
2.
3.
141
SE il bancomat è in servizio
ALLORA
Introdurre la carta nel lettore
Digitare il codice segreto
Area tematica
4.
[ • Le basi della programmazione
SE il codice è corretto
ALLORA
5.
6.
7.
Digitare l'importo da prelevare
Ritirare le banconote
. Ritirare la carta dal bancomat
ALTRIMENTI
8.
Operazione terminata
FINESE
ALTRIMENTI
9.
Cercare un altro bancomat
FINESE
Figura C1.7b
Vero
Nella prossima unità vedremo anche le regole da seguire per scrivere correttamente
ritmi in DaB.
algo-
B Dall'algoritmo al programma
Poiché il nostro esecutore è il computer, dovremmo trasformare l'algoritmo
dolinguaggio, o un DaB, in uno scritto in un linguaggio di programmazione
"
Un algoritmo scritto in un linguaggio
ma sorgente e l'attività di traduzione
scritto in pseuvero e proprio.
di programmazione prende il nome di programprende il nome di codifica.
Il programmatore è la figura professionale che esegue l'attività di codifica (Fig. C1.8).
Da un problema si possono ottenere diversi algoritmi risolutivi; chiameremo equivalenti
due algoritmi se, a partire dagli stessi dati iniziali, producono gli stessi risultati finali.
Un algoritmo può essere tradotto in programmi diversi che generano gli stessi risultati finali.
La situazione è allora riassunta nella figura (1.9.
142
"
Unità di apprendimento
Figura C1.8
::
'.
::
:•
,.
:: Azione 1
:; Azione 2
·,
·:
·:
··,,
Obiettivo iniziale
,.
·
::
:.
::
,'.
:; Istruzione N
r
:: Istruzione 1
:: Istruzione 2
.,
,
,
,,
·
..:
.,
Codifica
Programmatore:
Algoritmo:
Sequenza
di azioni
elementari
:.
,.
,.
:.
,.
:; Azione N
Risolutore: Luigi
O • Problemi e algoritmi
Programma:
Sequenza
di istruzioni
.
,.
,
:,..
'.
,
.
Marco
--,..'--_ ...•
-----....
Dati iniziali
Risultati finali
Esecutore
Verifica dei risultati
Figura C1.9
Problema
Algoritmo1
Programma1
I
Programma21
Un processo risolutivo è un insieme
di passi da compiere per giungere alla
soluzione di un problema.
Il criterio di verifica è un controllo
sui risultati finali per verificare che
questi siano rispondenti agli obiettivi
iniziali.
Formulare correttamente un problema, o affermare che un problema
è ben formulato, vuoi dire:
- chiarire gli obiettivi finali, cioè lo
scopo che la soluzione del problema intende raggiungere;
- individuare il criterio di verifica,
cioè il modo con cui verificare che
la soluzione ottenuta sia effettiva-
143
I
Algoritmo2
ProgrammaM
I
AlgoritmoN
Programma 1
mente quella cercata;
- -possedere le informazioni inizia'i,
cioè le informazioni necessariea
ottenere la soluzione del problema.
Un problema non è risolvi bile se,
pur essendocorrettamente formulato, non ammette soluzioni.
Il risolutore è colui che fornisce il
processorisolutivo mentre l'esecutore
è colui che compie materialmente le
azioni da eseguire.
Forpire le azioni da compiere è
un'attività creativa e pertanto propria
degli esseri umani mentre eseguire le
azioni è un'attività di per sé non creativa e pertanto propria delle macchi-
I
Pr,ogr~mma2
I
I
ProgrammaK
I
ne, in particolare dei computer.
Si definisce azione un qualunqu~
evento di cui sono noti il soggetto
detto esecutore, l'oggetto, o gli
oggetti, su cui l'esecutore deve agire
e la trasformazione prodotta su di
essi in un'unità finita di tempo.
Si definisce algoritmo una sequenza finita e ordinata di azioni elementari che descrivono la soluzione di un
problema.
Un algoritmo scritto in un linguag- .".~.
gio comprensibile al computer prende
il nome di programma e l'attività dì
traduzione prende il nome di
codifica.