Introduzione ai Diagrammi di Flusso Chi sono? Come contattarmi

annuncio pubblicitario
Chi sono? Come contattarmi?
Introduzione ai Diagrammi di
Flusso
Matteo Baldoni
Dipartimento di Informatica
Università degli Studi di Torino
Corso Svizzera, 185
I-10149 Torino (ITALY)
e-mail: [email protected]
URL: http://www.di.unito.it/~baldoni
Tel.: +39 011 670 67 56
Fax.: +39 011 75 16 03
Introduzione alla Programmazione e
JavaScript
Pagina del corso:
http://www.di.unito.it/~baldoni/didattica/
“Sono nato a Torino nel 1968, nel febbraio
1993 mi sono laureato con lode in Scienze
dell’Informazione e nel febbraio 1998 sono
diventato Dottore in Ricerca in Informatica.
Dal luglio 1999 sono ricercatore in
Informatica presso il Dipartimento di
Informatica dell’Università degli Studi di
Torino.”
Introduzione ai Diagrammi di Flusso
Obiettivi di questo corso
■
■
Gli Algoritmi
■
Introduzione alla programmazione:
– Cos’è un algoritmo
– Cos’è un programma
– Diagrammi di flusso
– Concetto di variabile
– Linguaggi di programmazione
– Interpreti, compilatori
Introduzione a JavaScript (client-side):
– Core language
– Oggetti
– Document Object Model (DOM)
■
Un algoritmo è una sequenza di passi che sono
necessari per risolvere un determinato problema: una
successione finita di istruzioni che definiscono le
operazioni da eseguire sui dati assegnati, per
produrre risultati.
Ogni operazione definisce una azione compiuta sui
dati d’ingresso per produrre dati in uscita
Risultato
Dati di Input
Matteo
Marco
Giovanni
Alberto
Luisa
Carlo
Cristina
Introduzione ai Diagrammi di Flusso
3
I Programmi
■
2
Algoritmo di Ordinamento
Alberto
Carlo
Cristina
Giovanni
Luisa
Matteo
Marco
Introduzione ai Diagrammi di Flusso
4
Scrivere programmi
Un programma è la traduzione in un determinato
linguaggio di programmazione dell’algoritmo risolutivo
del problema in esame.
■
Analisi del problema da risolvere (dati iniziali, risultati
attesi, ecc.)
■
Sviluppo dell’algoritmo come sequenza di passi che
trasformi i dati iniziali nei risultati desiderati
■
Codifica dell’algoritmo in un linguaggio di
programmazione
Java
Pascal
class ordinamenti (…)
{
…
}
program ordina (input, output);
begin
…
end.
C/C++
JavaScript
void ordina (…)
{
…
}
function ordina (…) {
…
}
… e altri ancora
Introduzione ai Diagrammi di Flusso
5
Introduzione ai Diagrammi di Flusso
6
1
Esempio: il calcolo del M.C.D.
Esempio: il calcolo del M.C.D.
■
■
Si vuole definire un algoritmo per il calcolo del
Massimo Comun Divisore (M.C.D.) tra due numeri
interi non negativi
Proprietà di Euclide (300 a.C.): ognuno dei divisori
comuni di due numeri a e b è contemporaneamente
divisore sia di a e b, sia del resto r del quoziente di a
con b se questo non è nullo:
M.C.D. (a, b) = M.C.D. (b, r) dove r = a mod b
Es.:
M.C.D. (20, 12) = 4
M.C.D. (7, 21) = 7
M.C.D. (5, 9) = 1
M.C.D. (0, 6) = 6
M.C.D. (20, 12) =
M.C.D. (12, 8) =
M.C.D. (8, 4)
=4
Introduzione ai Diagrammi di Flusso
20 mod 12 = 8
12 mod 8 = 4
8 mod 4 = 0
7
Descriviamo come calcolre il M.C.D.
c
Start
d
Considera i numeri a e b
d
Considera i numeri a e b
e
Se b = 0 allora la risposta è a
e
Se b = 0 allora la risposta è a e vai all’istruzione h
f
Calcola r = a mod b
f
Calcola r = a mod b
g
Se r = 0 allora la risposta è b,
g
Se r = 0 allora la risposta è b,
e vai all’istruzione h
altrimenti torna
altrimenti torna all’istruzione f
all’istruzione f
Stop
h
Introduzione ai Diagrammi di Flusso
■
L’esecuzione sequenziale è
interrotta da istruzioni di tipo
“vai”, “torna”
Se b = 0 allora la risposta è a
■
Le istruzioni sono numerate
e vai all’istruzione h
■
Istruzioni del tipo “se …
allora”, “se … allora …
altrimenti” operano una
scelta tra due condizioni
d
Considera i numeri a e b
e
f
Calcola r = a mod b
g
Se r = 0 allora la risposta è b,
altrimenti torna
■
all’istruzione f
h
Stop
■
=5
=4
=1
=0
8
M.C.D. (20, 12) =
M.C.D. (12, 8) =
M.C.D. (8, 4)
=4
20 mod 12 = 8
12 mod 8 = 4
8 mod 4 = 0
M.C.D. (5, 9) =
M.C.D. (9, 5) =
M.C.D. (5, 4) =
M.C.D. (4, 1) =
=1
5
9
5
4
mod 9
mod 5
mod 4
mod 1
=5
=4
=1
=0
Introduzione ai Diagrammi di Flusso
10
Descriviamo come calcolare il M.C.D.
■
c
Start
d
Considera i numeri a e b
e
Se b = 0 allora la risposta è a
f
Calcola r = a mod b
g
Se r = 0 allora la risposta è b,
■
e vai all’istruzione h
L’istruzione “3” è necessaria
per evitare che si esegua b
mod 0 che non è possibile
(num / 0 è impossibile!)
altrimenti torna
all’istruzione f
Il risultato è il M.C.D.
qualunque siano i valori a e b
(generalità)
Introduzione ai Diagrammi di Flusso
Stop
9
Descriviamo come calcolare il M.C.D.
Start
mod 9
mod 5
mod 4
mod 1
Descriviamo come calcolare il M.C.D.
Start
c
5
9
5
4
Introduzione ai Diagrammi di Flusso
c
h
M.C.D. (5, 9) =
M.C.D. (9, 5) =
M.C.D. (5, 4) =
M.C.D. (4, 1) =
=1
11
h
Stop
■
Istruzioni (fare qualcosa) e
dichiarazioni (definire
qualcosa)
Dichiarazioni:
– di variabili
– costanti (numeriche,
logiche, caratteri,
stringhe, ecc.)
Istruzioni:
– salti condizionati e
incondizionati
– confronti
– assegnamenti
– istruzione di inizio
– istruzione di fermata
Introduzione ai Diagrammi di Flusso
12
2
Diagrammi di flusso
Diagrammi di flusso
inizia
c Start
Blocco iniziale
d Considera i numeri a e b
inizia
leggi a e b
Blocco di input/output
e Se b = 0 allora la risposta
No
è a e vai all’istruzione h
No
Blocco di controllo
r = a mod b
f Calcola r = a mod b
g Se r = 0 allora la risposta
stampa a
No
Blocco finale
stop
stop
Introduzione ai Diagrammi di Flusso
13
Diagrammi di flusso
■
■
I blocchi azione hanno
una sola freccia intrante
ed una uscente
Un blocco di controllo ha
una freccia entrante e
due uscenti
Una freccia entra in un
blocco oppure si
inserisce in un’altra
freccia
Ciascun blocco è
raggiungibile dal blocco
iniziale
Il blocco finale è
raggiungibile da qualsiasi
blocco
<SCRIPT>
<!-- Inizio script JavaScript
inizia
var a0, b0, r;
a0 = window.prompt("Inserisci il primo numero");
b0 = window.prompt("Inserisci il secondo numero");
leggi a e b
var a = a0, b = b0;
No
Si
b=0
r = a mod b
Si
stampa b
azione
No
15
No
Introduzione ai Diagrammi di Flusso
test
■
azione
iterazione: while
Si
azione
test
No
iterazione: do while
(repeat until)
azione
■
azione
sequenza
test
selezione: if then
Introduzione ai Diagrammi di Flusso
16
Diagrammi di flusso: schemi di base
Si
azione
azione
Vedremo più
avanti nel
corso cosa
significa
questo
programma
// Fine script -->
</SCRIPT>
stop
■
test
■
if (b != 0) {
r = a % b;
while (r != 0) {
a = b;
b = r;
r = a % b;
document.writeln("M.C.D. (" + a + ", " + b + ") = <BR>");
}
document.writeln(b);
}
else
document.writeln(a);
stampa a
r=0
No
14
document.writeln("M.C.D. (" + a + ", " + b + ") = <BR>");
Diagrammi di flusso: schemi di base
selezione: if then else
Si
Introduzione ai Diagrammi di Flusso
Il programma M.C.D. in JavaScript
Introduzione ai Diagrammi di Flusso
azione
r=0
stampa b
h Stop
■
stampa a
Si
stampa b
all’istruzione f
■
Si
Blocco azione
Si
g altrimenti torna
b=0
r = a mod b
r=0
No
è b,
■
leggi a e b
Si
b=0
■
No
Si
17
In realtà ogni blocco azione descritto
precedentemente può essere composto da uno
schema di base (che a sua volta…)
Se si usano solo gli schemi descritti si realizzano
diagrammi di flusso strutturati (nota: ogni algoritmo
descrivibile da un diagramma di flusso è descrivibile
anche da un diagramma di flusso strutturato [teorema
di Böhm-Iacopini])
L’uso di diagrammi di flusso strutturati è consigliabile
ed incoraggiata (la strasformazione in programma ne
sarà facilitata come anche la comprensione)
Non è necessaria nessun altro schema per descrivere
un qualsiasi algoritmo [tesi di Church]
Introduzione ai Diagrammi di Flusso
18
3
Diagrammi di flusso: schemi di base
Diagrammi di flusso: schemi di base
inizia
leggi a e b
inizia
No
leggi a e b
b=0
Calcola M.C.D.
mediante la proprietà
di Euclide
Calcola M.C.D.
r = a mod b
Si
stampa a
No
No
r=0
b=0
Si
r = a mod b
stampa a
Si
stampa b
No
stop
r=0
Si
stampa b
stop
Introduzione ai Diagrammi di Flusso
19
Introduzione ai Diagrammi di Flusso
Calcolo del massimo tra n numeri
Calcolo del massimo tra n numeri
■
■
5
4
1
6
8
5
3
7
1
2
3
4
5
6
7
8
9
1
3
1
6
8
5
3
7
3
4
5
6
7
8
9
5
MAX ♥
Introduzione ai Diagrammi di Flusso
6
8
5
3
7
2
3
4
5
6
7
8
9
2
MAX ♥
3
10
♠
Introduzione ai Diagrammi di Flusso
22
Calcolo del massimo tra n numeri
■
4
♣
1
21
Proviamo a farlo a mano…
2
4
♣
Calcolo del massimo tra n numeri
2
5
10
Introduzione ai Diagrammi di Flusso
1
Proviamo a farlo a mano…
Dato un insieme di n (≥ 2) numeri, vogliamo scrivere un
algoritmo per la determinazione del massimo elemento
dell’insieme
2
■
20
3
Proviamo a farlo a mano…
2
10
1
♠
2
4
1
6
8
5
3
7
3
4
5
6
7
8
9
♣
23
5
MAX ♥
Introduzione ai Diagrammi di Flusso
3
10
♠
24
4
Calcolo del massimo tra n numeri
■
2
1
Calcolo del massimo tra n numeri
Proviamo a farlo a mano…
■
4
1
6
8
5
3
7
3
4
5
6
7
8
9
2
5
♣
MAX ♥
3
10
2
5
4
1
1
2
3
4
♠
25
4
1
6
1
2
3
4
5
♣
■
6
8
5
3
7
7
8
9
MAX ♥
3
10
2
5
4
1
6
1
2
3
4
5
leggi n
i=1
max = tavolo[1]
i <= n
calcola max
Si
confronta il tavolo
con max
7
6
7
8
9
MAX ♥
27
6
8
♣
3
10
♠
26
5
3
7
7
8
9
MAX ♥
3
10
♠
Introduzione ai Diagrammi di Flusso
Calcolo del massimo tra n numeri
inizia calcola max
3
Proviamo a farlo a mano…
♠
Introduzione ai Diagrammi di Flusso
inizia
5
Calcolo del massimo tra n numeri
Proviamo a farlo a mano…
5
6
8
Introduzione ai Diagrammi di Flusso
Calcolo del massimo tra n numeri
2
5
♣
Introduzione ai Diagrammi di Flusso
■
Proviamo a farlo a mano…
28
Variabili
■
Una variabile è un nome associato ad una locazione di memoria
e può contenere dei dati
inizia confronta ...
Si
No
tavolo[i] > max
No
max = tavolo[i]
2
5
4
1
6
1
2
3
4
5
6
5
3
7
7
8
9
3
10
i=i+1
♣
scrivi max
stop calcola max
stop confronta ...
8
MAX ♥
♠
stop
Introduzione ai Diagrammi di Flusso
29
Introduzione ai Diagrammi di Flusso
30
5
Variabili
■
■
■
■
■
■
■
Array (o Vettore)
Ad ogni istante una variabile individua un valore
Il valore contenuto il una variabile è l’ultimo
assegnatole e resta inalterato finche’ una successiva
assegnazione non modifica il valore stesso
L’assegnazione è effettuata mediante una istruzione
detta istruzione di assegnazione
L’istruzione di assegnazione permette di assegnare
ad una variabile il valore di una espressione generica
Alle variabili (e costanti) sono associati degli
identificatori
Una variabile è rappresentata dalla coppia:
<identificatore,valore>
Per non itrodurre confusione denoteremo con “=“
l’istruzione di assegnazione e con “==“ il confronto per
uguale
Introduzione ai Diagrammi di Flusso
31
■
■
■
■
Ad ogni istante un array individua un insieme di valori
Ogni singolo valore nell’array è individuato
dall’identificatore dell’array e da un indice che ne
individua la posizione nella sequenza degli elementi
nell’array stesso, es. tavolo[2]
Un array è caratterizzato da una dimensione che
esprime il numero di elementi che contiene
L’operazione di assegnazione permette di modificare
il valore di un determinato elemento della sequenza
come per una qualsiasi variabile
In genere gli elementi di un array sono tutti dello
stesso tipo (stringhe, interi, caratteri, ecc.) ma in
alcuni linguaggi di programmazione sono permessi
array di elementi di tipo diverso, es. JavaScript, ma
non è una scelta consigliabile
Introduzione ai Diagrammi di Flusso
■
■
5
4
1
6
1
2
3
4
5
♣
6
8
5
3
7
7
8
9
MAX ♥
3
10
♠
Introduzione ai Diagrammi di Flusso
32
■
Dato un insieme di n (≥ 2) numeri, vogliamo scrivere
un algoritmo per la determinare il più piccolo
elemento dell’insieme
■
Suggerimento:
– L’algoritmo è del tutto analogo a quello per la
ricerca del più grande
– È sufficiente modificare il test di confronto tra
l’elemento minore trovato temporaneamente e la
nuova posizione del tavolo considerata
tavolo[i] < min
33
Introduzione ai Diagrammi di Flusso
34
Esercizio: Numeri pari e dispari
Scrivere un algoritmo che calcoli il fattoriale di un
numero intero non negativo n.
n! = 1 * 2 * … * (n -2) * (n -1) * n
■
■
Suggerimento. Le varibili usate nell’algoritmo sono:
– n, il numero intero positivo considerato
– fatt, la variabile destinata ad assumere il valore del
fattoriale di n (n!), in essa si accumulano I
successivi prodotti parziali
– i, varibile contatore
Introduzione ai Diagrammi di Flusso
2
minore invece
di maggiore
Esercizio: Calcolo del fattoriale
■
Un array (vettore) è costituito da una sequenza di elementi
consecutivi nella memoria
Esercizio: calcolare il minore tra n
numeri
Array (o Vettore)
■
■
■
35
Scrivere un algoritmo che determini se un numero
intero positivo n è pari o dispari
Un numero è pari se è un multiplo di 2, dispari
altrimenti
Suggerimento:
– sfruttare l’operazione modulo “mod” notando che
un numero n è multiplo di 2 se n mod 2 = 0
– un confronto può coinvolgere anche espressioni
Introduzione ai Diagrammi di Flusso
36
6
Esercizio: La somma di n numeri
■
Algoritmi di ordinamento
Scrivere un algoritmo che calcoli la somma di primi n
numeri interi positivi:
n
∑i
=
somma
■
L’ordinamento (sort) è il procedimento che dispone un insieme di
elementi in ordine crescente o decrescente secondo un
determinato criterio.
i=0
■
2 5 4 1 6 8 5 3 7 3
Suggerimento:
– se invece di sommare fosse stato richiesto di
moltiplicare?
– somma = 1 + 2 + … + (n -2) + (n -1) + n
– n! = 1 * 2 * … * (n -2) * (n -1) * n
F. Gauss [1777-1855]:
1
1
■
■
Si ricerca
l’elemento
minimo e lo si
scambia con il
primo (tavolo[1])
Si ripete la
ricerca
considerando gli
elementi dal
secondo
all’ultimo e si
scambia
l’elemento più
piccolo con
tavolo[2]
In n – 1 passi gli
elementi
saranno ordinati
3
4
5
6
7
8
9
10
1
■
2 5 4 1 6 8 5 3 7 3
1
2
3
4
5
6
7
8
9
Introduzione ai Diagrammi di Flusso
10
Individuato
l’elemento più
piccolo tra
quelli
considerati si
effettua lo
scambio
3
1
4
5
♦
6
♥
7
8
9
10
4
5
6
7
8
9
10
38
Le carte sul
tavolo
vengono
percorse da
sinistra verso
destra
cercando
l’elemento
più piccolo
L’algoritmo
per la ricerca
del più
piccolo è
simile a
quello per la
ricerca del
più grande
2 5 4
1
2
3
6 8 5 3 7 3
4
1
5
♦
6
7
♥
8
9
10
♠
40
Ordinamento per Selezione
5 4 2 6 8 5 3 7 3
2
6
Introduzione ai Diagrammi di Flusso
■
1
3
39
Ordinamento per Selezione
■
5
Ordinamento per Selezione
2 5 4 1 6 8 5 3 7 3
2
4
Introduzione ai Diagrammi di Flusso
■
1
2
37
Ordinamento per Selezione
■
3
1 2 3 3 4 5 5 6 7 8
n ⋅ ( n + 1)
2
Introduzione ai Diagrammi di Flusso
2
7
8
9
10
♠
A scambio
completato
avremo un
tavolo con n
carte con la
certezza di
avere
l’elemento più
piccolo in
prima
posizione
1 5 4 2 6 8 5 3 7 3
1
2
3
4
♣
5
♦
6
♥
7
8
9
10
♠
È l’elemento più piccolo!!
Introduzione ai Diagrammi di Flusso
41
Introduzione ai Diagrammi di Flusso
42
7
Ordinamento per Selezione
■
■
■
Si considera
la rimanente
parte del
tavolo
Si seleziona il
più piccolo
dei rimanenti
elementi e lo
si mette in
seconda
posizione
E così via fino
a
completament
o (n – 1 passi)
Ordinamento per Selezione
1 5 4 2 6 8 5 3 7 3
1
2
3
4
5
6
7
8
9
10
■
■
1 2 4 5 6 8 5 3 7 3
1
2
3
4
5
6
7
8
9
10
1 2 3 5 6 8 5 4 7 3
1
2
3
4
5
6
7
8
9
Introduzione ai Diagrammi di Flusso
■
10
L’algoritmo effettua gli n – 1
cicli considerando ogni volta
una porzione di tavolo più
piccola di una posizione
L’elemento non più
considerato da un ciclo
successivo (quello
posizionato nella posizione
i-esima è il più piccolo di tutti
i rimanenti ma più grandi di
quelli già oggetto di uno
scambio
NOTA: è sufficiente
memorizzare la posizione di
min
43
Lo scambio: variabili temporanee
tavolo[posizione di min] =
tavolo[i]
tavolo[i] = temp
No
i<n
Si
trova minore min in
{tavolo[i] … tavolo[n]}
(la sua posizione)
stop
scambia min con
tavolo[i]
i=i+1
44
Calcolo del minore tra n numeri
inizia calcola min
2 5 4
1
2
3
1
inizia confronta ...
6 8 5 3 7 3
4
5
♦
6
♥
7
8
9
inizia
j=i
Si
10
No
posizione di min = i
j <= n
calcola min
Si
confronta il tavolo
con min
♠
inizia scambia
■
i=1
Introduzione ai Diagrammi di Flusso
inizia scambia
temp =
tavolo[posizione di min]
inizia
No
tavolo[j] <
tavolo[posizione di min]
posizione di min =
j
j=j+1
È necessario memorizzarsi in una variabile temporanea il più
piccolo elemento trovato per effettuare lo scambio
stop calcola min
stop confronta ...
stop
Introduzione ai Diagrammi di Flusso
45
Iterazioni: ciclo “while”
■
■
■
■
Le iterazioni permettono
l’esecuzione ripetuta di una
serie di istruzioni, definendo
un ciclo
Nell’iterazione di tipo while
l’espressione test è valutata
iterazione: while
prima di ogni ciclo, se il
No
valore è vero il ciclo viene
effettuato, altrimenti si
prosegue con il blocco
successivo seguendo l’arco
etichettato “No”
A priori non è noto il numero
di ripetizioni del ciclo
Caratteristica analoga si può
dire anche dell’iterazione
repeat … until (o do Introduzione
… while)ai Diagrammi di Flusso
Introduzione ai Diagrammi di Flusso
46
Iterazioni: ciclo “for”
■
■
■
test
Si
■
istruzioni
■
47
L’iterazione di tipo for è
un’iterazione di tipo while
inizia calcola min
dove, però, il numero di cicli
è noto a priori
j=i
Una variabile, j, è assegnato
un valore iniziale
No
La variabile è incrementata
j <= n
ad ogni ciclo di un certo
valore, nell’esempio di 1
Si
confronta il tavolo
Il test che coinvolge la
con min
variabile in oggetto controlla
se questa ha superato un
j=j+1
certo estremo
È quindi noto a priori il
numero di cicli che verranno
stop calcola min
effettuati (nell’esempio n - i +
1 volte)
Introduzione ai Diagrammi di Flusso
48
8
Soluzione esercizio: Calcolo del
fattoriale
inizia
Quale è la classe di funzioni
calcolabili?
inizia calcola fatt
leggi n
■
Babbage [1837]: “Di quali operazioni deve essere
dotata una machina per effettuare tutti i calcoli che un
essere umano può teoricamente effettuare?”
■
Anni ‘30: A. Church, K. Gödel, E. Post, A. Tarski, A.
Turing proposero, nel giro di pochi anni, un gran
numero di possibili definizioni, ciascuna basata su di
un particolare aspetto della nozione di funzione
calcolabile, ciascuno con le sue caratteristiche
i=1
fatt = 1
i <= n
No
Si
fatt = fatt * i
calcola fattoriale
i=i+1
scrivi fatt
stop calcola fatt
stop
Introduzione ai Diagrammi di Flusso
49
Funzioni Ricorsive
■
Kleene [1936]: le funzioni ricorsive sono quelle
definibili a partire dalla funzione costante 0, dalla
funzione successore, ricorsione primitiva e ricerca del
minimo (minimo elemento tale che…)
■
Intuitivamente: 0 e successore corrispondono
all’assegnamento, ricorsione primitiva all’iterazione di
tipo for, il principio del minimo all’iterazione di tipo
while
Introduzione ai Diagrammi di Flusso
A. Church, A. Turing: “Le funzioni ricorsive (parziali)
sono esattamente le funzioni calcolabili”.
■
Le sole funzioni per cui esistono programmi sono le
funzioni ricorsive. Quindi esistono decine di problemi
per cui non è possibile trovare soluzioni ricorsive (es.
non esiste un algoritmo per calcolare le soluzioni di
qualunque equazone di grao n)
■
Kleene [1936]: “Tutte le definizioni proposte sono equivalenti, e
descrivono sempre la classe delle funzioni ricorsive”.
■
Metodo di Aritmetizzazione: assegnare numeri a oggetti in modo
sistematico ed effettivo, e nel tradurre proprietà degli oggetti in
proprietà dei loro corrispondenti numeri
■
Gödel: “L’aritmetizzazione è possibile effettuarla mediante
funzioni ricorsive!”
■
Equivalenza tra tutte le definizioni non è una dimostrazione che
la definizione di funzione ricorsiva corrisponda a quella di
calcolabile (ma è un buon indizio…)
Introduzione ai Diagrammi di Flusso
52
La Tesi di Church [1936]
Le funzioni calcolabili sono calcolabili mediante
computer!
Introduzione ai Diagrammi di Flusso
■
51
La Tesi di Church [1936]
■
50
Funzioni Ricorsive
Dedekind [1888]: analisi matematica del concetto di
numero naturale. I numeri naturali sono generati a
partire dallo 0, dall’operazione di successore, dalla
ricorsione primitiva e soddisfano il principio del
minimo (nessun elemento è asciato fuori)
■
Introduzione ai Diagrammi di Flusso
53
■
Poiché i computer calcolano tutte e sole le funzioni
ricorsive, ogni definizione equivalente di ricorsività
descrive un approccio alternativo alla calcolabilità
attraverso computer, e dunque un tipo di linguaggio di
programmazione
■
La dimostrazione di equivalenza fra un dato approccio
e la calcolabilità mediante computer consiste nel
tradurre il metodo di calcolo di una generica funzione
implicito nel dato approccio in una serie di istruzioni
(in linguaggio macchina) eseguibili direttamente dal
computer (compilazione = aritmtizzazione)
Introduzione ai Diagrammi di Flusso
54
9
Problema della Fermata
■
■
■
Altro problema “impossibile” da risolvere: “Decidere
se un computer si ferma (e ottiene dunque un valore)
quando calcola seguendo le istruzioni di un dato
programma per un dato argomento”. (Decidere se
una funzione ricorsiva parziale è definita per un dato
argomento)
“Se un programma che fornisce risposte a domande
riguardanti la fermata di dati programmi per dati
argomenti non mente mai, esso non può fornire tutte
le risposte.”
“Un sistema di assiomi e regole che sia definibile
mediante un programma e che non menta mai non
può fornire risposte a ogni domanda riguardo i
numeri” (teorema di Gödel)
Introduzione ai Diagrammi di Flusso
55
10
Scarica