Elementi di informatica Problemi, algoritmi e programmi 1 L ELABORATORE ELETTRONICO Il calcolatore elettronico è uno strumento in grado di eseguire insiemi di azioni elementari le azioni vengono eseguite su oggetti (dati) per produrre produrre altri oggetti (risultati) l esecuzione di azioni viene richiesta all elaboratore attraverso frasi scritte in qualche linguaggio (istruzioni) 2 1
PROGRAMMAZIONE L attività con cui si predispone l elaboratore a eseguire un particolare insieme di azioni su particolari dati, allo scopo di risolvere un problema I N P U T D A T I Elaboratore Elettronico O U T P U T R I S U L T A T I 3 Problem solving Uno degli scopi fondamentali dell informatica è: la risoluzione di problemi problema = compito che si vuole far risolvere automaticamente al calcolatore agente di calcolo 4 2
Problem solving (cont.) I problemi che siamo interessati a risolvere sono di natura molto varia: Trovare il maggiore tra due numeri Dato un elenco di nomi e numeri di telefono, trovare il numero di una data persona Dati a e b, risolvere l equazione ax+b=0 Stabilire se una parola precede alfabeticamente un altra Prenotare aerei, treni, hotel, Ordinare un elenco di nomi Ecc. 5 Problem solving (cont.) acquisire i dati input Elaborazione presentare i risultati output 6 3
Esempio: somma n 1, n 2 totale = n 1 + n 2 totale 7 RISOLUZIONE DI PROBLEMI La descrizione del problema non fornisce (in generale) un metodo per risolverlo. Affinché un problema sia risolvibile è però necessario che la sua definizione sia chiara e completa Non tutti i problemi sono risolvibili attraverso l uso del calcolatore. Esistono classi di problemi per le quali la soluzione automatica non è proponibile. Ad esempio: se il problema presenta infinite soluzioni per alcuni dei problemi non è stato trovato un metodo risolutivo per alcuni problemi è stato dimostrato che non esiste un metodo risolutivo automatizzabile 8 4
RISOLUZIONE DI PROBLEMI La risoluzione di un problema è il processo che, dato un problema e individuato un opportuno metodo risolutivo, trasforma i dati iniziali nei corrispondenti risultati finali. Affinché la risoluzione di un problema possa essere realizzata attraverso l uso del calcolatore, tale processo deve poter essere definito come sequenza di azioni elementari. 9 Attività per risolvere un problema 1. Comprendere il problema 2. Definire un procedimento risolutivo (algoritmo) 3. Implementare l algoritmo in un linguaggio di programmazione 4. Prova 5. Documentazione 6. Manutenzione 10 5
Comprendere il problema Focalizzare gli obiettivi Evidenziare le regole i dati espliciti ed impliciti Eliminare i dettagli inutili ed ambigui 11 Attività per risolvere un problema 1. Comprendere il problema 2. Definire un procedimento risolutivo (algoritmo) 3. Implementare l algoritmo in un linguaggio di programmazione 4. Prova 5. Documentazione 6. Manutenzione 12 6
Algoritmo Descrizione rigorosa Un algoritmo è una sequenza finita di azioni che risolve in un tempo finito una classe di problemi. L'esecuzione delle azioni nell'ordine specificato dall'algoritmo consente di ottenere, a partire dai dati di ingresso, i risultati che risolvono il problema di ingresso DATI Metodo Risolutivo (algoritmo ) Esecutore ESECUTORE una macchina astratta capace di eseguire le azioni specificate dall algoritmo. RISULTATI 13 Considerazioni 1. Suddivisione in sottoproblemi 2. Precisione dell algoritmo cresce al diminuire delle capacità dell agente di calcolo 14 7
Caratteristiche di un algoritmo Eseguibilità: ogni azione dev essere essere eseguibile dall esecutore in un tempo finito Non-ambiguità: ogni azione deve essere univocamente interpretabile dall'esecutore Finitezza : il numero totale di azioni da eseguire, per ogni insieme di dati di ingresso, deve essere finito 15 Caratteristiche di un algoritmo Quindi, l algoritmo deve: essere applicabile a qualsiasi insieme di dati di ingresso appartenenti al dominio di definizione dell algoritmo essere costituito da operazioni appartenenti ad un determinato insieme di operazioni fondamentali essere costituito da regole non ambigue, cioè interpretabili in modo univoco qualunque sia l esecutore (persona o macchina ) che le legge 16 8
Struttura in passi elementari Tutte le operazioni specificate dall algoritmo devono essere eseguibili dall agente (operazioni elementari) altrimenti è necessario scomporre il problema troppo complesso in sotto problemi più semplici 17 Esempio: l area di una campana r=b/2 h1 h2 b B r Sottoproblema 1 A1 = ½ π r 2 Area della campana = A1 + A2 +A3 h1 h2 b b B Sottoproblema 2 A2 = b h2 Sottoproblema 3 A3 = b h1 + ½ ( ½ (B-b) h1) + ½ ( ½ (B-b) h1) 18 9
Esempio: gestione biblioteca Libri disposti sugli scaffali La posizione di ogni libro è fissa ed è individuata da due coordinate: numero dello scaffale posizione nello scaffale La biblioteca è dotata di uno schedario (ordinato per autore/i e titolo). Ogni scheda contiene, nell ordine: Cognome e nome dell autore Titolo del libro Numero dello scaffale Posizione attribuita al libro nello scaffale 19 Esempio di scheda Autore: Manzoni Titolo: I promessi Sposi Scaffale: 33 33 Posizione: 13 13 20 10
Problema Trovare un libro?? 21 Formulazione dell algoritmo 1. Cerca la scheda del libro nello schedario 2. Segnati numero scaffale e posizione 3. Cerca lo scaffale indicato 4. Accedi alla posizione indicata e preleva il libro Questo modo incrementale di procedere si dice top-down o anche procedimento per raffinamenti successivi 22 11
Primo sotto-algoritmo di ricerca 1. Prendi la prima scheda dello schedario 2. Se titolo e autore/i sono quelli cercati, la ricerca termina con successo, altrimenti passa alla scheda successiva 3. Continua di scheda in scheda finché non trovi quella cercata. Se vengono esaurite le schede, il libro cercato non esiste. Devi cercare il libro in un altra biblioteca. 23 Cosa succede se l autore cercato è Zecchi? 24 12
Cosa succede se l autore cercato è Zecchi? Autore: Zecchi Autore: Petrarca Titolo: Autore: Manzoni Scaffale: Autore: 33 Zuzzurellone Titolo: Autore: Leopardi Posizione: 13 Scaffale: Autore: 33 Verga Titolo: Autore: Autore: Manzoni ManzoniTitolo: Titolo: Autore: Goldoni Autore: Petrarca Scaffale: Scaffale: 33 33 Autore: Posizione: Titolo: Manzoni Titolo: 13 Titolo: Scaffale: Titolo: 33 Autore: Titolo: LeopardiScaffale: Scaffale: 33 33 33 Posizione: 13 Autore: Posizione: 13 Autore: Alighieri Titolo: Autore: Alighieri Goldoni Titolo: I promessi Scaffale: Posizione: 33 13 Scaffale: Titolo: Sposi Posizione: Posizione: Posizione: 13 13 Posizione: 33 13 13 Titolo:La Titolo:La Divina Divina Commedia Scaffale: Scaffale: Commedia 33 Scaffale: 33 33 schedario Posizione: 13 Posizione: 13 Scaffale: Scaffale: 5 Posizione: 5 Posizione: 13 13 Posizione: Posizione: 10 10 25 Secondo sotto-algoritmo di ricerca 1. Esamina la scheda centrale dello schedario 2. Se la scheda centrale corrisponde al libro cercato allora la ricerca termina 3. In caso contrario, prosegui allo stesso modo nella metà superiore o inferiore dello schedario a seconda che il libro cercato segua o preceda quello indicato sulla scheda 26 13
Cosa succede ora se l autore cercato è Zecchi? 27 Cosa succede ora se l autore cercato è Zecchi? Autore: Zecchi Autore: Manzoni Titolo: Titolo: I promessi Sposi Scaffale: Autore: Verga 44 Scaffale: Autore: 33 Titolo: Petrarca Posizione: Scaffale: 12 Titolo: 33 Posizione: Scaffale: 13 33 Autore: Leopardi Autore: Posizione: 13 Autore: Alighieri Alighieri Autore: Goldoni Titolo: Posizione: 14 Titolo:La Titolo: Titolo:La Divina Divina Commedia Scaffale: Commedia Scaffale: 33 33 schedario Scaffale: Scaffale: 5 5 Posizione: Posizione: 13 13 Posizione: Posizione: 10 10 28 14
Secondo sotto-algoritmo di ricerca: errore 1. Esamina la scheda centrale dello schedario 2. Se la scheda centrale corrisponde al libro cercato allora la ricerca termina 3. In caso contrario, prosegui allo stesso modo nella metà superiore o inferiore dello schedario a seconda che il libro cercato segua o preceda quello indicato sulla scheda L algoritmo è incompleto: c è un altra condizione di terminazione quando il libro non esiste 29 Revisione del passo 2 Terminazione Se Se la la scheda centrale corrisponde al al libro cercato oppure Se Se la la parte dello schedario da da consultare è vuota Libro trovato Libro inesistente 30 15
Qualità degli algoritmi Due qualità fondamentali di un algoritmo: Correttezza l algoritmo permette effettivamente di risolvere il problema Efficienza l esecuzione dell algoritmo richiede un uso limitato di risorse un algoritmo è tanto più efficiente quanto meno risorse richiede per la sua esecuzione. Una risorsa importante è il tempo di esecuzione 31 Esempio: gestione biblioteca Entrambi gli algoritmi di ricerca sono corretti Il secondo algoritmo è più efficiente del primo 32 16
Altre qualità degli algoritmi leggibilità essere facilmente comprensibile modificabilità essere facilmente modificabile, a fronte di (piccole) modifiche nelle specifiche del problema risolto dall algoritmo parametricità riusabilità 33 Esempi Soluzione dell equazione ax+b=0 leggi i valori di a e b calcola calcola -b dividi quello che hai ottenuto per a e chiama x il risultato stampa x Calcolo del massimo di un insieme Scegli un elemento come massimo provvisorio max Per ogni elemento i dell insieme: se i>max eleggi i come nuovo massimo provvisorio max Il risultato è max NOTA I passi sono eseguiti in sequenza e l ordine delle istruzioni è essenziale per la correttezza dell algoritmo 34 17
riassumendo Algoritmo Sequenza di azioni che trasforma i dati iniziali in un numero finito di passi, elementari e non ambigui, per giungere al risultato finale Questa sequenza di azioni può essere eseguita da un agente di calcolo 35 Attività per risolvere un problema 1. Comprendere il problema 2. Definire un procedimento risolutivo (algoritmo) 3. Implementare l algoritmo in un linguaggio di programmazione 4. Prova 5. Documentazione 6. Manutenzione 36 18
Implementazione di un algoritmo Algoritmo deve essere trascritto in un linguaggio Linguaggi Linguaggi naturali usato dagli uomini per comunicare complessi ambigui Linguaggi artificiali usati in informatica: linguaggi di programmazione 37 ALGORITMI E ALGORITMI E PROGRAMMI Ogni elaboratore è una macchina in grado di eseguire azioni elementari su oggetti detti DATI. L esecuzione delle azioni è richiesta all elaboratore tramite comandi elementari chiamati ISTRUZIONI espresse attraverso un opportuno formalismo: il LINGUAGGIO di PROGRAMMAZIONE. La formulazione testuale di un algoritmo in un linguaggio comprensibile a un elaboratore è detta programma. Un programma è la formulazione testuale, in un certo linguaggio di programmazione, di un algoritmo che risolve un dato problema. 38 19
Alcuni linguaggi di programmazione famosi FORTRAN: metà degli anni 50 (FORmula TRANslator) COBOL: metà degli anni 50 (Common Business-Oriented Language) Pascal: inizio degli anni 70 (nome dal matematico francese Blaise Pascal che fu il primo ad ideare una macchina calcolatrice: la Pascalina) C: inizio degli anni 70 suo antenato: linguaggio B Prolog: inizio degli anni 70 (PROgramming in LOGic) Linguaggi ad alto livello 39 Il linguaggio C Il linguaggio C è stato sviluppato intorno al 1972, nei Bell Laboratories AT&T americani, da Dennis Ritchie E nato come linguaggio di sviluppo del Sistema Operativo UNIX 40 20
Sintassi e semantica Linguaggio Sintassi insieme di regole che consentono di costruire correttamente le frasi del linguaggio Semantica disciplina che studia il significato delle parole e delle frasi LIVELLO sintattico semantico FORMA CORRETTA sono andato a scuola il gatto è un animale FORMA NON CORRETTA ho andato a scuola l albero è un animale 41 Programma Testo (i.e. sequenza di istruzioni) scritto in accordo alla sintassi e semantica di un linguaggio di programmazione 42 21
Linguaggio macchina Un calcolatore non è in grado di eseguire direttamente programmi scritti in linguaggi ad alto livello un calcolatore è in grado di eseguire direttamente solo programmi scritti nel proprio linguaggio macchina 0110001000100101 1101001001010101 0010100101000100 1110100100110101 43 Linguaggio macchina (cont( cont.) Il linguaggio macchina è linguaggio di programmazione comprensibile direttamente dal calcolatore molto elementare e primitivo: sequenza di cifre binarie. Ad esempio, una possibile istruzione potrebbe essere 0010110000101100 è difficile da comprendere per un essere umano specifico di un calcolatore: calcolatori di tipo diverso hanno linguaggi macchina differenti 44 22
Traduzione Per rendere un programma (scritto in un linguaggio ad alto livello) eseguibile da un calcolatore è necessario tradurre il programma in un programma equivalente scritto nel linguaggio macchina del calcolatore La traduzione può avvenire in due modi: compilazione interpretazione 45 Compilazione ERRORI sintassi (compilatore) un programma scritto in un linguaggio di programmazione d esecuzione ad alto livello viene trasformato in un programma in linguaggio (divisione macchina per 0) e poi può essere eseguito più volte senza dover tradurre nuovamente il programma logici codice sorgente controllo della correttezza sintattica Programma scritto in C Compilazione 0110001000100101 1101001001010101 0010100101000100 1110100100110101 codice eseguibile Nota: correttezza sintattica correttezza semantica 46 23
Interpretazione Traduzione riga per riga: ciascuna istruzione del programma scritto in un linguaggio di programmazione ad alto livello viene trasformata in istruzioni del linguaggio macchina ed eseguita 47 Compilazione & interpretazione Una analogia con la traduzione tra linguaggi diversi la compilazione è analoga alla traduzione di un libro l interpretazione è analoga alla traduzione simultanea 48 24
49 50 25
Interprete vs compilatore Quale delle due soluzioni è migliore? Nella compilazione la traduzione viene effettuata una sola volta, in una fase che precede l esecuzione; si ottengono in genere migliori prestazioni nell esecuzione; Nella compilazione si possono attuare processi di ottimizzazione dell eseguibile, dato che il compilatore opera sull intero programma e non istruzione per istruzione come l interprete; Per ogni modifica del programma sorgente, la compilazione deve essere ripetuta completamente per rigenerare il codice eseguibile; l interprete consente invece di eseguire il programma non appena il codice sorgente sia stato aggiornato, per cui il costo di eventuali modifiche è pressoché nullo. Compilazione Applicazioni più veloci; Maggiore lavoro nel processo di messa a punto e manutenzione Indicata per prodotti commerciali a larga diffusione Interpretazione Consente tempi di sviluppo più contenuti Produce programmi meno efficienti Indicata in fase di prototipazione, dei programmi commerciali che una volta ultimati venivano compilati prima del rilascio 51 Interprete vs compilatore Considerare le applicazioni che debbono essere eseguite: vincolati da I/O: programmi che eseguono molte operazioni di ingresso/uscita intervallate da brevi periodi di elaborazione; convenientemente eseguiti da un interprete senza penalizzazioni nell efficienza (il tempo di ingresso/uscita è indipendente dalle modalità di esecuzione del programma), appartengono a questa categoria la maggioranza dei programmi gestionali. vincolati da CPU: programmi che eseguono poche operazioni di ingresso/uscita rispetto alla mole delle elaborazioni effettuate. sono programmi prevalentemente di tipo scientifico o ingegneristico, sono scarsamente efficienti se eseguiti da un interprete e la loro compilazione risulta pressoché indispensabile. Considerazioni commerciali la distribuzione del codice eseguibile garantisce al programmatore che l acquirente non sarà facilmente in grado di modificare e/o riutilizzare parti del programma sorgente, soggette ovviamente a vincoli di proprietà intellettuale Considerazioni tecnologiche la diffusione di Internet e la disponibilità di calcolatori ad alte prestazioni e a costi contenuti hanno portato a una rinascita dell uso di interpreti software (portabilità e indipendenza dall hardware sul quale vengono eseguite le applicazioni). 52 26
Compilazione & interpretazione Linguaggi compilati Pascal, C Linguaggi interpretati Prolog, Lisp 53 Attività per risolvere un problema 1. Comprendere il problema 2. Definire un procedimento risolutivo (algoritmo) 3. Implementare l algoritmo in un linguaggio di programmazione 4. Prova 5. Documentazione 6. Manutenzione 54 27
Prova compilazione compilatore Errori di sintassi inserimento e correzione esecuzione sistema di di esecuzione Stampa dei risultati ed errori di esecuzione verifica 55 Attività per risolvere un problema 1. Comprendere il problema 2. Definire un procedimento risolutivo (algoritmo) 3. Implementare l algoritmo in un linguaggio di programmazione 4. Prova 5. Documentazione 6. Manutenzione 56 28
Documentazione Scrivere un manuale d uso che accompagni il programma Questo manuale deve essere scritto facendo uso della terminologia tipica del problema e non in gergo computeristico 57 Attività per risolvere un problema 1. Comprendere il problema 2. Definire un procedimento risolutivo (algoritmo) 3. Implementare l algoritmo in un linguaggio di programmazione 4. Prova 5. Documentazione 6. Manutenzione 58 29
Manutenzione Non esistono parti del programma soggette a usura!! Manutenzione del programma = modificarlo aggiornarlo estenderlo renderlo più veloce Per gli studenti il problema della manutenzione è relativamente ridotto: una volta che il programma funziona si passa all esame successivo 59 Riepilogo Problemi Algoritmi Programmi Problema: compito che si vuole far risolvere automaticamente al calcolatore Algoritmo: descrizione rigorosa delle azioni da compiere per risolvere un problema Programma: sequenza di istruzioni in un linguaggio di programmazione. Scopo del programma: fornire al calcolatore le capacità per risolvere un dato problema 0011000110011 60 30