Programmazione strutturata Informatica per l’Ingegneria
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) Informatica per l’Ingegneria
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 Informatica per l’Ingegneria
Informatica per l’Ingegneria Sequenza : flow-chart Operazioni: - fai questo - fai quello Esempio: a = 5; a = a+b; Informatica per l’Ingegneria
Selezione : flow-chart Operazioni: se è verificata una condizione fai questo se è verificata una condizione fai questo altrimenti fai quello Sintassi Matlab: if espressione istruzione end istruzione1 else istruzione2 Informatica per l’Ingegneria
Iterazione : flow-chart espressione falso vero istruzione Operazioni: finchè è verificata una condizione fai questo esegui fai questo finchè è verificata una condizione Sintassi Matlab: while espressione istruzione End Ciclo a condizione finale non direttamente codificabile in Matlab Informatica per l’Ingegneria
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 Informatica per l’Ingegneria
Informatica per l’Ingegneria 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 I blocchi possono contenersi l’un l’altro ma mai intersecarsi blocco Informatica per l’Ingegneria
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 Informatica per l’Ingegneria
Informatica per l’Ingegneria Esempio 1 falso inizio a, b concordi s a+b fine |a| < |b| s a-b t a a b bt vero modulo di s e segno di a a , b 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| Informatica per l’Ingegneria
Informatica per l’Ingegneria Esempio 2 inizio s 0 i 1 i < =10 s s + n i i + 1 m s/10 fine vero falso m n 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 Informatica per l’Ingegneria
Informatica per l’Ingegneria Esempio 3 inizio max n min n i 2 i <= 10 fine n > max min n n< min max n vero falso i i +1 min, max n 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 Informatica per l’Ingegneria
Informatica per l’Ingegneria 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 1 i<= n falso c vero c blocco 2.2 i i+1 a capo Fine blocco 2.2 n fine Informatica per l’Ingegneria
Informatica per l’Ingegneria Esempio 5 inizio x, n pot 1 i 1 i<= n i i+1 vero falso pot = pot * x pot fine 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 Informatica per l’Ingegneria
Informatica per l’Ingegneria Esempio 6 inizio n i 1 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 i<= n falso vero j 1 j <= n falso vero falso j < i vero falso j =i vero - + * j j+1 a capo i i+1 Informatica per l’Ingegneria fine