4. Dal Problema al Programma Informatica per l’Ingegneria- CDL in Ingegneria Informatica- A.A. 2016-2017 Sistemi Informativi DEI - Politecnico di Bari Dal Problema al Programma problema Metodo risolutivo algoritmo – Individuazione di un metodo risolutivo – Scomposizione del procedimento in un insieme ordinato di passi Linguaggio programma – Rappresentazione dei dati e dell’algoritmo attraverso un formalismo comprensibile dal calcolatore Sistemi Informativi DEI - Politecnico di Bari Problema Quesito con cui si chiede di trovare, mediante un procedimento di calcolo, uno o più dati sconosciuti, partendo dai dati noti (dizionario Garzanti) Informatica per l’Ingegneria- CDL in Ingegneria Informatica- A.A. 2016-2017 Sistemi Informativi DEI - Politecnico di Bari Problem Solving • Passaggio dalla formulazione del problema all’individuazione del metodo solutivo – Formulazione del problema – Costruzione del metodo di soluzione – Esecuzione Delegabile ad un esecutore che • capisca la descrizione della soluzione • sia in grado di eseguire le operazioni richieste Informatica per l’Ingegneria- CDL in Ingegneria Informatica- A.A. 2016-2017 Sistemi Informativi DEI - Politecnico di Bari Classi di problemi • Non tutti i problemi sono risolvibili attraverso l’uso di un elaboratore • Esistono classi di problemi per cui la soluzione automatica non è proponibile. In particolare si tratta di: – Problemi che presentano infinite soluzioni – Problemi per i quali non è stato individuato un metodo risolutivo – Problemi per i quali non esiste un metodo risolutivo automatizzabile Sistemi Informativi DEI - Politecnico di Bari Problemi calcolabili • Considereremo classi di problemi automaticamente: funzioni calcolabili risolvibili – Funzioni per cui esiste un algoritmo che termina e che, fornito un input, produca un risultato • Tipi di problemi: – – – – funzioni di calcolo: dato x determinare f(x) problemi decisionali problemi di ricerca problemi di enumerazione Sistemi Informativi DEI - Politecnico di Bari Dati • Una descrizione (anche parziale) di una situazione iniziale e di un obiettivo – Espressi in un linguaggio che permetta di descrivere situazioni (oggetti) e differenze fra coppie di situazioni • Un insieme di operatori applicabili a situazioni per trasformarle in nuove situazioni – Espressi in un linguaggio che fa riferimento al processo – Ogni sequenza di operatori è un operatore (composto) Informatica per l’Ingegneria- CDL in Ingegneria Informatica- A.A. 2016-2017 Sistemi Informativi DEI - Politecnico di Bari Soluzione • Un operatore (composto) nel linguaggio di riferimento che trasforma l’oggetto che descrive la situazione iniziale in quello che descrive la situazione desiderata Informatica per l’Ingegneria- CDL in Ingegneria Informatica- A.A. 2016-2017 Sistemi Informativi DEI - Politecnico di Bari Algoritmo • Serie di istruzioni che specifica l’insieme delle azioni da compiere per poter risolvere un problema – [Al-Khowarizmi, IX sec.] Regole per eseguire le 4 operazioni aritmetiche sui numeri scritti in notazione decimale • Esempio: Ricetta di cucina Informatica per l’Ingegneria- CDL in Ingegneria Informatica- A.A. 2016-2017 Sistemi Informativi DEI - Politecnico di Bari Algoritmi: Requisiti • Finitezza – Spaziale: esecuzione in spazio finito – Temporale: esecuzione in tempo finito • Generalità: – Classe di problemi – Dominio di definizione • Completezza • Non ambiguità: le istruzioni devono essere univocamente interpretabili • Eseguibilità: l'esecutore deve essere in grado di eseguire ogni istruzione Informatica per l’Ingegneria- CDL in Ingegneria Informatica- A.A. 2016-2017 Sistemi Informativi DEI - Politecnico di Bari • • • • Algoritmi: Costruzione Esaminare una specifica realtà o problema Costruirne un’astrazione Rappresentarla (più o meno) formalmente Individuare una sequenza di azioni che, eseguite, risolvano il problema nel mondo dell’astrazione – Il processo di analisi e astrazione è difficile da dominare per problemi complessi Informatica per l’Ingegneria- CDL in Ingegneria Informatica- A.A. 2016-2017 Sistemi Informativi DEI - Politecnico di Bari Problema • Fasi del procedimento solutivo: – Analisi del problema e identificazione di una soluzione – Descrizione della soluzione comprensibile all'esecutore – Interpretazione della soluzione Informatica per l’Ingegneria- CDL in Ingegneria Informatica- A.A. 2016-2017 Sistemi Informativi DEI - Politecnico di Bari Tipi di Poblemi • Primitivi – Risolubili tramite • Un’azione primitiva • Una sequenza di azioni primitive • Complessi – Non risolubili tramite un’azione nota • Al solutore • All’esecutore Informatica per l’Ingegneria- CDL in Ingegneria Informatica- A.A. 2016-2017 Sistemi Informativi DEI - Politecnico di Bari Problemi Complessi Soluzione: • Scomposizione in sottoproblemi – Fino a trovare un insieme di sottoproblemi primitivi (anche detti elementari) che risulti equivalente al problema di partenza • Individuazione del procedimento che porta alla soluzione – Processo di cooperazione tra sottoproblemi dei quali si è in grado di fornire facilmente una soluzione Informatica per l’Ingegneria- CDL in Ingegneria Informatica- A.A. 2016-2017 Sistemi Informativi DEI - Politecnico di Bari Problemi complessi Approccio: • Principio del Dìvide et Impera – Ridurre la complessità del problema • Scomposizione in sottoproblemi più semplici – Individuare Struttura e Relazioni fra di essi • Progettazione di un algoritmo per ciascuno – Se è complesso, riapplicare la scomposizione fino ad arrivare a problemi primitivi • Risolubili tramite azioni note Informatica per l’Ingegneria- CDL in Ingegneria Informatica- A.A. 2016-2017 Sistemi Informativi DEI - Politecnico di Bari • Scomposizione di Problemi Tecnica per raffinamenti successivi – Uno dei principi della programmazione strutturata – Basata sulla trasformazione di un problema in una gerarchia di problemi di difficoltà decrescente • Di un problema si affronta, prima, l’aspetto più generale e si passa, poi, a livelli sempre più dettagliati di descrizione sino ad arrivare agli elementi fondamentali Informatica per l’Ingegneria- CDL in Ingegneria Informatica- A.A. 2016-2017 Sistemi Informativi DEI - Politecnico di Bari Scomposizione di Problemi Requisiti • Ogni passo della suddivisione deve garantire che: – La soluzione dei sottoproblemi conduca alla soluzione generale – La successione di passi da eseguire abbia senso e sia possibile – La suddivisione scelta dia luogo a sottoproblemi “più vicini” agli strumenti disponibili • Risolubili direttamente con gli operatori a disposizione Informatica per l’Ingegneria- CDL in Ingegneria Informatica- A.A. 2016-2017 Sistemi Informativi DEI - Politecnico di Bari Scomposizione di Problemi Quando fermarsi? • Bisogna arrivare al punto in cui – Tutti i problemi sono primitivi – È fissato l’ordine di esecuzione dei sottoproblemi – È previsto il modo in cui un sottoproblema utilizza i risultati prodotti dalla soluzione dei sottoproblemi che lo precedono • Livello di cooperazione Informatica per l’Ingegneria- CDL in Ingegneria Informatica- A.A. 2016-2017 Sistemi Informativi DEI - Politecnico di Bari Scomposizione di Problemi • Livelli: – I problemi ottenuti dalla scomposizione sono: • Indipendenti – Si può progettare un algoritmo per ciascuno – La soluzione può essere delegata a solutori diversi (in parallelo) • Cooperanti – Ciascuno può usare il risultato della soluzione di altri – Quanto più complesso è il problema, tanti più livelli saranno necessari in profondità – Uno stesso problema può essere scomposto in modi diversi Informatica per l’Ingegneria- CDL in Ingegneria Informatica- A.A. 2016-2017 Sistemi Informativi DEI - Politecnico di Bari Risolvere problemi: Le variabili • La soluzione deve essere riferita ad una classe di problemi strutturalmente equivalenti ovvero ad un problema al variare dei dati di input • Le istruzioni della soluzione fanno riferimento a VARIABILI – Il valore non è fissato a priori – Il valore cambia a seconda della situazione elaborativa in cui si trova l'esecutore Informatica per l’Ingegneria- CDL in Ingegneria Informatica- A.A. 2016-2017 Sistemi Informativi DEI - Politecnico di Bari Le variabili • Le variabili sono “contenitori per dati” • Ogni variabile ha: – un nome --> identifica univocamente la variabile – Un valore --> corrisponde al dato contenuto nella variabile • Si fa riferimento al contenuto delle variabili specificando il loro nome • I nomi delle variabili possono comparire all'interno di: – espressioni – assegnamenti: il valore assegnato ad una variabile si sostituisce a quello presente in precedenza nella stessa variabile Informatica per l’Ingegneria- CDL in Ingegneria Informatica- A.A. 2016-2017 Sistemi Informativi DEI - Politecnico di Bari Scomposizione di Problemi • Conseguenze: – Aumento del numero problemi – Diminuzione della complessità di ciascuno • Può capitare che il medesimo sottoproblema debba venire risolto più volte, applicandolo a dati diversi, per risolvere il problema complessivo Informatica per l’Ingegneria- CDL in Ingegneria Informatica- A.A. 2016-2017 Sistemi Informativi DEI - Politecnico di Bari Scomposizione di Problemi Tecniche: • I costrutti offerti dai linguaggi di programmazione strutturata supportano le scomposizioni – Sequenziale • Suddividere un problema in parti disgiunte – Selettiva • Trattamento differenziato in casi differenti – Iterativa – Ricorsiva Informatica per l’Ingegneria- CDL in Ingegneria Informatica- A.A. 2016-2017 Sistemi Informativi DEI - Politecnico di Bari Scomposizione sequenziale • La soluzione si ottiene tramite una sequenza di passi: – I passi sono eseguiti uno alla volta – Ogni passo è eseguito una sola volta • Nessuno è ripetuto o omesso • L’ordine in cui i passi vanno eseguiti è lo stesso in cui sono scritti • L’ultimo passo equivale alla terminazione del procedimento Informatica per l’Ingegneria- CDL in Ingegneria Informatica- A.A. 2016-2017 Sistemi Informativi DEI - Politecnico di Bari Scomposizione Selettiva • Soluzione ottenuta tramite scelte multiple – strutture di selezione all’interno di altre strutture di selezione • La scomposizione fa ricorso a strutture multiple – Nidificazione (o annidamento) di strutture Informatica per l’Ingegneria- CDL in Ingegneria Informatica- A.A. 2016-2017 Sistemi Informativi DEI - Politecnico di Bari Scomposizione Iterativa • Successione di problemi tutti dello stesso tipo – Ripetere un numero finito di volte un passo di soluzione in modo da avere, alla fine, la soluzione completa • Requisiti: • È individuabile una catena di sottoproblemi che: – Sono uguali, oppure – Differiscono solo per i dati su cui agiscono ed inoltre i dati su cui agiscono – Sono uguali, oppure – Sono in una qualche relazione d’ordine • Ciascun problema differisce dal precedente perché opera sul dato successivo Informatica per l’Ingegneria- CDL in Ingegneria Informatica- A.A. 2016-2017 Sistemi Informativi DEI - Politecnico di Bari Definizione Ricorsiva • Ottenuta in termini di versioni più semplici della stessa cosa che definisce • 2 livelli: – Passo: Operazione che riconduce la definizione ad un dato livello a quella di livello inferiore – Base (o livello assiomatico) : definizione di partenza • Necessario per ricostruire i livelli successivi • Consente di definire problemi di ordine superiore Informatica per l’Ingegneria- CDL in Ingegneria Informatica- A.A. 2016-2017 Sistemi Informativi DEI - Politecnico di Bari Scomposizione Ricorsiva • Un problema di ordine n è definito in termini del medesimo problema di ordine inferiore – Entità definita in termini più semplici della stessa entità – Nella definizione deve apparire il livello assiomatico (o di ricostruzione) • Problema risolubile tramite un’azione primitiva Informatica per l’Ingegneria- CDL in Ingegneria Informatica- A.A. 2016-2017 Sistemi Informativi DEI - Politecnico di Bari Scomposizione Ricorsiva Requisiti • Almeno uno dei sottoproblemi è formalmente uguale al problema di partenza, ma di ordine inferiore • Al momento della scomposizione è noto l’ordine del problema – Scomposizione attuabile mediante regola di copiatura – Sostituire ad ogni occorrenza del problema la scomposizione ricorsiva fino ad avere problemi primitivi (raggiungere il livello assiomatico) Informatica per l’Ingegneria- CDL in Ingegneria Informatica- A.A. 2016-2017 Sistemi Informativi DEI - Politecnico di Bari Scomposizione Ricorsiva Esempio: Trovare un metodo per invertire una sequenza di lettere: • se la sequenza contiene una sola lettera allora – Scrivila (il problema è risolto) • Altrimenti: – Rimuovi la prima lettera dalla sequenza – Inverti la sequenza rimanente – Appendi in coda la lettera rimossa Informatica per l’Ingegneria- CDL in Ingegneria Informatica- A.A. 2016-2017 Sistemi Informativi DEI - Politecnico di Bari Scrittura di Algoritmi • In corrispondenza dei metodi di scomposizione apposite strutture di controllo sono definite al fine di procedere alla scrittura di algoritmi – Un linguaggio di rappresentazione deve essere scelto • La descrizione del processo di esecuzione deve definire esattamente – Gli oggetti su cui operare – La sequenza esatta delle azioni da compiere – La specifica dei controlli che determinano l’ordine di esecuzione delle azioni Informatica per l’Ingegneria- CDL in Ingegneria Informatica- A.A. 2016-2017 Sistemi Informativi DEI - Politecnico di Bari Diagrammi di Flusso • Linguaggio grafico utilizzato per trasmettere ad un esecutore umano la descrizione di un algoritmo – Si parte dal punto iniziale • Si seguono i percorsi indicati, eseguendo le azioni che via via si incontrano • In caso di percorsi alternativi, se ne sceglie uno a seconda della condizione specificata fino al raggiungimento del punto finale Informatica per l’Ingegneria- CDL in Ingegneria Informatica- A.A. 2016-2017 Sistemi Informativi DEI - Politecnico di Bari Diagrammi di flusso Pro: • Grafici – Adatti agli esseri umani – Adatti a rappresentare processi sequenziali – Immediatamente visualizzabili • • • • Rispondono all’esigenza di divisione del lavoro Documento base per l’analisi organica Non ambigui Traducibili in vari linguaggi di programmazione Informatica per l’Ingegneria- CDL in Ingegneria Informatica- A.A. 2016-2017 Sistemi Informativi DEI - Politecnico di Bari Diagrammi di flusso Contro: • Spesso non entrano in una pagina – Difficili da seguire e modificare • Non naturalmente strutturati – Spesso le modifiche portano a de- strutturazione • Lontani dai linguaggi dei calcolatori Informatica per l’Ingegneria- CDL in Ingegneria Informatica- A.A. 2016-2017 Sistemi Informativi DEI - Politecnico di Bari Dall’algoritmo al Programma • Un programma è un algoritmo espresso in un linguaggio formale, detto linguaggio di programmazione • Programmazione Strutturata: Ogni algoritmo (diagramma) può essere espresso in termini delle sole strutture: sequenza, selezione e iterazione (Uso di soli diagrammi strutturati) – Configurazioni standard di blocchi elementari Informatica per l’Ingegneria- CDL in Ingegneria Informatica- A.A. 2016-2017