280 likes | 450 Views
3. Programmazione strutturata (testo di riferimento: Bellini-Guidi). Ing. Simona Colucci. Linguaggi di programmazione. Un programma è un algoritmo espresso in un linguaggio formale , detto linguaggio di programmazione: Interpretabile ed eseguibile da un calcolatore
E N D
3. Programmazione strutturata(testo di riferimento: Bellini-Guidi) Ing. Simona Colucci Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012
Linguaggi di programmazione 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 Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012
Linguaggi 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) Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012
Linguaggio Macchina • Linguaggio formale che il computer è in grado di interpretare ed eseguire senzamediazioni • 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’istruzioneoperando 00000010 000000000011100 Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012
Linguaggio assembler • Le singole istruzioni binarie sono rappresentate con un codice mnemonico LOAD 220 SUM 252 MEM 220 • Traduzione in linguaggio macchina ad opera di programmi detti assemblatori, forniti dai costruttori Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012
Microlinguaggi • 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 Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012
Linguaggi 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 Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012
Linguaggi 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 Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012
Algoritmi come sequenze di stati Esempio: determina il Massimo Comune Divisore (MCD) a.prendi i due numeri b.calcola il resto della divisione intera del num. più grande per il più piccolo c.sostituisci il numero più grande con il resto della divisione d.finché tale resto è diverso da zero torna all’istruzione b e.il numero più grande (quello non nullo) è il MCD cercato Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012
Algoritmi come sequenze di stati Flusso di esecuzione dell’algoritmo MCD con i numeri 924 e 120 passo 1 924 e 120 passo 2 84 è il resto della divisione intera di 924 per 120 passo 3 120 e 84 passo 4 il resto è diverso da zero, torna all’istruzione b passo 5 36 è il resto della divisione intera di 120 per 84 passo 6 84 e 36 passo 7 il resto è diverso da zero, torna all’istruzione b passo 8 12 è il resto della divisione intera di 84 per 36 passo 9 36 e 12 passo 10 il resto è diverso da zero, torna all’istruzione b passo 11 0 è il resto della divisione intera di 36 per 12 passo 12 12 e 0 passo 13 il resto è uguale a zero, prosegui con l’istruzione successiva passo 14 12 è il MCD Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012
Algoritmi come sequenze di stati Sequenza di stati nel flusso dell’algoritmo per il calcolo del MCD(924,120) • 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 Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012
Programmazione non strutturata Esempio: Algoritmo equivalente per il calcolo del Massimo Comune Divisore (MCD) a. prendi i due numeri b. calcola il resto della divisione intera del num. più grande per il più piccolo c. Se il resto è uguale a zero vai all’istruzione f d. sostituisci il numero più grande con il resto della divisione e. vai all’istruzione b f. il numero più piccolo è il MCD cercato Salto incondizionato Salto condizionato Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012
Programmazione non strutturata Flusso di esecuzione dell’algoritmo MCD con i numeri 924 e 120 passo 1 924 e 120 passo 2 84 è il resto della divisione intera di 924 per 120 passo 3 il resto è diverso da zero(prosegui in sequenza) passo 4 120 e 84 passo 5 vai all’istruzione b passo 6 36 è il resto della divisione intera di 120 per 84 Passo 7 il resto è diverso da zero(prosegui in sequenza) Passo 8 84 e 36 passo 9 vai all’istruzione b passo 10 12 è il resto della divisione intera di 84 per 36 Passo 11 il resto è diverso da zero(prosegui in sequenza) passo 12 36 e 12 passo 13 vai all’istruzione b passo 14 0 è il resto della divisione intera di 36 per 12 passo 13 il resto è uguale a zero, vai all’istruzione f passo 14 12 è il MCD Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012
Programmazione non strutturata 5,9,13 e Sequenza di stati nel flusso dell’algoritmo per il calcolo del MCD(924,120) d • 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 4,8,12 a b c 3,7,11,15 1 2,6,10,14 f 16 Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012
Programmi 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) Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012
Programmi 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 Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012
Sequenza : flow-chart • Operazioni: • - fai questo • - fai quello • Esempio: a = 5; • a = a+b; Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012
Selezione : flow-chart • Operazioni: • seè verificata una condizione fai questo • seè verificata una condizione fai questoaltrimenti 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"; Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012
Iterazione : flow-chart • Operazioni: • finchè è verificata una condizione fai questo • eseguifaiquesto 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); falso espressione vero istruzione Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012
Programmi 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 Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012
blocco Blocco 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 Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012
Programmazione strutturata: esempi • Calcolo della somma algebrica tra due numeri relativi utilizzando le operazioni di somma e differenza tra numeri senza segno • Calcolo della media • Calcolo dei valori massimo e minimo • Visualizzazione di caratteri letti da tastiera • Calcolo di una potenza • Visualizzazione di un quadrato Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012
inizio a , b vero a, b concordi falso vero |a| < |b| falso s a+b t a a b bt s a-b modulo di s e segno di a fine Esempio 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| Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012
inizio s 0 i 0 falso i < 10 vero n s s + n i i + 1 m s/10 m fine Esempio 2 Problema: Acquisizione di 10 numeri interi e calcolo della media Algoritmo: • Azzerare la somma s • Se non si sono acquisiti tutti i numeri: 2.1 Acquisire un numero n 2.2 Sommare n ad s e tornare al passo 2 • La media è s/10 • Fine Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012
inizio n max n min n i 1 i < 10 falso vero n falso vero n< min min n vero n > max max n falso i i +1 min, max fine Esempio 3 Problema: Acquisizione di 10 numeri interi; determinazione e visualizzazione del numero maggiore e minore Algoritmo: • Leggi il primo numero n • Poni il massimo e il minimo corrente(variabili max e min) pari a n • Finché i numeri inseriti sono meno di 10 3.1 Leggi un nuovo numero n 3.2 Se n<min min=n altrimenti se n>max max=n • Visualizza min e max • Fine Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012
Esempio 4 inizio 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: • Leggi il primo numero n • Finché n>0 2.1 Leggi c 2.2 Visualizza c n volte 2.3 Visualizza “a capo” 2.3 Leggi nuovo numero n • Fine connettore n n > 0 falso Inizio blocco 2.2 vero i 0 falso i< n c vero c blocco 2.2 i i+1 a capo Fine blocco 2.2 n fine Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012
inizio x, n pot 1 i 0 falso i< n vero pot = pot * x i i+1 pot fine Esempio 5 • Problema: Calcolo e visualizzazione di una potenza(variabile pot), acquisiti la base x e l’esponente n • Algoritmo: • Acquisisci x ed n(intero) • Poni pot pari ad 1 • Esegui per n volte • pot pot * x • 4. Visualizza pot • 5. Fine Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012
Esempio 6 inizio n i 0 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: • Leggi n • 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ù • Esci falso i< n vero j 0 falso j < n vero falso j < i vero j =i falso vero - + * j j+1 a capo i i+1 Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 fine