Fondamenti di InformaticaFondamenti di Informatica CDL in Ingegneria Meccanica- A.A. 2008-2009CDL in Ingegneria Meccanica- A.A. 2008-2009
3. Programmazione strutturata3. Programmazione strutturata(testo di riferimento: Bellini-Guidi)
Ing. Simona Colucci
Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari
Fondamenti di Informatica Fondamenti di Informatica CDL in Ingegneria Meccanica- A.A. 2008-2009CDL in Ingegneria Meccanica- A.A. 2008-2009
Un programma è un algoritmo espresso in un linguaggio formale, detto linguaggio di programmazione:• Interpretabile ed eseguibile da un calcolatore• Non ambiguo perchè governato da regole grammaticali precise
Linguaggi di programmazioneLinguaggi di programmazione
Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari
Fondamenti di Informatica Fondamenti di Informatica CDL in Ingegneria Meccanica- A.A. 2008-2009CDL in Ingegneria Meccanica- A.A. 2008-2009
Linguaggi di programmazioneLinguaggi di programmazione
Classificazione:
• linguaggi di basso livello (linguaggi macchina e linguaggi assembler): dipendono dalla struttura fisica del tipo di computer per cui sono stati progettati
• linguaggi di alto livello: più vicini alla forma mentis dell’uomo, ma da tradurre in codice di basso livello per l’interpretazione da parte dell’elaboratore(come il C)
Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari
Fondamenti di Informatica Fondamenti di Informatica CDL in Ingegneria Meccanica- A.A. 2008-2009CDL in Ingegneria Meccanica- A.A. 2008-2009
Linguaggio MacchinaLinguaggio Macchina
• Linguaggio formale che il computer è in grado di interpretare ed eseguire senza mediazioni
• Programmi, codice oggetto, rappresentati da una sequenza di cifre binarie che codificano le istruzioni e i dati su cui lavora la CPU• istruzioni fortemente correlate all’architettura del
calcolatore, perché corrispondenti ad operazioni direttamente eseguibili dall’hardware
• esempio di istruzione ad un solo operando :
codice operativo dell’istruzione operando
00000010 000000000011100
Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari
Fondamenti di Informatica Fondamenti di Informatica CDL in Ingegneria Meccanica- A.A. 2008-2009CDL in Ingegneria Meccanica- A.A. 2008-2009
• Istruzioni
• Le istruzioni fanno uso del registro della CPU chiamato A nel capitolo 2 (detto anche accumulatore)
• Codice mnemonico(istruzioni in assembler: cfr. diapositive successive)
Linguaggio Macchina: Linguaggio Macchina: Esempio di programmaEsempio di programma
Codice operativo Operando Codice mnemonico
00000010 000000011011100 LOAD 220
00000110 000000011111100 SUM 252
00000100 000000011011100 MEM 220
Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari
Fondamenti di Informatica Fondamenti di Informatica CDL in Ingegneria Meccanica- A.A. 2008-2009CDL in Ingegneria Meccanica- A.A. 2008-2009
• La prima istruzione(00000010) legge il valore nella cella di memoria specificata dall’operando(220 in decimale) e lo carica in A
• Stato della macchina dopo la prima istruzione
Linguaggio Macchina: Linguaggio Macchina: Esempio di programmaEsempio di programma
Memoria CPU
indirizzo
….
220
….
….
contenuto
….
6
….
….
Accumulatore(A)
6
Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari
Fondamenti di Informatica Fondamenti di Informatica CDL in Ingegneria Meccanica- A.A. 2008-2009CDL in Ingegneria Meccanica- A.A. 2008-2009
• La seconda istruzione calcola la somma del contenuto di A e del valore contenuto nella cella di memoria specificata dall’operando (252 in decimale) e la scrive in A
• Stato della macchina dopo la seconda istruzione
Linguaggio Macchina: Linguaggio Macchina: Esempio di programmaEsempio di programma
Memoria CPU
indirizzo
….
220
….
252
contenuto
….
6
….
31
Accumulatore(A)
37
Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari
Fondamenti di Informatica Fondamenti di Informatica CDL in Ingegneria Meccanica- A.A. 2008-2009CDL in Ingegneria Meccanica- A.A. 2008-2009
• La terza istruzione memorizza il contenuto di A nella cella di memoria specificata dall’operando, la stessa da cui era stato caricato il primo addendo
• Stato della macchina dopo la terza istruzione
Linguaggio Macchina: Linguaggio Macchina: Esempio di programmaEsempio di programma
Memoria CPU
indirizzo
….
220
….
252
contenuto
….
37
….
31
Accumulatore(A)
37
Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari
Fondamenti di Informatica Fondamenti di Informatica CDL in Ingegneria Meccanica- A.A. 2008-2009CDL in Ingegneria Meccanica- A.A. 2008-2009
Linguaggio assemblerLinguaggio assembler
• Le singole istruzioni binarie sono rappresentate con un codice mnemonico
LOAD 220SUM 252MEM 220
• Traduzione in linguaggio macchina ad opera di programmi detti assemblatori, forniti dai costruttori
Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari
Fondamenti di Informatica Fondamenti di Informatica CDL in Ingegneria Meccanica- A.A. 2008-2009CDL in Ingegneria Meccanica- A.A. 2008-2009
MicrolinguaggiMicrolinguaggi
• Usati per i microprogrammi:– corrispondono ad ogni istruzione del linguaggio macchina – costituiti da insiemi di microistruzioni:
• sequenze di bit che costituiscono i segnali di controllo per pilotare i componenti del processore ed eseguire le istruzioni
• cablate dal costruttore nelle unità di controllo(fisicamente delle memorie) della CPU per eseguire le operazioni corrispondenti alle istruzioni del linguaggio macchina
• Obbediscono alla necessità di mediazione tra linguaggio macchina e macchina: lo stesso processore può essere programmato per finalità diverse
Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari
Fondamenti di Informatica Fondamenti di Informatica CDL in Ingegneria Meccanica- A.A. 2008-2009CDL in Ingegneria Meccanica- A.A. 2008-2009
Linguaggi di alto livelloLinguaggi di alto livello
• Più simili al linguaggio naturale dei linguaggi macchina o assembler
• Utilizzano simboli matematici e parole tipiche delle lingue naturali(inglese)
• Usati per scrivere le istruzioni che compongono il codice sorgente
• appositi software, detti compilatori, provvedono a tradurre il codice sorgente nell’equivalente codice eseguibile dalla macchina
Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari
Fondamenti di Informatica Fondamenti di Informatica CDL in Ingegneria Meccanica- A.A. 2008-2009CDL in Ingegneria Meccanica- A.A. 2008-2009
Linguaggi di alto livelloLinguaggi di alto livello
• Esempio di codifica: somma precedente in linguaggio C
a =6; b =31; a =a+b;
– a e b non sono registri o locazioni di memoria ma variabili identificate da:
• Nome(possibilità di usare nomi simbolici del contenuto, per facilitare la leggibilità del programma)
• Insieme di valori che può assumere
• Vantaggi– Programma portabile su ogni macchina con compilatore per
il linguaggio in cui è scritto il programma– Gestione indirizzi di memoria totalmente delegata al
calcolatore
Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari
Fondamenti di Informatica Fondamenti di Informatica CDL in Ingegneria Meccanica- A.A. 2008-2009CDL in Ingegneria Meccanica- A.A. 2008-2009
Algoritmi come sequenze di statiAlgoritmi come sequenze di stati
Esempio: determina il Massimo Comune Divisore (MCD)
a. prendi i due numerib. calcola il resto della divisione intera del num. più
grande per il più piccoloc. sostituisci il numero più grande con il resto della
divisioned. finché tale resto è diverso da zero torna
all’istruzione be. il numero più grande (quello non nullo) è il MCD
cercato
Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari
Fondamenti di Informatica Fondamenti di Informatica CDL in Ingegneria Meccanica- A.A. 2008-2009CDL in Ingegneria Meccanica- A.A. 2008-2009
Algoritmi come sequenze di statiAlgoritmi come sequenze di stati
Flusso di esecuzione dell’algoritmo MCD con i numeri 924 e 120
passo 1 924 e 120passo 2 84 è il resto della divisione intera di 924 per 120passo 3 120 e 84passo 4 il resto è diverso da zero, torna all’istruzione bpasso 5 36 è il resto della divisione intera di 120 per 84passo 6 84 e 36passo 7 il resto è diverso da zero, torna all’istruzione bpasso 8 12 è il resto della divisione intera di 84 per 36passo 9 36 e 12passo 10 il resto è diverso da zero, torna all’istruzione bpasso 11 0 è il resto della divisione intera di 36 per 12passo 12 12 e 0passo 13 il resto è uguale a zero, prosegui con l’istruzione successivapasso 14 12 è il MCD
Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari
Fondamenti di Informatica Fondamenti di Informatica CDL in Ingegneria Meccanica- A.A. 2008-2009CDL in Ingegneria Meccanica- A.A. 2008-2009
• Istruzioni all’interno dei cerchi• Passi in esecuzione dell’istruzione all’esterno del relativo
cerchio• Passaggio da un’istruzione all’altra tramite archi• L’esecuzione di un passo determina uno stato: fotografia
della situazione attuale• Il susseguirsi dei passi di esecuzione determina una
sequenza di stati• Il flusso è sequenziale ed ordinato perché l’algoritmo segue
le regole della programmazione strutturata
Sequenza di stati nel flusso
dell’algoritmo per il calcolo del
MCD(924,120)
Algoritmi come sequenze di statiAlgoritmi come sequenze di stati
Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari
Fondamenti di Informatica Fondamenti di Informatica CDL in Ingegneria Meccanica- A.A. 2008-2009CDL in Ingegneria Meccanica- A.A. 2008-2009
Programmazione non strutturataProgrammazione non strutturata
Esempio: Algoritmo equivalente per il calcolo del Massimo Comune Divisore (MCD)
a. prendi i due numerib. calcola il resto della divisione intera del num. più
grande per il più piccoloc. Se il resto è uguale a zero vai all’istruzione fd. sostituisci il numero più grande con il resto della
divisionee. vai all’istruzione bf. il numero più piccolo è il MCD cercato
Salto incondizionato
Salto condizionato
Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari
Fondamenti di Informatica Fondamenti di Informatica CDL in Ingegneria Meccanica- A.A. 2008-2009CDL in Ingegneria Meccanica- A.A. 2008-2009
Programmazione non strutturataProgrammazione non strutturata
Flusso di esecuzione dell’algoritmo MCD con i numeri 924 e 120
passo 1 924 e 120passo 2 84 è il resto della divisione intera di 924 per 120passo 3 il resto è diverso da zero(prosegui in sequenza)passo 4 120 e 84passo 5 vai all’istruzione bpasso 6 36 è il resto della divisione intera di 120 per 84Passo 7 il resto è diverso da zero(prosegui in sequenza)Passo 8 84 e 36passo 9 vai all’istruzione bpasso 10 12 è il resto della divisione intera di 84 per 36Passo 11 il resto è diverso da zero(prosegui in sequenza)passo 12 36 e 12passo 13 vai all’istruzione bpasso 14 0 è il resto della divisione intera di 36 per 12passo 13 il resto è uguale a zero, vai all’istruzione fpasso 14 12 è il MCD
Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari
Fondamenti di Informatica Fondamenti di Informatica CDL in Ingegneria Meccanica- A.A. 2008-2009CDL in Ingegneria Meccanica- A.A. 2008-2009
• Si parte dal nodo iniziale e poi si passa ai nodi successivi selezionando il cammino in base allo stato che si viene a creare dopo l’esecuzione delle operazioni specificate nel nodo
• L’arco e-b corrisponde ad un salto incondizionato (goto)• L’uso dei goto :
– porta a sequenze non lineari di stati, molto contorte, note come programmi a “spaghetti”, specie per programmi complessi
– ha un numero di istruzioni minori e riusa parti di programma tramite salti
– porta a programmi difficili da correggere manutenere ed estendere
Programmazione non strutturataProgrammazione non strutturata
Sequenza di stati nel flusso
dell’algoritmo per il calcolo del
MCD(924,120)
a b c
de
f
1 2,6,10,14
16
3,7,11,15
4,8,12
5,9,13
Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari
Fondamenti di Informatica Fondamenti di Informatica CDL in Ingegneria Meccanica- A.A. 2008-2009CDL in Ingegneria Meccanica- A.A. 2008-2009
Programmi strutturatiProgrammi strutturati
• L’obiettivo della programmazione strutturata è di rendere un flusso ordinato il passaggio tra le istruzioni dall’inizio alla fine dei programmi
• Realizzazione:– Condizione ideale: sequenza lineare di operazioni, senza
alternative possibili(limite: potenza algoritmi ridotta)– Condizione reale: regole coerenti con il pensiero naturale che
portano ad effetti equivalenti all’esecuzione sequenziale di operazioni
• Costrutti consentiti (strutture di controllo del flusso):– Sequenza: fai questo– Selezione tramite strutture di controllo decisionali:
se è verificata una condizione fai questo altrimenti fai quello– Ripetizioni cicliche tramite strutture di controllo iterative:
finché è verificata una condizione fai questo• Costrutti non consentiti:
– Salto incondizionato (goto): ancora nella sintassi solo per compatibilità verso il basso(era necessario nel linguaggio macchina e assembler)
Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari
Fondamenti di Informatica Fondamenti di Informatica CDL in Ingegneria Meccanica- A.A. 2008-2009CDL in Ingegneria Meccanica- A.A. 2008-2009
Programmi strutturatiProgrammi strutturati
TEOREMA DI BOHM-JACOPINI:tutti i programmi possono essere scritti con
l’utilizzo delle sole strutture di controllo: sequenza, selezione e iterazione (senza l’uso del
salto goto)
• Corrado Böhm e Giuseppe Jacopini hanno dimostrato che la potenza di calcolo dei programmi strutturati(più chiari, più facili da scrivere e da modificare e più probabilisticamente esenti da errori) non è inferiore a quella dei programmi che usano il goto
Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari
Fondamenti di Informatica Fondamenti di Informatica CDL in Ingegneria Meccanica- A.A. 2008-2009CDL in Ingegneria Meccanica- A.A. 2008-2009
Sequenza : flow-chart : flow-chart
• Operazioni:
- fai questo
- fai quello
• Esempio: a = 5;
a = a+b;
Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari
Fondamenti di Informatica Fondamenti di Informatica CDL in Ingegneria Meccanica- A.A. 2008-2009CDL in Ingegneria Meccanica- A.A. 2008-2009
Selezione : flow-chart : flow-chart
• Operazioni:– se è verificata una condizione fai questo – se è verificata una condizione fai questo altrimenti fai quello
• Sintassi:– if(espressione) istruzione
Esempio: prendi numero; resto = numero % 2; if(resto==0) scrivi "è pari";
– if(espressione) istruzione1 else istruzione2 Esempio: prendi numero;
resto = numero % 2; if(resto==0) scrivi "è pari" else scrivi "è dispari";
Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari
Fondamenti di Informatica Fondamenti di Informatica CDL in Ingegneria Meccanica- A.A. 2008-2009CDL in Ingegneria Meccanica- A.A. 2008-2009
Iterazione : flow-chart : flow-chart
• Operazioni:– finchè è verificata una condizione fai questo – esegui fai questo finchè è verificata una condizione
• Sintassi:– while(espressione) istruzione;
Esempio: i=0; while(i<101) i=i+1;
– do istruzione while(espressione);Esempio: i=0;
do i=i+1; while(i<100);
Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari
Fondamenti di Informatica Fondamenti di Informatica CDL in Ingegneria Meccanica- A.A. 2008-2009CDL in Ingegneria Meccanica- A.A. 2008-2009
Programmi strutturati: flow-chartProgrammi strutturati: flow-chart
• Si apre con un cerchio e finisce con un cerchio: tutti i canali partono dal primo cerchio e terminano nell’ultimo(un solo inizio ed una sola fine)
• Composto da più strutture di controllo del tipo sequenza selezione o iterazione
• I cerchi sono i connettori tra le strutture di controllo: altri punti di attacco non consentiti
Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari
Fondamenti di Informatica Fondamenti di Informatica CDL in Ingegneria Meccanica- A.A. 2008-2009CDL in Ingegneria Meccanica- A.A. 2008-2009
Blocco d’istruzioniBlocco d’istruzioni
• Più strutture formano un blocco d’istruzioni:– insieme d’istruzioni con una sola entrata, da dove
inizia sempre l’elaborazione, e una sola uscita, dove termina sempre l’elaborazione del blocco(nessuna uscita laterale con istruzioni di salto)
– Scatola nera per eseguire un compito: non possono essere utilizzate delle sottoparti
– Sintassi: {blocco}
I blocchi possono contenersi l’un l’altro ma mai intersecarsi
blocco
Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari
Fondamenti di Informatica Fondamenti di Informatica CDL in Ingegneria Meccanica- A.A. 2008-2009CDL in Ingegneria Meccanica- A.A. 2008-2009
1. Calcolo della somma algebrica tra due numeri relativi utilizzando le operazioni di somma e differenza tra numeri senza segno
2. Calcolo della media3. Calcolo dei valori massimo e minimo4. Visualizzazione di caratteri letti da tastiera5. Calcolo di una potenza6. Visualizzazione di un quadrato
Programmazione strutturata: Programmazione strutturata: esempiesempi
Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari
Fondamenti di Informatica Fondamenti di Informatica CDL in Ingegneria Meccanica- A.A. 2008-2009CDL in Ingegneria Meccanica- A.A. 2008-2009
Esempio 1Esempio 1
Problema: Calcolo della somma algebrica tra due numeri relativi utilizzando le operazioni di somma e differenza tra numeri senza segno
Algoritmo:- acquisizione dei due numeri a,b- se a,b sono concordi |s|=|a|+|b|- se a,b sono discordi
- se |a|<|b| si scambiano i valori di a e b
- |s|=|a|-|b|- la somma ha il segno di a e modulo |s|
falso
inizio
a, b concordi
s a+b
fine
|a| < |b|
s a-b
t a
a b
bt
vero
vero
falso
modulo di s e segno di a
a , b
Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari
Fondamenti di Informatica Fondamenti di Informatica CDL in Ingegneria Meccanica- A.A. 2008-2009CDL in Ingegneria Meccanica- A.A. 2008-2009
Esempio 2Esempio 2
Problema: Acquisizione di 10 numeri interi e calcolo della media
Algoritmo:1. Azzerare la somma s2. Se non si sono
acquisiti tutti i numeri:2.1 Acquisire un numero
n2.2 Sommare n ad s e
tornare al passo 2
3. La media è s/104. Fine
inizio
s 0
i 0
i < 10
s s + n
i i + 1
m s/10
fine
vero
falso
m
n
Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari
Fondamenti di Informatica Fondamenti di Informatica CDL in Ingegneria Meccanica- A.A. 2008-2009CDL in Ingegneria Meccanica- A.A. 2008-2009
Esempio 3Esempio 3
Problema: Acquisizione di 10 numeri interi; determinazione e visualizzazione del numero maggiore e minore
Algoritmo:1. Leggi il primo numero n2. Poni il massimo e il minimo
corrente(variabili max e min) pari a n
3. Finché i numeri inseriti sono meno di 103.1 Leggi un nuovo numero n3.2 Se n<min min=n
altrimenti se n>max max=n
4. Visualizza min e max5. Fine
inizio
max n min n i 1
i < 10
fine
n > max
min n
n< min
max n
vero
verofalso
vero
i i +1
falso
falso
min, max
n
n
Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari
Fondamenti di Informatica Fondamenti di Informatica CDL in Ingegneria Meccanica- A.A. 2008-2009CDL in Ingegneria Meccanica- A.A. 2008-2009
Esempio 4Esempio 4
Problema: Scrivere un programma che consenta, acquisito un numero intero n, di acquisire un carattere c e visualizzarlo n volte sulla stessa riga finché n è maggiore di zero
Algoritmo:1. Leggi il primo numero n2. Finché n>0
2.1 Leggi c2.2 Visualizza c n volte 2.3 Visualizza “a capo”2.3 Leggi nuovo numero n
3. Fine
inizio
n > 0
i 1
blocco 2.2
fine
a capo
n
n
c
falso
veroInizio blocco 2.2
i<= n
c
i i+1
vero
falso
Fine blocco 2.2
connettore
Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari
Fondamenti di Informatica Fondamenti di Informatica CDL in Ingegneria Meccanica- A.A. 2008-2009CDL in Ingegneria Meccanica- A.A. 2008-2009
Esempio 5Esempio 5
Problema: Calcolo e visualizzazione di una potenza(variabile pot), acquisiti la base x e l’esponente n
Algoritmo:1. Acquisisci x ed n(intero)2. Poni pot pari ad 13. Esegui per n volte
pot pot * x4. Visualizza pot5. Fine
inizio
x, n
pot 1
i 1
i<= n
i i+1
vero
falso
pot = pot * x
pot
fine
Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari
Fondamenti di Informatica Fondamenti di Informatica CDL in Ingegneria Meccanica- A.A. 2008-2009CDL in Ingegneria Meccanica- A.A. 2008-2009
Esempio 6Esempio 6
Problema: acquisito un numero intero n, si visualizzi una figura quadrata di n*n con degli asterischi nella diagonale principale, dei segni meno al di sotto e dei segni più al di sopra della diagonale principale
Algoritmo: 1. Leggi n2. Finché le righe visualizzate sono
meno di n (indice i scorre le righe)• Finchè le colonne visualizzate sono
meno di n(indice j scorre le colonne)• se j>i visualizza il carattere meno• se j=i visualizza il carattere asterisco• se i<j visualizza il carattere più
3. Esci
inizio
n
i 0
i< n
j 0
j < n
j < i
j =i
j j+1
*+
-
a capo
i i+1
fine
falso
vero
falso
verofalso
falso vero
vero