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