ELABORAZIONE DELL`INFORMAZIONE Problemi e

14/05/2009
istruttore
2
problema
interpretazione
analisi
soluzione
interpretata
esecutore
Istruzione di un Esecutore alla
Soluzione di un Problema
soluzione
descritta
ELABORAZIONE
DELL’INFORMAZIONE
Informatica per le Discipline Umanistiche
analista
attuazione
descrizione
soluzione
Informatica per le Discipline Umanistiche - Mauro Cadei
14 maggio 2009
Istruzione di un Calcolatore alla
Soluzione di un Problema
problema
interpretazione
analisi
algoritmo
calcolatore
3
soluzione
4
Problemi e Algoritmi
program.
programma
algoritmo
esecuzione
codifica in ling.
di programmaz.
soluzione
Informatica per le Discipline Umanistiche - Mauro Cadei
Informatica per le Discipline Umanistiche - Mauro Cadei
14 maggio 2009
Esecutore
14 maggio 2009
Azioni Elementari
5
6
istruzioni elementari che sa
interpretare associate ad azioni
elementari che sa compiere per
risolvere problemi elementari
(primitivi)
Informatica per le Discipline Umanistiche - Mauro Cadei
14 maggio 2009
input
azione
elementare
output
interpretate in termini funzionali come entità che,
prescindendo dalla loro struttura interna (black box),
ricevono dati in ingresso (input) e producono risultati in
uscita (output)
Informatica per le Discipline Umanistiche - Mauro Cadei
14 maggio 2009
1
14/05/2009
Istruttore
Procedura Effettiva
7
8
processo di soluzione di un
problema = scomposizione
progressiva del problema fino a
trasformarlo in una successione
di problemi elementari risolvibili
con le istruzioni elementari
dell’esecutore
Informatica per le Discipline Umanistiche - Mauro Cadei
elementari
eseguibili in un tempo finito
eseguibili in modo deterministico
(ottengono sempre, a parità di input, gli
stessi risultati)
è fissato l’ordine di esecuzione delle
azioni
è esplicitamente specificato il modo in
cui un’azione utilizza i risultati delle
azioni che la precedono
Informatica per le Discipline Umanistiche - Mauro Cadei
Soluzione Effettiva
14 maggio 2009
Esecutore Caratterizzato Formalmente
10
dati un problema P e un esecutore E, si definisce soluzione
effettiva del problema P per l’esecutore E una successione
di istruzioni elementari tale che:
caratterizzazione sintattica: il linguaggio
che l’esecutore è in grado di interpretare
deve essere definito in modo completo e non
ambiguo
caratterizzazione pragmatica: l’insieme
delle azioni che l’esecutore è in grado di
compiere deve essere definito e tali azioni
devono essere elementari per l’esecutore
caratterizzazione semantica: l’insieme delle
regole di associazione tra costrutti del
linguaggio e azioni deve essere definito in
modo completo e non ambiguo
in generale, possono esistere diverse soluzioni effettive dello
stesso problema per lo stesso esecutore
Informatica per le Discipline Umanistiche - Mauro Cadei
condizioni necessarie per caratterizzare
formalmente l’esecutore
E è in grado di interpretare le istruzioni nella successione e quindi
di associare a ciascuna di esse l’azione (o la successione di
azioni) che deve compiere per eseguirla
la successione di azioni risultante dall’interpretazione delle
istruzioni costituisca una procedura effettiva per E
la successione di azioni risultante dall’interpretazione delle
istruzioni risolve P
14 maggio 2009
Informatica per le Discipline Umanistiche - Mauro Cadei
Algoritmo (definizione)
14 maggio 2009
Sviluppo di un Programma
11
12
algoritmo = soluzione effettiva per esecutore
caratterizzato formalmente
linguaggio di programmazione = linguaggio
impiegato quando l’esecutore è un calcolatore
programma = algoritmo formulato in un linguaggio
di programmazione
CASE
Informatica per le Discipline Umanistiche - Mauro Cadei
14 maggio 2009
ambiente di sviluppo
problema
esecutore
linguaggio alto liv.
tutte le azioni sono, per l’esecutore,
14 maggio 2009
9
procedura effettiva per un
esecutore = successione di azioni
tale che:
analisi
soluzione informale
formalizzazione
soluzione formale: algoritmo
programmazione
programma (alto livello)
traduzione
programma (macchina)
esecutore
linguaggio
macchina (HW)
esecuzione
Informatica per le Discipline Umanistiche - Mauro Cadei
14 maggio 2009
2
14/05/2009
Sviluppo di un Programma
13
Ciclo di Vita del Software
14
analisi: identificazione del problema e di una soluzione,
condotta da un umano
formalizzazione: definizione formale dell’algoritmo,
condotta da un umano che eventualmente si avvale di
strumenti CASE (Computer-Aided Software Engineering)
programmazione: scrittura del programma in un linguaggio
di programmazione di alto livello, condotta da un umano
che si avvale di strumenti SW di sviluppo (IDE = Integrated
Development Environment)
traduzione: scrittura di un programma equivalente in
linguaggio macchina, condotta da SW appositi
(compilatori, interpreti)
Informatica per le Discipline Umanistiche - Mauro Cadei
analisi e specifica dei requisiti: studiare il problema tenendo
conto delle condizioni di utilizzo prospettate per il programma da
realizzare
progettazione: individuazione delle caratteristiche tecniche del
programma
implementazione: scrittura del programma
test: verifica della corrispondenza tra le funzioni del programma
realizzato e quelle previste
rilascio (deployment): installazione del programma presso gli
utenti
manutenzione: modifiche al programma per eliminare
malfunzionamenti, aggiungere funzionalità, adeguarlo a mutate
esigenze degli utenti
14 maggio 2009
Informatica per le Discipline Umanistiche - Mauro Cadei
Ingegneria del Software
14 maggio 2009
Algoritmi Parametrici
15
16
producono un risultato che dipende da un insieme di dati di
partenza
descrivono la soluzione non di un singolo problema, ma di
una intera classe di problemi strutturalmente equivalenti
esempi:
l’algoritmo per la moltiplicazione di due numeri specifica come
effettuare il prodotto di tutte le possibili coppie di numeri
l’algoritmo per la ricerca di un libro nello schedario della
biblioteca vale per tutti i possibili libri
Informatica per le Discipline Umanistiche - Mauro Cadei
le istruzioni dell’algoritmo fanno riferimento a variabili il cui
valore cambia a seconda della situazione elaborativa in cui
l’esecutore si trova
14 maggio 2009
Informatica per le Discipline Umanistiche - Mauro Cadei
Variabile
14 maggio 2009
Uso delle Variabili
17
18
assegnamento
di un valore
lettura
del valore
x
contenitore per dati caratterizzato da:
un nome (identifica univocamente la variabile)
un valore
viene
attribuito/modificato mediante un assegnamento
può essere determinato mediante un’operazione di lettura
Informatica per le Discipline Umanistiche - Mauro Cadei
14 maggio 2009
esempio: op1 + op2 × op3
istruzioni di assegnamento: richiedono di introdurre nel contenitore
identificato dal nome della variabile il valore specificato dall’espressione
a destra dell’assegnamento
nome
espressioni: l’esecutore usa il valore contenuto nelle variabili per
calcolare il risultato dell’espressione
esempio: r ← 35 (assegna 35 alla variabile il cui nome è r)
esempio: circ ← 2 × r × pi (il risultato dell’espressione 2 × r × pi viene
calcolato utilizzando i valori contenuti nelle variabili r e pi e il risultato viene
poi assegnato alla variabile circ)
la stessa variabile può comparire in entrambi i lati dell’istruzione di
assegnamento
esempio: k ← k + 1 (il valore contenuto in k viene utilizzato per trovare il
valore dell’espressione k + 1 che viene memorizzato come nuovo valore di k)
Informatica per le Discipline Umanistiche - Mauro Cadei
14 maggio 2009
3
14/05/2009
Diagrammi di Flusso (Flow Chart)
19
Algoritmo: Esempio (ricetta)
20
inizio
setaccia 50 g di farina
metti la farina in casseruola con 50 cc di latte freddo
sì
fine
inizio
taglialo a pezzi
azione
burro
pezzo unico?
no
aggiungi burro e 300 cc di latte
accendi il fuoco
metti la casseruola sul fuoco
sì
no
operazione di
input/output
sì
bolle?
no
no
sottoprogramma
selezione
(a 2 vie)
sì
vuoi piccante?
mescola
aggiungi noce moscata
piccante?
no
aggiungi pepe
sì
aggiungi 150 cc latte
cuoci 20 minuti
Informatica per le Discipline Umanistiche - Mauro Cadei
21
fine
Informatica per le Discipline Umanistiche - Mauro Cadei
14 maggio 2009
Algoritmo: Esempio
(confronto tra 2 numeri)
22
14 maggio 2009
Algoritmo: Esempio
(media tra n numeri)
inizio
inizio
somma ← 0
leggi x
contatore ← 0
leggi y
leggi num
d←x-y
sì
d > 0?
num ≠ 0
no
sì
scrivi
“maggiore il
primo”
d = 0?
sì
no
somma ← somma + num
scrivi
“maggiore
il secondo”
scrivi
“uguali”
no
contatore ← contatore + 1
contatore = 0
sì
no
media ← 0
media ← somma / contatore
leggi num
scrivi media
fine
Informatica per le Discipline Umanistiche - Mauro Cadei
fine
Informatica per le Discipline Umanistiche - Mauro Cadei
14 maggio 2009
Algoritmo: Somma i Primi N Naturali
23
14 maggio 2009
Algoritmo: Somma i Primi N Naturali
24
inizio
inizio
leggi n
leggi n
somma ← n
sì
n > 1?
somma ← n * (n + 1) / 2
no
n←n-1
scrivi somma
somma ← somma + n
fine
Informatica per le Discipline Umanistiche - Mauro Cadei
14 maggio 2009
scrivi somma
fine
Informatica per le Discipline Umanistiche - Mauro Cadei
14 maggio 2009
4
14/05/2009
Algoritmi: Proprietà
25
26
definizioni informali:
Programmi
correttezza: un algoritmo è corretto se risolve il problema
per cui è stato progettato
complessità: è proporzionale al numero di istruzioni che
devono essere eseguite per calcolare la soluzione
efficienza: è inversamente proporzionale al tempo
impiegato per calcolare la soluzione
Informatica per le Discipline Umanistiche - Mauro Cadei
Informatica per le Discipline Umanistiche - Mauro Cadei
14 maggio 2009
Linguaggi di Programmazione
27
Linguaggio Pascal: Esempio
28
ogni linguaggio di
programmazione è
caratterizzato da due
componenti complementari:
PROCEDURE Media;
VAR
{dichiarazione di variabili}
somma, contatore, num : integer;
media : real;
BEGIN
somma := 0; contatore := 0; {si inizializzano le variabili}
Read(num);
WHILE num <> 0 DO {si continua a leggere finchè si legge 0}
BEGIN
somma := somma + num;
contatore := contatore + 1;
Read(num);
END
IF contatore = 0 {non si può dividere per 0}
THEN
media := 0;
ELSE
media := somma / contatore;
Write(media);
END
sintassi: insieme delle regole
che specificano come
comporre istruzioni ben
formate
semantica: specifica il
significato di ogni istruzione
ben formata (la successione
delle azioni che vengono
compiute allorché l’istruzione
viene eseguita)
Informatica per le Discipline Umanistiche - Mauro Cadei
14 maggio 2009
Informatica per le Discipline Umanistiche - Mauro Cadei
Componenti di un Programma
29
identificazione del programma
14 maggio 2009
Istruzioni
30
14 maggio 2009
linguaggio Pascal: il termine “PROGRAM” ed istruzioni racchiuse tra i
termini “BEGIN” e “END”
linguaggio C: il termine “main” ed istruzioni racchiuse fra parentesi
graffe {…}
le istruzioni presenti in questa parte sono eseguite in successione: una
volta eseguita un’istruzione si passa alla successiva e così via fino ad
arrivare all’ultima istruzione del programma
esistono particolari istruzioni di controllo che consentono di
modificare il flusso di esecuzione all’interno del programma (strutture
di controllo condizionali e iterative)
Informatica per le Discipline Umanistiche - Mauro Cadei
14 maggio 2009
acquisizione dei dati (ingresso);
presentazione dei risultati (uscita).
istruzioni aritmetico–logiche: consentono la manipolazione dei dati,
realizzano l’elaborazione vera e propria
dichiarazione delle variabili utilizzate indicando nome e tipo
parte esecutiva detta anche corpo del programma
istruzioni di input/output
assegnamento: una variabile riceve un valore che è il risultato ottenuto dalla
valutazione di un’espressione che può contenere costanti e variabili
nelle espressioni sono comprese le operazioni aritmetiche di base, alcune
funzioni matematiche più complesse (logaritmi, esponenziali, radici, …), le
operazioni di tipo logico (cioè quelle che fanno riferimento a dati booleani)
istruzioni di controllo: modificano il flusso di esecuzione delle istruzioni
all’interno di un programma
selezione (semplice, a due vie o a più vie)
cicli (a condizione iniziale, finale, iterativi)
Informatica per le Discipline Umanistiche - Mauro Cadei
14 maggio 2009
5
14/05/2009
Dati
Array
31
32
ogni variabile è caratterizzata dal suo tipo
tipi predefiniti: numeri, caratteri, booleani, …
altri tipi: stringhe, date, …
v[1]
v[2]
variabili strutturate:
v[3]
v[4]
v[5]
v[6]
v[7]
vettore
vettori (o array): insieme di n variabili dello steso tipo
indirizzabili mediante un indice (es. v[1], v[2] … v[n])
matrici (array multidimensionali) : insieme di variabili dello steso
tipo indirizzabili mediante due o più indici (es. v[1,1], v[1,2] …
v[10,5] … v[n,m])
record: strutture articolate in cui una sola variabile comprende
più componenti di diverso tipo detti campi (es. studente.nome,
studente.cognome, studente. indirizzo …)
Informatica per le Discipline Umanistiche - Mauro Cadei
v[1,1] v[1,2] v[1,3] v[1,4] v[1,5] v[1,6]
matrice bidimensionale
14 maggio 2009
Informatica per le Discipline Umanistiche - Mauro Cadei
14 maggio 2009
Record
33
34
nome
cognome
età
sesso
indirizzo
Informatica per le Discipline Umanistiche - Mauro Cadei
CAP
Programmazione Imperativo-Procedurale
città
14 maggio 2009
Informatica per le Discipline Umanistiche - Mauro Cadei
Programmazione Imperativa
35
14 maggio 2009
Metodo Top-Down
36
algoritmi + strutture di dati
= programmi
programmazione
imperativa: un programma
è una successione di
istruzioni interpretate
dall’esecutore come
comandi da svolgere
Informatica per le Discipline Umanistiche - Mauro Cadei
14 maggio 2009
problema
top-down
p1
p 1.1
p 1.2
p2
p 1.3
p 2.1
p 2.2
p3
p 3.1
p 3.2
p 3.3
p 3.4
per risolvere un problema, lo si scompone progressivamente
in sottoproblemi più facilmente gestibili
Informatica per le Discipline Umanistiche - Mauro Cadei
14 maggio 2009
6
14/05/2009
Programmazione Procedurale
37
Sottoprogrammi Ricorsivi
38
se uno stesso sottoproblema si presenta più volte, lo si
risolve con uno stesso “pezzo di programma”
(sottoprogramma, procedura)
vantaggi della modularità:
riutilizzo del SW (estensione delle funzionalità del
linguaggio di programmazione)
migliore coordinamento in ambienti di sviluppo con molti
programmatori
semplificazione del controllo di correttezza
0! = 1
1! = 1
n! = n × (n – 1)!
esempio: 4! = 4×3! = 4×(3×2!) = 4×(3×(2×1!)) = 4×3×2×1 = 24
funzione ricorsiva: fib[n] (successione di Fibonacci)
definizione:
14 maggio 2009
fib[1] = 1
fib[2] = 1
fib[n] = fib[n–1] + fib[n–2]
esempio: fib[7] = fib[6] + fib[5] = (fib[5] + fib[4]) + (fib[4] + fib[3]) = … =
13
Informatica per le Discipline Umanistiche - Mauro Cadei
Torre di Hanoi (leggenda)
39
definizione:
Informatica per le Discipline Umanistiche - Mauro Cadei
un oggetto è ricorsivo se è definito in termini di se stesso (nella propria
definizione fa riferimento a se stesso)
funzione ricorsiva: n! (fattoriale)
14 maggio 2009
Torre di Hanoi: Procedura Ricorsiva
40
in un tempio: 3 pali e 64 dischi d’oro, di dimensioni decrescenti, infilati sul primo palo
i sacerdoti devono spostare i dischi sul terzo palo secondo le regole:
può essere spostato solo un disco alla volta
un disco può essere appoggiato solo su un disco di dimensioni maggiori
quando i sacerdoti finiranno il lavoro ci sarà la fine del mondo
(in realtà, muovendo un disco al secondo sono necessari quasi 600 miliardi di anni)
Informatica per le Discipline Umanistiche - Mauro Cadei
41
14 maggio 2009
PROCEDURE Hanoi(n: integer; from, dest, by: char);
BEGIN
IF (n=1) THEN
writeln('Move the plate from ', from, ' to ', dest)
ELSE BEGIN
Hanoi(n-1, from, by, dest);
Hanoi(1, from, dest, by);
Hanoi(n-1, by, dest, from);
END;
END;
Informatica per le Discipline Umanistiche - Mauro Cadei
14 maggio 2009
FINE
Informatica per le Discipline Umanistiche - Mauro Cadei
14 maggio 2009
7