Lezione 8 Soluzione di un problema Soluzione di un problema

18/10/2002
Lezione tratta dal libro:
D. Sciuto, G. Buonanno, W. Fornaciari, L. Mari
Introduzione ai sistemi informatici
Lezione 8
Seconda Edizione, McGraw-Hill
Introduzione agli algoritmi
Capitolo 2:
La formalizzazione dell’informazione
Soluzione di un problema
Soluzione di un problema
Problema
soggetto 1
ANALISI
ANALISI
Modello di
soluzione
STESURA
STESURA
DESCRIZIONE
DESCRIZIONE
SO G G ETTO 1
Conoscenza di come si
risolve un problema
Descrizione
INTERPREINTERPRETAZIONE
TAZIONE
Deve fare tutto lo
stesso soggetto?
18/10/2002
soggetto 2
SO G G ETTO 2
Effettiva capacità di
risolverlo
Descrizione
interpretata
ESECUZIONE
ESECUZIONE
Soluzione
Introduzione ai sistemi informatici
3
Analisi
¾
4
¾ Eliminare
ogni ambiguità nella specifica
gli obiettivi
¾ Evidenziare
¾Regole
¾Dati espliciti ed impliciti
¾ Eliminare
¾Dettagli inutili ed ambigui
¾ Focalizzare
• Comprensione del problema
• Modellizzazione del problema
• Ricerca della soluzione
Introduzione ai sistemi informatici
Introduzione ai sistemi informatici
Comprensione del Problema
Dalla specifica di un problema alla soluzione:
la fase di analisi.
18/10/2002
18/10/2002
5
Corso Informatica A – Allievi Gestionali – prof. C. Silvano
18/10/2002
Introduzione ai sistemi informatici
6
1
18/10/2002
Ricerca della soluzione
Definizione di algoritmo
Algoritmo
La soluzione è espressa come una sequenza di
operazioni la cui esecuzione porta alla soluzione
del problema Æ l’algoritmo risolutivo del
problema
Dati
18/10/2002
Algoritmo
Dati
Iniziali
Si definisce algoritmo una sequenza di azioni
che trasformi i dati iniziali in un numero finito di
passi, elementari e non ambigui, per giungere al
risultato finale.
Soluzione
Introduzione ai sistemi informatici
Dati
Finali
(soluzione)
Questa sequenza di azioni è valida
per un insieme di dati iniziali ben definito
e può essere eseguita da un opportuno esecutore.
7
Scomposizione in sottoproblemi
18/10/2002
Introduzione ai sistemi informatici
8
Algoritmo (definizione informale)
¾ Sequenza
finita di istruzioni,
da un esecutore (può essere
uno strumento automatico),
¾ che descrive come realizzare un compito
(come risolvere un “problema”).
¾ Tutte
le operazioni specificate dall’algoritmo
devono essere direttamente eseguibili
dall’esecutore… (in questo caso si chiamano
operazioni elementari)
¾ comprensibili
¾…
altrimenti è necessario “scomporre” il
problema troppo complesso in sottoproblemi più
semplici
18/10/2002
Introduzione ai sistemi informatici
9
18/10/2002
¾ I passi sono eseguiti in sequenza e l'ordine
delle istruzioni è essenziale per la correttezza
dell'algoritmo.
¾ Non basta organizzare i passi in sequenza,
occorre valutare delle condizioni e in alcuni
casi eseguire delle azioni ripetutamente.
Introduzione ai sistemi informatici
10
Le strutture di controllo:
SEQUENZA
Algoritmo
18/10/2002
Introduzione ai sistemi informatici
¾
Le istruzioni devono semplicemente essere
eseguite nell’ordine in cui sono presentate.
¾
Esempio:
• solleva il ricevitore
• componi il numero
• …
11
Corso Informatica A – Allievi Gestionali – prof. C. Silvano
18/10/2002
Introduzione ai sistemi informatici
12
2
18/10/2002
Le strutture di controllo:
SELEZIONE
¾
Le istruzioni da eseguire sono determinate
dalla valutazione di una data condizione
¾
Esempio:
Le strutture di controllo:
ITERAZIONE
• SE il numero è libero
• ALLORA
• attendi la risposta
• conduci la conversazione
• deponi il ricevitore
¾
Le istruzioni devono essere eseguite
ripetutamente fino a che non si verifica una
determinata condizione
¾
Esempio:
• RIPETI
• componi una cifra
• FINO al completamento del numero
• ALTRIMENTI
• deponi il ricevitore
18/10/2002
Introduzione ai sistemi informatici
13
18/10/2002
Caratterizzazione dell’esecutore
¾ Un
esecutore è caratterizzato da:
¾
¾
¾
¾
Introduzione ai sistemi informatici
14
Caratterizzazione dell’esecutore
• Il linguaggio che è in grado di interpretare
• L’insieme della azioni che è in grado di compiere.
• L’insieme delle regole che a ogni costrutto
linguistico sintatticamente corretto associano le
relative azioni da compiere.
18/10/2002
Introduzione ai sistemi informatici
15
Esecutori e linguaggi
Il linguaggio che l’esecutore è in grado di interpretare
deve essere definito in termini formali:
caratterizzazione sintattica dell’esecutore.
L’insieme della azioni che l’esecutore è in grado di
compiere deve essere univocamente definito.
Tali azioni devono essere deterministiche: l’esecuzione
di una stessa azione deve produrre sempre lo stesso
risultato.
L’insieme delle regole di associazione tra costrutti del
linguaggio e azioni deve essere univocamente definito:
caratterizzazione semantica dell’esecutore.
18/10/2002
Introduzione ai sistemi informatici
16
Soluzione effettiva per l’esecutore
¾ Un
esecutore (calcolatore) è definito in base a
tre elementi:
¾ Se
il problema è “semplice” per l’esecutore…
• L’esecutore lo svolge direttamente
• l’insieme delle operazioni che è capace di
compiere;
• l’insieme delle istruzioni che capisce (sintassi);
• quali operazioni associa ad ogni istruzione che
riconosce (semantica).
¾ Altrimenti…
• Il descrittore deve scomporre il problema in
sottoproblemi finché l’algoritmo non è espresso
esclusivamente tramite operazioni elementari
¾ Il
calcolatore “capisce” le istruzioni che fanno
parte del linguaggio macchina.
18/10/2002
Introduzione ai sistemi informatici
17
Corso Informatica A – Allievi Gestionali – prof. C. Silvano
18/10/2002
Introduzione ai sistemi informatici
18
3
18/10/2002
Procedura di soluzione di un
problema
Soluzione effettiva per l’esecutore
soluzione di un problema si dice effettiva per
l’esecutore se l’esecutore è in grado di:
¾ La
¾ Se
la soluzione di un problema è effettiva,
l’esecutore la attua.
¾ Altrimenti il problema viene scomposto in
sottoproblemi, e per ognuno di questi si applica
nuovamente una procedura.
• Interpretare la descrizione della soluzione ( e quindi
associare a essa le azioni che deve compiere per
eseguirla)
• Eseguire le azioni, completando l’esecuzione in un
tempo finito!
18/10/2002
Introduzione ai sistemi informatici
19
Procedura effettiva
20
concetti di problema elementare e azione
elementare sono interscambiabili ed
evidenziano rispettivamente l’aspetto descrittivo
e quello esecutivo delle procedure effettive.
insieme di problemi è una procedura
effettiva quando:
¾I
• Tutti i problemi dell’insieme sono elementari;
• E’ fissato l’ordine di soluzione dei problemi;
• E’ esplicitamente specificato il modo in cui un
problema utilizza i risultati dei problemi che lo
precedono.
Introduzione ai sistemi informatici
Introduzione ai sistemi informatici
Problema e azione elementari
¾ Un
18/10/2002
18/10/2002
21
18/10/2002
Proprietà di un’azione
elementare
Introduzione ai sistemi informatici
22
Dal problema alla soluzione
automatica
¾ Finitezza
• l’azione deve concludersi in un tempo finito
¾ Specifiche
¾ Osservabilità
• l’azione deve avere un effetto osservabile, cioè deve
produrre qualcosa
¾ Riproducibilità
• a partire dallo stesso stato iniziale, la stessa azione
deve produrre sempre lo stesso risultato finale
18/10/2002
Introduzione ai sistemi informatici
23
Corso Informatica A – Allievi Gestionali – prof. C. Silvano
dei requisiti:
descrizione precisa e corretta dei requisiti
(verificabilità) ---> cosa?
¾ Progetto: procedimento con cui si
individua la soluzione ---> come?
¾ Soluzione: algoritmo
18/10/2002
Introduzione ai sistemi informatici
24
4
18/10/2002
Processo di sviluppo
di un programma
Soluzione
Problema
ANALISI
ANALISI
Proprietà degli algoritmi
informale
FORMALIZZAZIONE
FORMALIZZAZIONE
¾ Correttezza
Soluzione formale:
ALGORITMO
PROGRAMMAZIONE
PROGRAMMAZIONE
• L’algoritmo perviene alla soluzione del compito cui è
preposto.
Programma
Ling. ad alto livello
COMPILAZIONE
COMPILAZIONE
¾ Efficienza
• L’algoritmo perviene alla soluzione del problema
usando la minima quantità di risorse fisiche:
Programma
Ling. macchina
• tempo di esecuzione, memoria, …
ESECUZIONE
ESECUZIONE
18/10/2002
Introduzione ai sistemi informatici
25
¾
¾
Univocità
• Non deve esistere alcun grado di libertà da parte del
processore nell’esecuzione di ogni azione
¾
Effettività
• Le operazioni previste dall’algoritmo devono poter essere
eseguite in tempo finito
¾
¾
Ingresso
• Un algoritmo è corretto se porta ad un risultato coerente per
ogni possibile scelta dei dati in ingresso
¾
Uscita
¾
• L’algoritmo deve fornire uno o più dati in uscita
¾
Introduzione ai sistemi informatici
26
Concetti base
Proprietà di un algoritmo
¾
18/10/2002
Terminazione
• L’esecuzione di un algoritmo deve terminare in un numero
Algoritmo
descrizione di come si risolve un problema
Programma
algoritmo scritto in modo che possa essere eseguito da un
calcolatore (linguaggio di programmazione)
Linguaggio macchina
linguaggio effettivamente “compreso” da un calcolatore,
caratterizzato da istruzioni primitive semplici descritte in
codifica binaria.
Compito dell’informatico è produrre algoritmi (cioè capire la
sequenza di passi che portano alla soluzione di un problema) e
codificarli in programmi (cioè renderli comprensibili al
calcolatore)
finito di passi
18/10/2002
Introduzione ai sistemi informatici
27
Il problema e la soluzione
18/10/2002
di affrontare la soluzione occorre capire
esattamente il problema
¾ Non serve saper risolvere il problema sbagliato
Algoritmo
Dati
Iniziali
• In questo corso supporremo che il problema sia ben
noto e chiaramente formulato e ci concentreremo
sul formulare una soluzione
• Spesso in pratica è più difficile capire
esattamente la natura del problema che non
trovarne una soluzione!
(Requirements engineering)
Introduzione ai sistemi informatici
28
Algoritmo = dati + istruzioni
¾ Prima
18/10/2002
Introduzione ai sistemi informatici
Dati
Finali
(soluzione)
Composto da
Dati
29
Corso Informatica A – Allievi Gestionali – prof. C. Silvano
18/10/2002
Istruzioni che
operano sui dati
Introduzione ai sistemi informatici
30
5
18/10/2002
Dati e istruzioni
¾ Tipi
•
•
•
•
Criteri di classificazione dei dati
di dati
Numeri naturali o interi o reali
Caratteri alfanumerici
Dati logici o booleani
Array o vettore di n elementi
¾ Visibilità
(1, -2, 0.34)
(A, B, ..)
(Vero, Falso)
({1,2,3})
¾ Variabilità
18/10/2002
(es. leggi, scrivi)
(es. max = A + B)
(es. SE, RIPETI )
Introduzione ai sistemi informatici
¾ Struttura
• elementari (interi, alfanumerici, booleani, …)
• strutturati (array, matrici, …)
31
1. Linguaggio naturale
¾
2. Diagramma a blocchi
¾
3. Pseudocodice
¾
4. Linguaggio di programmazione
18/10/2002
Introduzione ai sistemi informatici
18/10/2002
Introduzione ai sistemi informatici
¾ Algoritmo
formulato per essere comunicato tra
esseri umani
• sintetico e intuitivo
• codificato in linguaggi informali o semi-formali
(linguaggio naturale, diagrammi di flusso, …)
¾ Algoritmo
formulato per essere eseguito
automaticamente
• preciso ed eseguibile
• codificato in linguaggi comprensibili dagli esecutori
automatici (linguaggio macchina o linguaggio di
programmazione ad alto livello)
33
18/10/2002
18/10/2002
34
¾ Problema:
Calcolare il prodotto di due numeri
interi positivi
Regole base:
•
•
•
•
Introduzione ai sistemi informatici
Esempio
Codifica degli algoritmi
¾
32
Codifica degli algoritmi
Rappresentazione degli algoritmi
¾
nel tempo
• costanti
• variabili (acquisizione dall’esterno o assegnazione)
¾ Istruzioni
• Operazioni di Input/Output
• Operazioni Aritmetico-logiche
• Strutture di controllo
da parte dell’utente
• visibile (di ingresso o uscita)
• trasparente (dati temporanei di supporto)
Procedimento sequenziale
Procedimento non ambiguo
Formulazione generale
Prevedere tutti i casi
Introduzione ai sistemi informatici
35
Corso Informatica A – Allievi Gestionali – prof. C. Silvano
18/10/2002
Introduzione ai sistemi informatici
36
6
18/10/2002
Formulazione dell’algoritmo
Formulazione dell’algoritmo
Leggi w
Leggi y
sp = 0
ns = y
Esegui {
sp = sp + w
ns = ns - 1
} Finché (ns = 0)
z = sp
Visualizza z
¾ Pseudocodice:
Leggi w
Leggi y
Somma w a se stesso y volte
Visualizza il risultato
18/10/2002
Introduzione ai sistemi informatici
37
18/10/2002
Strumenti per la descrizione
degli algoritmi
¾
Pseudocodice:
¾
Diagrammi di flusso
(flow chart, schemi a blocchi):
• SE A>0 ALLORA A=A+1 ALTRIMENTI A=0
(specifiche iniziali, ancora
intelligibili solo all’essere umano)
¾ Formali
(programmi da eseguire):
linguaggi di programmazione
Introduzione ai sistemi informatici
START
PROCESS
39
18/10/2002
NO
Scrivi S
END
18/10/2002
Introduzione ai sistemi informatici
Introduzione ai sistemi informatici
NO
40
deve leggere un intero N e
restituire il fattoriale di questo numero, cioè il
valore ottenuto da N x (N-1) x (N-2) x … x 1.
¾ Scrivere l’algoritmo immaginando che i dati di
ingresso siano sempre corretti (cioè sempre
maggiori di zero).
¾ Modificare l’algoritmo in modo da considerare
anche la possibilità che siano inseriti valori
inferiori a 1.
S s S+I
I s I+1
I>N?
DECISION
¾ L'esecutore
Ss0
Is1
SI
SI
Esempio
Leggi N
Calcolare e poi
stampare la
somma dei primi
N numeri naturali
I/O
END
Start
Esempio
38
Linguaggi semi-formali
¾ Semi-formali
18/10/2002
Introduzione ai sistemi informatici
41
Corso Informatica A – Allievi Gestionali – prof. C. Silvano
18/10/2002
Introduzione ai sistemi informatici
42
7
18/10/2002
Diverse alternative (es. N = 7)
1
2
6
24
120
720
*
*
*
*
*
*
2
3
4
5
6
7
=
=
=
=
=
=
2
6
24
120
720
5040
Le alternative sono “diverse”?
Start
Start
Start
Leggi N
Leggi N
Leggi N
Leggi N
Ps1
Is1
PsN
Ps1
Is1
PsN
7
42
210
840
2520
Start
NO
I<N
*
*
*
*
*
6
5
4
3
2
SI
42
210
840
2520
5040
NO
IsI+1
PsP*I
Scrivi P
=
=
=
=
=
N>2
I<N
Scrivi P
SI
SI
NO
IsI+1
PsP*I
Scrivi P
End
NsN-1
PsP*N
Scrivi P
End
NO
43
18/10/2002
Come gestire le “eccezioni”
Start
Start
Leggi N
Leggi N
Ps1
Is1
NO
Scrivi P
I<N
NO
N>0
SI
NO
IsI+1
PsP*I
Scrivi P
End
Algoritmo per il caso “normale”.
Come lo modifico per gestire anche
i casi che non erano stati previsti?
18/10/2002
44
1: Determinare il maggiore di 2
numeri interi x e y
¾ Idea: un numero x è maggiore di un numero y
se la loro differenza è positiva
SI
I<N
SI
IsI+1
PsP*I
End
Introduzione ai sistemi informatici
45
18/10/2002
Pseudocodice:
Introduzione ai sistemi informatici
Introduzione ai sistemi informatici
46
Esempio
¾ Problema
2: Determinare il maggiore di 3
numeri interi x, y e z
¾ Idea: Scomporre il problema in modo da
utilizzare l’algoritmo usato per la soluzione del
Problema 1
Leggi un valore dall’esterno e inseriscilo nella variabile x
Leggi un secondo valore dall’esterno e inseriscilo nella variabile y
Calcola la differenza d fra x e y (d = x – y)
Se (d > 0)
Stampa la frase “il massimo è “ seguita dal valore contenuto
in x
Altrimenti
Stampa la frase “il massimo è “ seguita dal valore contenuto
in y
18/10/2002
Introduzione ai sistemi informatici
¾ Problema
Formulazione dell’algoritmo
¾
N= 0ÆP= 0
N = -4 Æ P = -4
Esempio
Ps1
Is1
Scrivi
“Errore!”
NsN-1
PsP*N
End
N= 0ÆP=1
N = -4 Æ P = 1
Introduzione ai sistemi informatici
SI
Cosa succede se il dato in ingresso non rispetta le specifiche (N > 0)?
Per esempio, che risultato restituisce l’esecutore per N = 0 ? e per N = -4 ?
End
18/10/2002
N>2
47
Corso Informatica A – Allievi Gestionali – prof. C. Silvano
18/10/2002
Introduzione ai sistemi informatici
48
8
18/10/2002
Formulazione dell’algoritmo
¾
Esempio
Pseudocodice:
¾ Problema
3: Determinare il maggiore di n
numeri interi x1, x2, …, xn
¾ Idea: Generalizzazione del Problema 2 basato
sull’utilizzo dell’algoritmo usato per la soluzione
del Problema 1
Se x è maggiore di y (Problema 1);
la soluzione corrisponde al maggiore tra x e z (Problema 1)
Altrimenti
la soluzione corrisponde al maggiore tra y e z (Problema 1)
18/10/2002
Introduzione ai sistemi informatici
49
18/10/2002
Introduzione ai sistemi informatici
50
Formulazione dell’algoritmo
¾
Pseudocodice:
Calcola il maggiore tra i primi due numeri (Problema 1);
Finché (ci sono numeri da verificare)
Trova il maggiore tra il nuovo numero e il numero maggiore
trovato in precedenza
Visualizza il numero maggiore trovato.
18/10/2002
Introduzione ai sistemi informatici
51
Corso Informatica A – Allievi Gestionali – prof. C. Silvano
9