Universitàdi Salerno Corso di FONDAMENTI DI INFORMATICA ... e Strutture di... · Fondamenti di...
Transcript of Universitàdi Salerno Corso di FONDAMENTI DI INFORMATICA ... e Strutture di... · Fondamenti di...
Università di Salerno Corso di
FONDAMENTI DI INFORMATICACorso di Laurea Ingegneria
Corso B Docente : Ing. Secondulfo Giovanni
Anno Accademico 2010-2011
Lezione 7: La Formalizzazione degli Algoritmi -
Strutture di Controllo e SelettiveLa Programmazione Strutturata (3 p)
Giovedì 21 Ottobre 2010
Fondamenti di Informatica - Ing. Secondulfo Giovanni
2
Ovviamente il blocco operazioni può contenere a sua volta delle strutture selettive
Si usano quando ci sono più di due alternative da controllare
Si parla in questo caso di selezioni annidate
Fondamenti di Informatica - Ing. Secondulfo Giovanni
3
Definizioni:
Flowchart o Algoritmo o Schema a Blocchi : qualsiasi combinazione di blocchi operativi e decisionali; ogni arco uscente da un blocco va in ingresso ad un solo blocco.
Flusso di controllo: ordine di percorrenza dei blocchi individuato da un flowchart.
Struttura di controllo: flowchart parziale da assumere come modello di computazione, con un ingresso e un'uscita.
Sequenza di computazione: successione di blocchi operativi e decisionali prodotta dall'esecuzione di un flowchart per un certo insieme di dati in ingresso
Programmazione Strutturata
Fondamenti di Informatica - Ing. Secondulfo Giovanni
4
Definizioni
La programmazione strutturata è una tecnica di programmazione che ha lo scopo di semplificare la struttura di un algoritmo disciplinando l'uso delle strutture di controllo utilizzabili all'interno di uno schema blocchi.
In particolare, tale tecnica prevede l'uso di un numero limitato di strutture di controllo fondamentali, con un ingresso ed una uscita, di sequenza,selezione ed iterazione.
La programmazione strutturata vincola quindi l'utilizzo delle strutture di controllo, ma offre i seguenti vantaggi:
rende possibile una progettazione di tipo Top-Down;
permette la definizione di algoritmi in generale più leggibili, essendo piùfacile individuare i moduli corrispondenti alle varie parti di cui si compone l'algoritmo;
test, correzione e manutenzione del programma sono perciò più semplici.
Programmazione Strutturata
Fondamenti di Informatica - Ing. Secondulfo Giovanni
5
Semplici: esprimono azioni elementari
a= a+ 1;
Strutturate: composte da più istruzioni semplici assemblate in determinate strutture
Sequenza
Selezione
Iterazione o Ciclo
Per le strutture utilizzate per la programmazione proveremo a rispondere alle seguenti domande:
Esiste un numero finito di schemi di strutture da adoperare per la costruzione di un programma?
E sempre possibile realizzare un programma con le sole strutture del punto precedente?
Le I struzioni
Fondamenti di Informatica - Ing. Secondulfo Giovanni
6
I l costrutto sequenza, detta anche istruzione composta è una successione di più istruzioni semplici o strutturate. Le istruzioni vengono eseguite in sequenza secondo l ordine in cui sono scritte.
Consente di conferire ai linguaggi ad alto livello elevate capacità di nidificazione delle strutture di controllo
Costrutto blocco di istruzioni
{ begin
istruzione_1; istruzione1;
...........; ..;
istruzione_N; istruzioneN
} end
Programmazione Strutturata : Costrutto Sequenza
ISTRUZIONE1
ISTRUZIONEn
Fondamenti di Informatica - Ing. Secondulfo Giovanni
7
Hanno la funzione di esprimere l esecuzione
condizionale di una specifica istruzione (semplice o
composta) tra più istruzioni che possono essere
eseguite in alternativa.
Esecuzione condizionale di una istruzione
if- then
Esecuzione condizionale tra due istruzioni
if-then-else
Esecuzione condizionale tra più istruzioni
case
Programmazione Strutturata : Selezione
Fondamenti di Informatica - Ing. Secondulfo Giovanni
8
if R then SIn cui R è un espressione booleana o, in particolare una relazione ed S una
qualsiasi istruzione semplice o strutturata. La semantica di questa istruzione è cosi esprimibile : se l espressione R è vera esegui Saltrimenti esegui l istruzione immediatamente successiva nella sequenza di istruzioni all interno della quale è inserita l istruzione if-then in esame.
float a;
float b;
float c;
leggi b;
c=7;
a=c-(b*2);
if (a>0) then {
stampa Il valore di a è positivo ;
}
stampa Il valore di a è:;
stampa a;
Progr. Strutturata : I struzione Condizionale Semplice
R
S
Q
Falso
Vero
Fondamenti di Informatica - Ing. Secondulfo Giovanni
9
if R then S1 else S2In cui R è un espressione booleana o, in particolare una relazione ed S1 e S2 una
qualsiasi istruzione semplice o strutturata. La semantica di questa istruzione ècosi esprimibile : se l espressione R è vera esegui S1 altrimenti esegui l istruzione S2, in entrambi i casi esegui l istruzione immediatamente successiva nella sequenza di istruzioni all interno della quale è inserita l istruzione if-then in esame.
if ( espressione )
istruzione;
else
istruzione;
Dove espressione: è una espressione booleana
(a==b) vale true se a contiene lo stesso valore di b,
altrimenti vale false
(x>5) vale true se il valore di x è strettamente maggiore di 5, altrimenti vale false
(x<=0) vale true se il valore di x è negativo, altrimenti vale false
Parole riservate del linguaggio (keywords): if, else
Progr. Strutturata : I struzione Condizionale Semplice
R
S1
Q
Falso
S2
Vero
Fondamenti di Informatica - Ing. Secondulfo Giovanni
10
Esemplificazione
(Q)
if ( a = = b )
x = 0;
else
x = 1;
(S)
x è uguale a 0
se a è uguale a b
altrimenti x è uguale a 1
Progr. Strutturata : I struzione Condizionale
a == b
x = 0
S
x = 1
Q
FalsoVero
Fondamenti di Informatica - Ing. Secondulfo Giovanni
11
istruzione può essere una qualunque istruzione, semplice o composta, può anche essere vuota.
(Q)
if ( a = = b )
x = 0;
else
;
(S)
Progr. Strutturata : I struzione Condizionale
a == b
x = 0
S
;
Q
FalsoVero
Fondamenti di Informatica - Ing. Secondulfo Giovanni
12
if ( (x+y)*(z-2) > (23+v) ) {
z = x + 1;
y = 13 + x;
}
equivale a:
if ( (x+y)*(z-2) > (23+v) ) {
z = x + 1;
y = 13 + x;
}
else
;
Progr. Strutturata : I struzione Condizionale senza parte else
Fondamenti di Informatica - Ing. Secondulfo Giovanni
13
Nelle operazioni di tipo condizionale è tipico l utilizzo di OPERATORI LOGI CI :
! Negazione
&& AND
| | OR
Il risultato restituito da questi operatori è di tipo logico (vero, falso) rappresentabile con 0 e 1
! Negazione : Operatore Unario effettua l operazione di negazione logica
&& AND : opera su operandi multipli la condizione è vera (1) se è verificate congiuntamente, altrimenti il risultato èfalso (0)
| | OR : opera su operandi multipli la condizione è vera se èvera per almeno uno degli operandi è falsa se è falsa per tutti gli operandi
Progr. Strutturata : I struzione Condizionale Operatori Logici
Fondamenti di Informatica - Ing. Secondulfo Giovanni
14
Esempi : L istruzione può essere una qualsiasi istruzione semplice o composta
if (x = = 0) z = 5; else y = w * y;
if (x = = 0) { z = 5; } else { y = w * y; };
if ((x = = y) && (z>3))
z = 5;
else {
y = z + w * y;
x = z;
}
Progr. Strutturata : I struzione Condizionale
Fondamenti di Informatica - Ing. Secondulfo Giovanni
15
if ( a<b && a<c )
minimo = a;
else
if ( b<c )
minimo = b;
else
minimo = c;
Progr. Strutturata : I struzione Condizionale annidate
b < c NOSI
a < b && a <c
minimo = a
minimo = b minimo = c
NOSI
Fondamenti di Informatica - Ing. Secondulfo Giovanni
16
L istruzione di selezione multipla, detta anche case, esprime una selezione fra n > 2 istruzioni nell ipotesi che la condizione di selezione sia codificata mediante un espressione ad n valori si ha :
case e
v1: S1;
v2: S2;
...
vn: Sn;
otherwise Sm
end
e: espressione di selezione
v1,v2 ... vn: valori di e con funzioni di etichette particolari che
contrassegnano le istruzioni
S1,S2,...,Sn: espressioni semplici o strutturate
La clausola otherwise definisce l istruzione da eseguire nel caso in cui l espressione di selezione assuma valori non appartenenti all insieme {v1,v2 ... vn}
Progr. Strutturata : I struzione Selezione Multipla
Q
e
SnS2S1
Sm
v1 v2 vn
Fondamenti di Informatica - Ing. Secondulfo Giovanni
17
Esempio: Calcolo delle Radici di un Equazione di Secondo Grado (1)
Si vuole realizzare un programma che risolva un equazione di 2° grado nella forma:
ax2+bx+c = 0Con a,b, e c coefficienti reali. Il programma deve fornire sia il numero delle radici reali dell equazione, sia i loro valori.
Fondamenti di Informatica - Ing. Secondulfo Giovanni
18
Esempio: Calcolo delle Radici di un Equazione di Secondo Grado (2)
Algoritmo:Inserimento da tastiera dei coefficienti a,b,cCalcolo del determinante
delta = b*b-4*a*c
Controllo del segno del determinante (positivo, negativo o nullo)
Il determinante è negativo?Vero: Nessuna soluzione realeFalso: Il determinante è nullo?
» Vero: Una soluzione reale: x = -b/2*a» Falso(Determinante positivo): Due soluzioni reali
x1=(-b- delta)/2*ax2=(-b+ delta)/2*a
Fondamenti di Informatica - Ing. Secondulfo Giovanni
19
Esempio: Calcolo delle Radici di un Equazione di Secondo Grado (3)
Delta<0Si No
Inizio
Leggi a, b e c
x -b/2*ax1 (-b- delta)/2*a
Fine
delta b*b-4*a*c
Stampa Nessuna
soluzione reale
Delta=0Si
Stampa Una
soluzione reale
Stampa x
No
x2 (-b+ delta)/2*a
Stampa Due
soluzioni reali
Stampa x1 e x2
Determinante negativo
Determinante nullo
Determinante positivo
Fondamenti di Informatica - Ing. Secondulfo Giovanni
20
Esempio: Calcolo delle Radici di un Equazione di Secondo Grado (4)
Delta<0Si No
Inizio
Leggi a, b e c
x -b/2*ax1 (-b- delta)/2*a
Fine
delta b*b-4*a*c
Stampa Nessuna
soluzione reale
Delta=0Si
Stampa Una
soluzione reale
Stampa x
No
x2 (-b+ delta)/2*a
Stampa Due
soluzioni reali
Stampa x1e x2
SCHERMOa
b
c
delta
x
x1
x2
5
4
1
- 4
Nessuna soluzione reale
Fondamenti di Informatica - Ing. Secondulfo Giovanni
21
Esempio: Calcolo delle Radici di un Equazione di Secondo Grado (5)
Delta<0Si No
Inizio
Leggi a, b e c
x -b/2*ax1 (-b- delta)/2*a
Fine
delta b*b-4*a*c
Stampa Nessuna
soluzione reale
Delta=0Si
Stampa Una
soluzione reale
Stampa x
No
x2 (-b+ delta)/2*a
Stampa Due
soluzioni reali
Stampa x1e x2
SCHERMOa
b
c
delta
x
x1
x2
4
4
1
0
Una soluzione reale
-1/2
x = -1/2
Fondamenti di Informatica - Ing. Secondulfo Giovanni
22
Esempio: Calcolo delle Radici di un Equazione di Secondo Grado (5)
Delta<0Si No
Inizio
Leggi a, b e c
x -b/2*ax1 (-b- delta)/2*a
Fine
delta b*b-4*a*c
Stampa Nessuna
soluzione reale
Delta=0Si
Stampa Una
soluzione reale
Stampa x
No
x2 (-b+ delta)/2*a
Stampa Due
soluzioni reali
Stampa x1e x2
SCHERMOa
b
c
delta
x
x1
x2
1
-1
-2
9
Due soluzioni reali
-1
x1 = -1x2 = 2
2
Fondamenti di Informatica - Ing. Secondulfo Giovanni
23
I costrutti di iterazione consentono di realizzare dei cicli di elaborazione, cioè l esecuzione ripetuta di una specifica istruzione (semplice o composta).
Il costrutto è caratterizzato da:
istruzione da eseguire che, per ciascuna percorrenza opera
su variabili distinte
sulle medesime variabili che assumono, in generale, valori diversi in funzione della percorrenza
Il ciclo è caratterizzato da una relazione R di continuazione
per ciascuna percorrenza del ciclo viene valutata allo scopo di decidere se questo deve avere termine o se deve essere eseguito ancora una volta
Programmazione Strutturata : Costrutto I terazione (cicli)
Fondamenti di Informatica - Ing. Secondulfo Giovanni
24
Classificazioni cicli:
a condizione iniziale (while o while-do)
a condizione finale (repeat-until o do-while)
a conteggio (for)
Nei cicli a conteggio si conosce a priori il numero delle ripetizioni, mentre in quelli a condizione il numero complessivo di ripetizioni non è noto.
Esempio di ciclo a condizione :
//leggere un carattere c dalla tastiera fino a quando non si preme il tasto a
do {
leggi c;
} while (!(c==65))
Esempio di ciclo a conteggio :
// legge 5 caratteri dalla tastiera
for (i=0; i<5; i++) leggi a;
Programmazione Strutturata : Costrutto I terazione (cicli)
Fondamenti di Informatica - Ing. Secondulfo Giovanni
25
Ciclo a condizione iniziale
while R do S
Causa l esecuzione di S zero o più volte. S viene eseguita quando Rritorna un valore vero e termina quanto R ritorna un valore falso.
Si tratta del costrutto iterativo più generale in quanto il numero di iterazioni può essere qualsiasi
I valori necessari per la valutazione di R devono essere definiti prima dell inizio e, in generale, ridefiniti da S.
Programmazione Strutturata : Costrutto I terazione (cicli)
R
S
Q
Falso
Vero
Fondamenti di Informatica - Ing. Secondulfo Giovanni
26
Esempio
int a=0; //se a=10 ???
int b=5;
int c=10;
int contatore = 0;
while ((a+b)<c) {
stampa a+b minore di c;
stampa Numero di cicli fatti;
stampa contatore;
contatore=contatore+1;
a=a+1; //cosa accade se omettiamo questa istruzione?
}
stampa Uscita dal ciclo;
Programmazione Strutturata : Costrutto I terazione (cicli)
Fondamenti di Informatica - Ing. Secondulfo Giovanni
27
Ciclo a condizione finale
Il ciclo a condizione finale ( istruzione repeat o do-while) ha la forma
repeat S until R
causa l esecuzione di S una o più volte. S viene eseguita fin quando R èFalsa e il ciclo termina quando R è vera
R viene valutata dopo la prima esecuzione di S e quindi i valori necessari per la sua valutazione sono calcolati internamente al ciclo
Programmazione Strutturata : Costrutto I terazione (cicli)
R
S
Q
Falso
Vero
Fondamenti di Informatica - Ing. Secondulfo Giovanni
28
Esempio
int a=0; //se a=10, cosa accade?
int b=5;
int c=10;
int contatore = 0;
do {
stampa a+b minore di c; //è sempre vero?
stampa Numero di cicli fatti:
stampa contatore;
contatore=contatore+1;
a=a+1; //cosa accade se omettiamo questa istruzione?
} while (((a+b)<c));
stampa Uscita dal ciclo;
Programmazione Strutturata : Costrutto I terazione (cicli)
Fondamenti di Informatica - Ing. Secondulfo Giovanni
29
Ciclo a conteggio
for vc=vi to vf step k do S
vc: variabile di conteggio che assume i seguenti valori della progressione:
vi: valore iniziale
vf: valore finale
k: passo o ragione
S: istruzione da eseguire
La variabile di conteggio assume dunque i seguenti valori:
vi, vi+k, vi+2k, ..., vf
per vi = vf il ciclo viene percorso una sola volta
per vi > vf il ciclo viene percorso zero volte (a meno che k non sia negativo)
Programmazione Strutturata : Costrutto I terazione (cicli)
Fondamenti di Informatica - Ing. Secondulfo Giovanni
30
Utilizzo del Ciclo a conteggio
Il costrutto ciclo di conteggio è stato fra i primi ad essere utilizzato anche se è fra i piùpericolosi da utilizzarsi; è buona norma attenersi alle regole di seguito esposte al
fine di evitare errori di programmazione.
da utilizzare quando è noto in anticipo il numero di ripetizioni
da NON utilizzare quando si prevedano condizioni di terminazioni ulteriori rispetto a quella specificata nel costrutto
Programmazione Strutturata : Costrutto I terazione (cicli)
vc = vf
vc = vi
Q
NO
SI
S
vc = Succ( vc)
Fondamenti di Informatica - Ing. Secondulfo Giovanni
31
Esempio
int a= 0; / /se a= 10, cosa accade?
int b= 5;
int c= 10;
int contatore = 0;
for (a= 0; (a+ b)< c; a= a+ 1) {
stampa a+ b minore di c;
stampa Numero di cicli fatti;
stampa contatore;
contatore= contatore+ 1;
}
stampa Uscita dal ciclo;
Programmazione Strutturata : Costrutto I terazione (cicli)
Fondamenti di Informatica - Ing. Secondulfo Giovanni
32
Si indichino con P l insieme di tutti gli algoritmi realizzabili, e con D l insieme di tutti gli algoritmi realizzati facendo uso esclusivo delle tre strutture di controllo fondamentali (sequenza, selezione ed iterazione) : dato un programma p appartenente a P, esiste sempre un programma d appartenente a D, che risulta debolmente equivalente a p .
I n base a quanto espresso in precedenza si può dire :
Due programmi si dicono funzionalmente equivalentise, sottoposti ad un qualsiasi insieme di dati di ingresso entrambi terminano producendo gli stessi dati di uscita oppure entrambi non terminano
L insieme costituito dalle strutture sequenza, selezione e iterazione è un insieme completo
Teorema di Bòhm-Jacopini
Fondamenti di Informatica - Ing. Secondulfo Giovanni
33
Definizione di equivalenza:
Equivalenza debole: due flowchart (algoritmi) sono debolmente equivalenti se, per ogni insieme di dati in ingresso, generano gli stessi dati in uscita
Equivalenza forte: due flowchart sono fortemente equivalenti se sono debolmente equivalenti e le rispettive sequenze di computazione sono uguali, per ogni insieme di dati in ingresso
Equivalenza fortissima: due flowchart sono fortissimamente equivalenti se sono fortemente equivalenti ed inoltre in essi compaiono lo stesso numero di volte gli stessi blocchi elementari
Equivalenza funzionale di program m i
Fondamenti di Informatica - Ing. Secondulfo Giovanni
34
In generale è possibile passare da uno schema a blocchi Non strutturato ad uno strutturato mediante l utilizzo di schematismi fortemente equivalenti
Equivalenza Strut turali
p
q
A
B
Falso
Vero
Falso
Vero
Falso
Vero
FalsoVero
B
Bq
p
A
Fondamenti di Informatica - Ing. Secondulfo Giovanni
35
Le due figure stutturate di ciclo (a condizione iniziale ed a condizione finale sono mutuamente ricavabili mediante delle operazioni di equivalenza
Equivalenza Strut turali
Falso
Vero
Falso
Vero
p A
p
A
While - do
Repeat - Until
Fondamenti di Informatica - Ing. Secondulfo Giovanni
36
Repeat-until ricavato tramite un while do
Equivalenza Strut turali
Falso
Vero
Falso
Vero ! p A
p
A
While - doRepeat - Until
A
Fondamenti di Informatica - Ing. Secondulfo Giovanni
37
While do ricavato tramite un Repeat -until
Equivalenza Strut turali
Falso
Vero
Falso
Vero
p A
p
A
While - doRepeat - Until
pVeroFalso
Fondamenti di Informatica - Ing. Secondulfo Giovanni
38