PROGRAMMAZIONE STRUTTURATA

Похожие документы
Analisi strutturata 1

RAPPRESENTAZIONE GLI ALGORITMI NOTAZIONE PER LA RAPPRESENTAZIONE DI UN ALGORITMO

Appunti del corso di Informatica 1 (IN110 Fondamenti) 2 Algoritmi e diagrammi di flusso

Diagramma a blocchi per la selezione, in un mazzo di chiavi, di quella che apre un lucchetto

Come scrivere bene codice? (1 di 1)

Programmazione I. Fondamenti di programmazione. Problemi, Algoritmi, Diagrammi di flusso

Rappresentazione degli algoritmi

Le strutture di controllo in C++

Istruzioni Condizionali

Rappresentazione degli algoritmi

Algoritmi e soluzione di problemi

Le Strutture di controllo Del Linguaggio C. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

Rappresentazione degli algoritmi

Introduzione alla programmazione Esercizi risolti

Fondamenti di Informatica

Formalismi per la descrizione di algoritmi

Programmazione strutturata

Introduzione alla programmazione Algoritmi e diagrammi di flusso. Sviluppo del software

INFORMATICA. Strutture iterative

Risoluzione di un problema

Unità di apprendimento 6. Dal problema al programma

IL TEOREMA DI BOEHM-JACOPINI

Fondamenti di Informatica

Fondamenti di Informatica 6. Algoritmi e pseudocodifica

Introduzione alla programmazione

Introduzione alla programmazione strutturata

Lezione 7: La Formalizzazione degli Algoritmi - Strutture di Controllo e Selettive La Programmazione Strutturata (3 p) Giovedì 21 Ottobre 2010

Informatica (A-K) 5. Algoritmi e pseudocodifica

Sviluppo di programmi. E ora, finalmente. Si comincia! 1. Analizzare il problema. 2. Progettare una soluzione (1) E necessario capire:

1 Esercizi in pseudocodice

SISTEMI DI ELABORAZIONE DELLE INFORMAZIONI Algoritmi e programmazione Prof. Andrea Borghesan

Strutture di Controllo

Diagrammi di flusso. Un metodo per rappresentare graficamente gli algoritmi. sotto programma. Input/ Output. Start. predicato Elaborazione Stop

Informatica (A-K) 10. Linguaggio C - 2

Matlab. Istruzioni condizionali, cicli for e cicli while.

Linguaggio C++ 5. Strutture cicliche

COMANDI ITERATIVI. Ivan Lanese

Esercitazione 3. Espressioni booleane I comandi if-else e while

Blocchi di base. Schemi: Sequenza Selezione Iterazione. Flow chart strutturati Sequenza Selezione Iterazione. Teorema di Bohm e Jacopini

La rappresentazione dell algoritmo Diagrammi di flusso

CORSO DI PROGRAMMAZIONE

Rappresentazione con i diagrammi di flusso (Flow - chart)

ALGORITMI. Obiettivo: risolvere problemi mediante l uso di un elaboratore elettronico. Elaboratore elettronico

Studio degli algoritmi

Fondamenti di Informatica

Транскрипт:

PROGRAMMAZIONE STRUTTURATA Programmazione strutturata 2 La programmazione strutturata nasce come proposta per regolamentare e standardizzare le metodologie di programmazione (Dijkstra, 1965) Obiettivo: rendere più facile la lettura dei programmi (e quindi la loro modifica e manutenzione) Idea di base: La parte esecutiva di un programma viene vista come un comando (complesso o strutturato) ottenuto componendo istruzioni elementari, mediante alcune regole di composizione (strutture di controllo)

Programmazione strutturata 3 Concetti chiave: Utilizzo solamente delle tre strutture di controllo seguenti: concatenazione o composizione struttura condizionale struttura di ripetizione o iterazione BLOCCO SELEZIONE CICLO Abolizione di salti incondizionati (goto) nel flusso di controllo Schemi a blocchi strutturati 4 Le regole della programmazione strutturata impongono quindi delle severe restrizioni nella costruzione dei diagrammi di flusso Ci si basa su poche strutture di base con un solo ingresso e una sola uscita Le tre strutture (come vedremo) possono essere concatenate una di seguito all altra o nidificate una dentro l altra Non possono però essere intrecciate o accavallate

Schemi a blocchi strutturati 5 Corretto Sbagliato: È un tipico esempio di spaghetti programming Un dubbio 6 Ma queste restrizioni, cioè l utilizzo di solamente sequenza, selezione e iterazione senza l uso dei salti, dà la stessa potenza di calcolo (espressività) oppure si perde qualcosa? Teorema di Bohm- Jacopini (1966) (in versione semplificata) Le strutture di sequenza, selezione e iterazione sono sufficienti ad esprimere un qualsiasi algoritmo Ossia: L uso di queste sole strutture non limita il potere espressivo

Struttura di composizione (Blocco) 7 Diagramma a blocchi I Pseudo-codice Istruzione 1 Istruzione 2 { Istruzione 1 Istruzione 2 Istruzione 3 Istruzione 3 O Le tre istruzioni vengono eseguite sequenzialmente. Il concetto di blocco permette inoltre di considerare la sequenza di più istruzioni come un unica (composta) Struttura condizionale (a una via) 8 Diagramma a blocchi I Pseudo-codice V condizione F if condizione Se la condizione è vera allora viene eseguita altrimenti no O

Struttura condizionale (a due vie) 9 Diagramma a blocchi I V condizione 1 2 F Pseudo-codice if condizione 1 else 2 O Se la condizione è vera allora viene eseguita 1 altrimenti viene eseguita 2 Strutture condizionali (osservazioni ed esempi) 10 Es: determina e stampa il maggiore tra due numeri letti da input START leggi A,B; if (A > B) scrivi A; else scrivi B; V scrivi A leggi A, B A > B F scrivi B END

Strutture condizionali (osservazioni ed esempi) 11 <1> e <2> sono ciascuna una singola Qualora in un ramo occorra specificare più istruzioni, si deve quindi utilizzare un blocco Es: scrivi in ordine crescente due numeri letti da input leggi A, B; if (A < B){ scrivi A; scrivi B; else { scrivi B; scrivi A; Struttura di iterazione (while) 12 Diagramma a blocchi I condizione V F Pseudo-codice while condizione O Fintantoché la condizione si mantiene vera allora esegui

Struttura di iterazione (while) 13 while condizione condizione V I F <> viene ripetuta per tutto il tempo in cui la condizione rimane vera Se la condizione è già inizialmente falsa, l iterazione non viene eseguita neppure una volta In generale, non è noto a priori quante volte l sarà ripetuta O Struttura di iterazione (while) 14 Prima o poi, direttamente o indirettamente, l deve modificare la condizione: altrimenti CICLO INFINITO Per questo motivo, quasi sempre <> è in realtà un blocco, che contiene una in cui si modifica qualche variabile che compare nella condizione

Struttura di iterazione (esempi) 15 Es: Letto un numero intero N da input, sommare i primi N numeri positivi e scrivere il risultato i = 1 S = 0 leggi N leggi N; i=1; s=0; while (i<=n) { s = s + i; i = i + 1; scrivi s; s = s + i i = i + 1 i <= N scrivi s Struttura di iterazione (do-while) 16 Diagramma a blocchi I Pseudo-codice do while condizione V condizione F O Esegui fintantoché la condizione si mantiene vera

Struttura di iterazione (do-while) 17 do while condizione I È una variante della precedente: la condizione viene verificata dopo aver eseguito <> Se la condizione è falsa, l viene comunque eseguita almeno una volta V condizione F O Struttura di iterazione (do-while) 18 Analogamente al while, per evitare il ciclo infinito, <> deve modificare prima o poi qualche variabile che compare nella condizione Si noti che, come nel caso del while, si esce dal ciclo quando la condizione è falsa È adatta a quei casi in cui, per valutare condizione, è necessario aver già eseguito <> (esempio tipico: controllo di valori di input) Non è adatta a quei casi in cui il corpo del ciclo può non dover essere mai eseguito

Struttura di iterazione (esempi) 19 Es:Scrivere il valore massimo di una sequenza di interi positivi (letti da input) chiusa da uno zero MAX = 0 leggi Num Num > MAX MAX = 0; do { leggi Num; if (Num > MAX) MAX = Num; while (Num!= 0); scrivi MAX; MAX = Num Num!= 0 scrivi MAX Alcune considerazioni finali 20 Tutti i linguaggi imperativi implementano una qualche forma delle strutture presentate Naturalmente la forma sintattica può a volte variare leggermente, ma il funzionamento rimane identico uso di diversi marcatori per l inizio e la fine di un blocco (begin e end in Pascal) uso della parola chiave then nell if (in Pascal) Inoltre i vari linguaggi introducono altre strutture di controllo, non indispensabili, ma atte a semplificare il lavoro di scrittura del codice di scelta multipla (switch-case in C) iterativa controllata da contatore (for)

Programmazione strutturata (Conclusioni e Vantaggi) 21 Vantaggi: Leggibilità Supporto a metodologie di progetto top-down: Soluzione di problemi complessi attraverso la scomposizione in sotto-problemi, a loro volta scomponibili in sotto-problemi, etc. La soluzione si ottiene componendo le soluzioni dei sottoproblemi attraverso strutture di concatenazione, di selezione e di ripetizione Supporto a metodologia bottom-up: La soluzione di problemi avviene aggregando componenti già disponibili mediante concatenazione, selezione e ripetizione Maggior facilità di verifica Fondamenti di e Informatica manutenzione Dato due numeri interi positivi effettuare il loro prodotto con il metodo delle addizioni successive { leggi A e B; inizio P =A; while (B 1) { P = P + A Leggi A e B P =A B 1 False Scrivi P scrivi P; P = P + A; B = B -1; B = B -1 fine

Dato due numeri interi positivi maggiori da zero calcolare quoziente e resto con il metodo delle sottrazioni successive inizio Leggi A e B R = A Q = 0 R >= B False { leggi A e B; R =A; Q =0; while (R >=B) { R = R - B; Q = Q +1; ; scrivi Q e R; R R -B Scrivi Q,R Q = Q + 1 fine Sommare i primi N interi positivi inizio False Leggi N I = 0 S = 0 S = S + I I = I + 1 I = N { leggi N; I = 0; S=0; while (I < N) { S = S + I; I = I +1; ; scrivi S; Scrivi S fine

Leggere N numeri e scrivere la loro somma. inizio False Leggi N I = 0 S = 0 Leggi num S = S + num I = I + 1 I = N { leggi N; I =0; S=0; do { leggi Num; S = S + Num; I = I +1; while (I N); scrivi S; Scrivi S fine Sommare i primi N numeri dispari inizio True Leggi N I = 1 S = 1 S = S + I I = I + 2 I/2 <= N { leggi N; I =1; S=1; do { S = S + I; I = I +2; while (I/2<=N); scrivi S; Scrivi S fine

Calcolare il quadrato di un numero N intero positivo utilizzando la somma dei primi N numeri dispari inizio True Leggi N Q = 0 I = 0 Disp = 1 Q = Q +Disp Disp = Disp + 2 I = I + 1 I<N { leggi N; Q = 0; I =0; Disp = 1; do { Q = Q + Disp; Disp = Disp + 2; I = I +1; while (I<N); scrivi Q Scrivi Q fine inizio Calcolare sin x come sviluppo in serie Leggi x, eps T = x, sin x = x Sin x = x - x 3 /3! + x 5 /5! - x 7 /7! Termine n =Termine n-2 * x* x /((n-1)*n) prec = 0 I = 1 T prec < eps prec =T T = -(T * x * x)/(i+1)(i+2) Sinx = sin x + T Scrivi S fine I = I + 2