Professional Documents
Culture Documents
III
Algoritmi
e
Programmi
Alcuni esempi
non
si
riesce
a
ricavare
alcuna
indicazione
sulla
rice1a
da
seguire
che,
tra
laltro,
non
facile
individuare
in
un
libro
di
cucina
per
la
sua
formulazione
generica
. un
problema
con
una
soluzione
nota
che
per
non
arriva
a
terminazione
in
quanto
le
cifre
da
calcolare
sono
innite
..
si
pu
osservare
che
esistono
sia
soluzioni
tradizionali
basate
sulla
posta
ordinaria,
che
soluzioni
pi
moderne
quali
i
messaggi
SMS
dei
telefoni
cellulari
o
i
messaggi
di
posta
ele1ronica
Bisogna
quindi
scegliere
la
soluzione
pi
conveniente:
ad
esempio
quella
che
presenta
un
costo
pi
basso
. chiaro esempio di problema che non amme1e soluzione: o, come si dice, non risolvibile
Schema di soluzione
Algoritmo
ed
Esecutore
algoritmo,
esecutore
Conce1o
di
Automa
Elaborazione
conce1o
matema6co
di
funzione
Y=F(X)
in
cui
X
sono
i
da6
iniziali
da
elaborare,
Y
i
da6
nali
o
risulta6
e
F
la
regola
di
trasformazione.
Rappresentazione
a
grafo
Grafo
un
cerchio
per
rappresentare
gli
sta6
del
sistema
archi
orienta6
ad
indicare
le
transizioni
un
modello
fondamentale
nella
teoria
dellinforma6ca,
in
quanto
perme1e
di
raggiungere
risulta6
teorici
sulla
calcolabilit
e
sulla
complessit
degli
algoritmi.
Macchina
di
Turing
E
un
automa
con
tes6na
di
scri1ura/le1ura
su
nastro
bidirezionale
potenzialmente
illimitato.
una
memoria
cos6tuita
da
un
nastro
di
dimensione
innita
diviso
in
celle;
ogni
cella
con6ene
un
simbolo
oppure
vuota;
una
tes6na
di
le1ura
scri1ura
posizionabile
sulle
celle
del
nastro;
un
disposi6vo
di
controllo
che,
per
ogni
coppia
(stato,
simbolo
le1o)
determina
il
cambiamento
di
stato
ed
esegue
unazione
elabora6va.
Denizione
Formale
denita
dalla
quintupla:
(A,
S,
fm
,
fs,
fd)
Esempio
di
MdT
Costruiamo
una
macchina
che
valu6
se
il
numero
di
occorrenze
del
simbolo
1
in
una
sequenza
di
0
e
1
pari.
Consideriamo
in
aggiunta
che
la
sequenza
debba
iniziare
e
terminare
con
un
simbolo
speciale,
ad
esempio
@.
Rappresentazione
della
sequenza:
@0101110@
Rappresentazione
del
risultato:
Unit di controllo
si
arres6
trasformi
un
nastro
t
in
uno
t
Conseguenze
se
per
problema
esiste
un
algoritmo
risolvente
questo
indipendente
dal
sistema
che
lo
esegue
.
se
vero
che
per
esso
esiste
una
macchina
di
Turing;
Calcolabilit
La
teoria
della
calcolabilit
cerca
di
comprendere
quali
funzioni
amme1ono
un
procedimento
di
calcolo
automa6co.
Nella
teoria
della
calcolabilit
la
tesi
di
Church-Turing
unipotesi
che
intui6vamente
dice
che
se
un
problema
si
pu
calcolare,
allora
esister
una
macchina
di
Turing
(o
un
disposi6vo
equivalente,
come
il
computer)
in
grado
di
risolverlo
(cio
di
calcolarlo).
Pi
formalmente
possiamo
dire
che
la
classe
delle
funzioni
calcolabili
coincide
con
quella
delle
funzioni
calcolabili
da
una
macchina
di
Turing.
Tra1abilit
calcolabilit
tra1abilit
Tra1abilit
e
Complessit
Il
conce1o
di
tra1abilit
legato
a
quello
di
complessit
computazionale
Spazio
e
Tempo
La
complessit
di
un
algoritmo
corrisponde
a
una
misura
delle
risorse
di
calcolo
consumate
durante
la
computazione
ed
tanto
pi
elevata
quanto
maggiori
sono
le
risorse
consumate.
Complessit
spaziale
.
quan6t
di
memoria
necessaria
alla
rappresentazione
dei
da6
necessari
allalgoritmo
per
risolvere
il
problema;
Complessit temporale
dinamiche
se
tengono
conto
sia
delle
cara1eris6che
stru1urali
dellalgoritmo
che
dei
da6
di
input
su
cui
esso
opera
Complessit
Asinto6ca
Interessa
sapere
come
lordine
di
grandezza
del
tempo
di
esecuzione
cresce
al
limite,
ossia
per
dimensioni
dellinput
sucientemente
grandi
quando
la
funzione
f(n)
tende
ai
suoi
asinto6.
Tipi
di
Complessit
A
seconda
della
funzione
f(n)
asinto6ca,
si
possono
individuare:
complessit
di
6po
polinomiale
n
(lineare)
n2,
n3,
n5,
.
Un esempio
Soluzione
Stru1ure
di
Controllo
Si
usano
naturalmente
costru6
che
ssano
l'ordine
in
cui
le
diverse
azioni
devono
essere
svolte.
Il
pi
semplice
tra
essi
quello
che
stabilisce
che
le
azioni
devono
essere
svolte
una
dopo
l'altra.
(sequenza)
un
altro
costru1o
stabilisce
che
alcune
azioni
devono
essere
svolte
solo
se
si
vericano
determinate
condizioni
(selezione)
la
frase
"se
la
parola
sbagliata,
allora
correggi,
altrimen6
non
fare
niente"
prescrive
la
correzione
soltanto
in
presenza
di
un
errore.
Tipi
di
Istruzione
Istruzioni:
Cara1eris6che
delle
operazioni
di
un
algoritmo
nitezza:
descrivibilit:
riproducibilit:
comprensibilit:
Sequenza
Dinamica
L'esecuzione
di
un
algoritmo
da
parte
di
un
esecutore
si
traduce
in
una
successione
di
azioni
che
vengono
ee1uate
nel
tempo.
Si
dice
che
l'esecuzione
di
un
algoritmo
evoca
un
processo
sequenziale,
cio
una
serie
di
even6
che
occorrono
uno
dopo
l'altro,
ciascuno
con
un
inizio
e
una
ne
iden6cabili.
Si
denisce
sequenza
di
esecuzione
la
descrizione
del
processo
sequenziale.
La
sequenza
di
esecuzione
l'elenco
di
tu1e
le
istruzioni
eseguite,
nell'ordine
di
esecuzione,
e
per
questo
mo6vo
viene
anche
de1a
sequenza
dinamica.
2 sequenze
solitario sequenze
Linguaggio
di
Programmazione
Il
linguaggio
di
programmazione
una
notazione
formale
per
descrivere
algoritmi
e,
come
ogni
linguaggio,
dotato
di
un
alfabeto,
un
lessico,
una
sintassi
ed
una
semanEca.
L'aspe1o
formale
del
linguaggio
si
manifesta
sopra1u1o
nella
presenza
di
regole
rigide
per
la
composizione
di
programmi
a
par6re
dai
semplici
cara1eri
dell'alfabeto.
L'insieme
di
queste
regole
cos6tuisce
la
grammaEca
del
linguaggio.
I linguaggi assemblaEvi
Metalinguaggi
.
linguaggi
con
i
quali
si
presentano
le
regole
della
grammaEca
di
un
qualsiasi
linguaggio.
Un
metalinguaggio
descrive
quindi
le
propriet
sintaJche
e
seman6che
rela6ve
a
un
altro
linguaggio
o
al
linguaggio
stesso.
BNF
-
cara1eris6che
Il
linguaggio
denito
da
una
BNF
cos6tuito
da
tu1e
le
sequenze
di
simboli
terminali
o1enute
applicando
questo
processo
a
par6re
dal
simbolo
iniziale
di
alto
livello.
EBNF
Una
estensione
della
BNF,
de1a
Extendend
BNF
(EBNF),
stata
introdo1a
da
Niklaus
Wirth
per
specicare
la
sintassi
del
linguaggio
di
programmazione
Pascal.
Nella
EBNF
i
simboli
{,},
(,
)
e
*
possono
comparire
nel
lato
destro
di
una
frase.
Una
sequenza
di
simboli
racchiusa
fra
{
e
}
indica
che
tale
sequenza
opzionale,
mentre
un
simbolo,
o
una
sequenza
racchiusa
fra
(
e
),
seguito
da
*,
indica
un
numero
arbitrario
di
ripe6zioni
della
sequenza,
incluso
0.
Carte
SintaJche
Sono
strumento
di
6po
graco
usate
per
la
descrizione
delle
regole
del
linguaggio.
Una
carta
sintaJca
un
grafo
in
cui
linee
orientate
uniscono
delle
scatole
di
formato
dierente:
seguendo
le
frecce
ed
interpretando
opportunamente
il
contenuto
delle
scatole
si
costruiscono
frasi
sintaJcamente
corre1e.
Programmazione
Stru1urata
Il
ruolo
degli
algoritmi
fondamentale
se
si
pensa
che
essi
sono
indipendenE
sia
dal
linguaggio
in
cui
sono
espressi
sia
dal
computer
che
li
esegue.
Si
pensi
ad
una
rice1a
per
una
torta
alla
fru1a:
il
procedimento
lo
stesso
indipendentemente
dall'idioma
usato;
la
torta
prodo1a
(dovrebbe
J
)
la
stessa
indipendentemente
dal
cuoco.
La
programmazione
Stru1urata
L'obieJvo
principale
della
programmazione
stru1urata
consiste
nella
costruzione
di
programmi
con
le
seguen6
cara1eris6che:
Cara1eris6che:
modularit
La
modularizzazione
ci
dice
che
un
programma
deve
essere
composto
di
moduli
funzionali.
Ogni
modulo
funzionale
deve
possedere
un
singolo
e
ben
precisato
compito.
Ogni
modulo
deve
essere
dotato
di
un
solo
ingresso
e
di
una
sola
uscita.
Bo1om
Up
parte
considerando
il
sistema
reale
a
disposizione
e
creando
man
mano
moduli
elementari
che
opportunamente
integra6
formano
moduli
capaci
di
compiere
operazioni
pi
complesse.
Il
procedimento
con6nua
no
a
quando
stato
creato
un
modulo
che
corrisponde
proprio
alla
soluzione
del
problema
Fasi
fase
di
analisi
dei
requisi=
e
delle
funzioni
fase
di
progeCo
analisi
cri=ca
della
soluzione
Analisi
Capacit
di
acquisire
tu1e
le
informazioni
necessarie
alla
comprensione
del
problema
e
di
stru1urarle
in
un
modello
che
esprima,
in
un
linguaggio
adeguato,
una
rappresentazione
coerente
e
completa
di
cosa
si
deve
fare.
Le
informazioni
devono
essere
ricavate
..
dai
colloqui
con
gli
uten6
di
qualsiasi
livello,
ovvero
con
coloro
che
sono
coinvol6
nell'uso
del
programma
sia
a
livello
direJvo
che
esecu6vo,
da
un
esame
dell'ambiente
in
cui
il
programma
sar
u6lizzato,
Requisi6
i
requisi6
funzionali
cosa
deve
fare
il
programma
e
su
quali
da6
deve
operare
Corre1ezza
necessario
vericare
che
ogni
aspe1o
delle
speciche
abbia
un'unica
interpretazione
nel
contesto
delle
applicazioni
che
si
descrivono
ed
ee1uare
delle
esemplicazioni
degli
eeJ
delle
trasformazioni
tra
da6
di
ingresso
e
da6
di
uscita.
Tali
esemplicazioni
cos6tuiscono
la
base
per
un
confronto
del
programma
con
l'utente
che
perme1e
di
vericare
la
corre1ezza
delle
speciche.
Proge1o
La
fase
di
proge1o
pu
iniziare
solo
dopo
un'accurata
fase
di
denizione
dei
requisi6.
Si
ar6cola
nelle
aJvit
di
ranamento
successivo
dei
da=
e
dell'algoritmo.
Costruire
un
algoritmo
equivale
a:
Come
procedere
Un
modo
di
procedere
quello
per
livelli
di
astrazione.
L'astrazione
consiste
nell'estrazione
di
de1agli
essenziali
mentre
vengono
omessi
i
de1agli
non
essenziali.
Da6
e
Funzioni
Un'altra
dis6nzione,
in
senso
orizzontale,
avviene
fra
da6
e
funzioni
che
rappresentano
gli
aspeJ
duali,
ma
stre1amente
lega6,
di
ogni
problema
che
si
esamina;
tale
separazione
dovuta
sia
a
ragioni
intrinseche
Ci consente di o1enere:
Documentazione
esterna
E
il
primo
livello
di
documentazione
e
va
compilato
preliminarmente
nella
fase
di
analisi
dei
requisi6.
Descrive
soltanto
il
"cosa"
fa
il
programma
e
non
il
"come"
lo
fa.
Deve
segnalare
de1agli
opera6vi
tali
da
rendere
autonomo
l'utente
del
programma
nell'uso
dello
stesso.
a)
funzionalit
esterne;
b)
aJvazione
del
programma;
c)
diagnos6che
di
errore;
d)
congurazione
richiesta
del
sistema;
e)
indicazione
sull'installazione
del
programma;
f)
versione
e
data
di
aggiornamento.
Documentazione
interna
descrive
la
stru1ura
interna
del
programma
in
termini
di
scelte
sulle
stru1ure
da6
e
sull'algoritmo.
evidenziazione
della
stru1ura
del
programma
mediante
l'uso
dell'indentazione
documentazione top-down