Scarica Software, algortimi, programmi - Appunti di Diagnostica dei Dispositivi Elettronici e più Appunti in PDF di Dispositivi elettronici solo su Docsity! Software, Algoritmi e Programmi Lezione n. 3 Parti ! 3.1 Definizione di Software ! 3.2 Definizione di algoritmo, sue proprietà e formalismi ! 3.3 Metodo top-down, e programmazione strutturata ! 3.4 Definizione di programma e il processo di programmazione ! 3.5 Complessità degli algoritmi ! …complessità esponenziale 2 Algoritmo - definizione intuitiva Elenco preciso di operazioni, comprensibile da un esecutore, che definisce una sequenza finita di passi i quali risolvono ogni problema di un dato tipo (classe di problemi) Esempio: operazioni necessarie per compiere una telefonata, per prelevare denaro dal bancomat, per iscriversi ad un esame, … 3 Software parte n. 3.1 Metodo del problem solving e sviluppo del software ! Il problem solving è l’insieme di metodi formali per definire e risolvere un problema ! E’ un metodo usata dalle persone per risolvere tutti i tipi di problemi (economici, statistici, giuridici, etc.) ! Tecnica usata anche per sviluppare software ! Esempio di problem solving ! Problema - Prelevare contanti in banca ! Analisi - si possono prelevare contanti in diversi modi: bancomat, assegno, chiedendo un prestito, fare una rapina, etc. ! Soluzioni - si decide per il bancomat, si descrivono i passi operativi e le istruzioni che attivano il bancomat ! Elaborazione - esecuzione delle operazioni ! Risultati - i contanti 5 Sviluppare software ! Sviluppare software per un calcolatore, ossia per un esecutore-automa, e’ un’attivita’ di “risoluzione di problemi” secondo il metodo del problem solving ! Essa è divisa in fasi: Fasi di risoluzione di un problema con il calcolatore: 1. Analizzare il problema da risolvere 2. Avere l’idea risolutiva 3. Scrivere l’algoritmo formalizzandolo 4. Implementare l’algoritmo in un programma di alto livello 5. Tradurlo in linugaggio macchina 6. Verificare la correttezza del programma 7. Documentare, mantenere e aggiornare il programma 6 Creazione di un software: dal problema ai risultati (1/2) problema ANALISI algoritmo FORMALIZZAZIONE specificazioni PROGRAMMAZIONE programma 1. Comprendere il problema 2. Comprendere le soluzioni – idea risolutrice 4. Algoritmo tradotto in un linguaggio di alto livello 3. Formalizzazione dell’algoritmo 7 Creazione di un software: dal problema ai risultati (2/2) programma TRADUZIONE eseguibile ESECUZIONE risultati 5. Traduzione in linguaggio macchina 6. Valutazione dei risultati 4. Algoritmo tradotto in un linguaggio di alto livello MANUTENZIONE 7. Manutenere il software 8 Tipologia del software ! Software di base ! software al servizio di altri software ! un esempio è il sistema operativo: ! insieme di programmi che governano le funzioni e le risorse primarie del calcolatore ! esecuzione di programmi ! operazioni di ingresso/uscita ! gestione di file ! protezione ! rilevazione errori ! Software applicativo: dedicato ad uno scopo applicativo 17 Tipologie di software ! software real-time - software dedicato alla sorveglianza, all’analisi e all’elaborazione di eventi esterni (rilevamento di temperature di una piastra di acciaio durante la lavorazione, pilota automatico, sala operatoria) ! software gestionale - elaborazione dei dati e dei processi aziendali - 70%-80% ! software scientifico - astronomia, calcolo parallelo, etc. ! software di Intelligenza Artificiale - sistemi esperti, reti neurali, dimostratori di teoremi, alcuni sono dotati di autonomia, reattività e pro-attività (es. agenti intelligenti) ! software embedded - programmi residenti in prodotti industriali (lavatrici, forno, termostati ambientali, etc.) ! software per PC - applicativi di office-automation (fogli elettronici, elaboratori di testi, etc.) ! software basato su Internet - B2B, B2C, portali, etc. spesso erogato mediante servizi e non prodotti 18 Categorie di software ! Software Generici ! prodotti software standardizzati venduti sul mercato ! le specifiche vengono dettate dal mercato e dal produttore stesso ! Software Dedicati o ad hoc ! progetti ad hoc creati per un determinato cliente ! le specifiche vengono dettate dal cliente ! Modello di business diverso ! Prodotto (generici) vs. Progetto (ad hoc) ! Licenza (generici) vs. Contratto ad oggetto informatico (ad hoc) ! Metafora del prodotto industriale vs. quello artigianale 19 Obblighi per la PA in materia di sviluppo software ! Per la PA vi sono norme che OBBLIGANO le amministrazioni a richiedere ed ottenere la titolarità dei software “ad hoc” ! ex Art. 5, Direttiva del 19 dicembre 2003 “Sviluppo ed utilizzazione dei programmi informatici da parte delle pubbliche amministrazioni” (Gazzetta Ufficiale n. 31 del 7-2-2004) ! e a rilasciare in “uso gratuito” tale software alle altre PA (ex Art. 69, D.lgs. 82/2005 – CAD – Codice dell’Amministrazione Digitale) 20 Possibile scenario PA1 Fornitore Prodotto α PA2 PA3 Prodotto α Prodotto β Prodotto α ≠ Prodotto β licenza a titolo gratuito Cessione della titolarità Codice sorgente Codice oggetto Documentazione Possibilità di adattamento Codice sorgente Codice oggetto Documentazione Titolarità Prodotto δ Adattamento 21 Il riuso e la crisi del modello di business (1/2) ! Il riuso del software nella PA è stato introdotto per: ! razionalizzare la spesa pubblica in tema di servizi informatici ! incentivare il riuso piuttosto che duplicare gli acquisti ! rendere autonome le PA di poter modificare, integrare, aggiornare i software senza un legame vincolante con il fornitore 22 Il riuso e la crisi del modello di business (2/2) ! Il riuso accompagnato al fenomeno dell’open source ha fortemente modificato l’industria del software che da un modello basato principalmente sulla licenza d’uso a pagamento (es. Microsoft) è passata a due nuovi modelli di business: ! open source – basato principalmente sulla vendita di personalizzazioni e di giornate uomo di assistenza ! servizi ASP – application service provision vendita di servizi via rete (es. GoogleDocs, hosting di software, etc.) ! Sulla base di questi due nuovi modelli di business sono nati nuovi strumenti giuridici di tutela del software ! GPL e LGPL – licenze dell’open source ! Contratti/Appalti di servizi ASP 23 Materiali di riferimento e Domande possibili ! Capitolo 3 del Sartor ! Definizione di software, hardware e firmware ! Tipi di software e tipi di modelli di business ! Relazione fra software, algoritmo e programma ! Il problem solving e il software ! Le fasi di produzione di un software ! Il riuso e il software ad hoc nella normativa italiana (CAD e circolare Stanca) ! Nuovi modelli di business: open source a ASP 24 Algoritmo parte 3.2 Informatica – definizione dell’ACM ! L’algoritmo è una delle tante fasi della creazione del software e rappresenta la fase concettuale ! La fase dedicata alla formalizzazione delle soluzioni in informatica si realizza nella creazione di algoritmi ! Del resto la definizione data dall’ACM dell’informatica è: “L’Informatica è lo studio sistematico degli algoritmi che descrivono e trasformano l’informazione: la loro teoria, analisi, progetto, efficienza, realizzazione e applicazione.” (ACM - Association for Computing Machinery) 26 Algoritmo - definizione intuitiva Elenco preciso di operazioni, comprensibile da un esecutore, che definisce una sequenza finita di passi i quali risolvono ogni problema di un dato tipo (classe di problemi). Esempio: operazioni necessarie per compiere una telefonata, per prelevare denaro dal bancomat, per iscriversi ad un esame, etc. 27 Origini dell’algoritmo ! Il concetto di algoritmo è antico e non è strettamente legato al calcolatore: l’esecutore può essere diverso ! Sono stati ritrovati algoritmi in tavolette antiche in Mesopotamia risalenti al 1800-1600 a.c. ! Il termine algoritmo è la latinizzazione dal nome di un matematico persiano – Al-Khuwarizmi – vissuto nel nono secolo d.c. (Algoritmi de numero Indorum – versione latina, trattato sull’algebra dei numeri arabo-indiani) 28 Pseudocodifica - esempio Inizio Inizializza MAX a 0 Leggi N1 Finché N1 diverso da 999 ripeti Se N1 > MAX allora Assegna N1 a MAX Leggi N1 Stampa MAX Fine 37 Commenti sull’esempio ! N1 è il nome di un contenitore destinato a contenere il valore massimo; lo stesso vale per MAX ! Le variabili hanno un nome che le identifica e un contenuto che può variare durante l’esecuzione ! Vi sono istruzioni che indicano all’esecutore come comportarsi con altre istruzioni ! Vi è un blocco di istruzioni ripetuto finché non siano terminati i valori che vengono acquisiti dall’esterno (lettura) ! Vi è una solo inizio e una sola fine 38 I diagrammi a blocchi - (1/6) ! la diagrammazione a blocchi o flow chart è un metodo primitivo per rappresentare l’algoritmo in modo grafico sintetico e preciso ! un diagramma a blocchi indica un flusso di istruzioni ovvero la sequenza dei passi da eseguire ! è basato su simboli grafici ! ogni simbolo corrisponde ad un preciso costrutto o insieme di istruzioni 39 I diagrammi a blocchi - (2/6) ! Un diagramma a blocchi è un insieme di blocchi elementari costituito sempre dalle seguenti parti: ! blocco di inizio ! blocco di fine ! numero finito di blocchi di lettura/scrittura o di blocchi operativi ! numero finito di blocchi di controllo (opzionale) 40 I diagrammi a blocchi - (3/6) Istruzioni di inizio e di fine inizio fine Rappresenta il flusso (l'ordine) del diagramma 41 I diagrammi a blocchi - (4/6) istruzione operativa (effettiva) Rappresenta una elaborazione Esempi: calcola archivia 42 I diagrammi a blocchi - (5/6) istruzioni di controllo condizione vero falso 43 I diagrammi a blocchi - (6/6) istruzione di input/output Rappresenta un'operazione di input/output. Esempi: scrivi leggi 44 Esempio: conversione miglia-chilometri Algoritmo in pseudocodifica 1. Inizio 2. Leggi miglia 3. Km=miglia*1.609 4. Scrivi km 5. Fine inizio Leggi miglia km=miglia*1.609 scrivi km fine Diagramma a blocchi 45 Ordinamento emendamenti Ho ancora emendamenti ? no Votazione Inserire nella lista degli approvati sì Start Fine Esempio: Votazione emendamenti alla Camera Approvato? Inserire nella lista dei rigettati Passa all’emendamento successivo sì no Inserimento emendamenti Stampa lista emendamenti approvati Stampa lista emendamenti rigettati 46 Commenti sull’esempio ! Vi sono istruzioni di input/ouput: inserimento emendamenti e stampa liste ! Vi sono istruzioni operative: ordinamento, votazione, inserimento nella lista, etc. ! Vi è un blocco di istruzioni ripetuto finché non si esauriscono gli emendamenti (ciclo) ! Vi è un confronto (if): emendamento approvato o no ! Vi è una solo inizio e una sola fine 47 Art. 75 Cost. Referendum abrogativo ! 1. Proposta a cura di cinque regioni o da parte di 500.000 cittadini ! 2. Proposta ammissibile valutata della Corte Costituzionale ! 2.1 allora si fissa la data di votazione ! 2.2 altrimenti decade la proposta ! 3. Se si vota ! 3.1 si raggiunge il quorum ! 3.1.1 vincono i sì, allora si abroga la legge ! 3.1.2 vincono i no, allora non si abroga la legge ! 3.2 non si è raggiunto il quorum ! 4. Fine 48 La selezione con alternativa inizio fine condizione A vero falso B 57 La ripetizione (while) While (<condizione>) do { <blocco> } ! il blocco viene ripetuto finché la condizione risulta vera ! quando l’espressione risulta falsa la ripetizione cessa e si passa all’istruzione successiva 58 La ripetizione con la condizione vera in testa condizione su x vero A falso aggiornamento di x fine! inizializzazione di x 59 La ripetizione con la condizione falsa in coda condizione su x vero A falso aggiornamento di x fine! 60 La ripetizione enumerativa (for) for (<espressione iniziale>, <condizione>, <aggiornameto espressione>) { <blocco> } ! il blocco viene ripetuto finché la condizione risulta vera ! la formula di aggiornamento modifica i valori di confronto nell’espressione fino a quando la condizione non diviene vera 61 La ripetizione enumerativa (for) condizione su x vero A falso x aggiornamento di x 62 Esempio di for X<=100 vero falso X=1 X=X+1 Stampa X Cosa produce questo algoritmo ? 63 Istruzioni di controllo: i salti ! Istruzione di salto (jump, goto): ! prescrive che l’ulteriore elaborazione continui a partire da un certo punto ! trasferisce il controllo al punto indicato 64 Salti incondizionati e condizionati Salto incondizionato 1. X = 0; 2. X = X+1; 3. Goto 50 Soluzione: Salto condizionato 1. X = 0; 2. X = X+1; 3. If X < 10 go to 2 65 X = X+1 X = 0 Salto incondizionato Istruzione numero 50 66 X < 100 X = X+1 X = 0 Salto condizionato 67 Esercizi con i diagrammi a blocchi ! Cosa è una variabile? ! Cosa è una istruzione? ! Quali sono i simboli e i costrutti utilizzati? ! Modellare semplici procedure di ordinamento, calcolo, azioni quotidiane ! Modellare il procedimento di votazione di una legge costituzionale ! Modellare il procedimento di iscrizione a ruolo di una causa civile ! Modellare un procedimento amministrativo ! Modellare il procedimento legislativo anglosassone 68 Fine blocco3 Num Votanti < quorum? no sì Votazione Messaggio=“Quorum non raggiunto” Esito=false Esito? sì no Messaggio=“Esito negativo” Esito=false Messaggio=“Esito positivo” Esito=true Verifica=true? no sì Start blocco3 77 Fine blocco4 Esito=true? no sì Esito Abrograzione della legge Start blocco4 Stampa Messaggio 78 Programmazione strutturata ! la programmazione strutturata è quel procedimento che permette di ottenere algoritmi facilmente documentabili e comprensibili, manutenibili e di buona qualità ! Si utilizzano solo tre tipi di istruzioni (costrutti): ! Sequenza ! Selezione ! Ripetizione : tre tipi di ciclo condizione in testa (while), condizione in coda (repeat), ripetizione enumerativa (for) ! Regole base: ! i salti (goto) sono rigorosamente proibiti ! esiste un solo inizio e una sola fine di tutto il programma ! le selezioni si chiudono sempre 79 Potenza della programmazione strutturata ! Le tre strutture presentate consentono di esprimere qualsiasi algoritmo ! Teorema di Bohm-Jacopini: “Ogni diagramma a blocchi non strutturato è sempre trasformabile in un diagramma a blocchi strutturato equivalente...” (...con l’eventuale aggiunta di una variabile) 80 Materiali di riferimento e Domande possibili ! Capitolo 3 del Sartor ! Definizione di algoritmo e sue caratteristiche ! Formalizzazione di un algoritmo secondo la pseudocodifica e i diagrammi a blocchi ! Cosa è la sequenza, una condizione, un ciclo, un salto ! I principali tipi di istruzioni secondo la grafica dei diagrammi a blocchi ! Cosa è una inizializzazione? ! Cosa è un salto? ! La programmazione strutturata: caratteristiche e obiettivi ! Il metodo top-down: caratteristiche e obiettivi 81 Complessità computazionale degli algoritmi Lezione n. 3.5 3.5.1 Modelli di calcolatori 3.5.2 Algoritmi ed efficienza 3.5.3 Complessità esponenziale 3.5.1 Modelli di calcolatori I precursori dei calcolatore ! Calcolatore di Rodi o di Andikithira 65 a.C. ! Blaise Pascale – pascalina XVII secolo ! Gottfried Leibniz ! Joseh Jacquard XVIII secolo ! Charles Babbage XIX secolo ! Alan Turing XX secolo - Colossus ! John Von Neumann – macchina programmabile universale - ENIAC 83 Macchina di Babbage Il programma era già cablato all’interno del calcolatore 84 La macchina di von Neumann (1) re gi st ri Il programma è parte mutevole e risiede nella memoria. Le istruzioni quindi possono mutare nel tempo e il calcolatore è riprogrammabile – Macchina Universale 85 La macchina di von Neumann (2) ! L’elaborazione si svolge come segue: ! un’istruzione e i dati che tale istruzione deve manipolare vengono trasferiti o “caricati” dalla memoria nei registri ! l’unità centrale esegue l’istruzione ! gli eventuali risultati vengono trasferiti dai registri alla memoria ! si passa all’istruzione successiva (o a quella specificata dall’istruzione di controllo, se l’istruzione eseguita era di questo tipo). ! L’elaborazione è sequenziale: viene eseguita un’istruzione per volta 86 La macchina di von Neumann (3) ! Un programma per una macchina di Von Neumann consiste, pertanto: ! nella descrizione/prescrizione di una sequenza di istruzioni elementari sui dati ! combinate con istruzioni di controllo, che modificano l’ordine nel quale eseguire le operazioni sui dati ! A differenza di altre precedenti computer la macchina di von Neumann mette i dati e i programmi allo stesso piano rendendo l’esecutore (il computer) riprogrammabile N volte ! La Pascalina invece era progettata solo per le addizioni 87 3.5.2 Algoritmi ed efficienza ! Per risolvere un problema possiamo avere diversi algoritmi e tutti risolutori e validi ! Come scegliere l’algoritmo migliore? ! Correttezza, comprensione ed eleganza, efficienza ! Se l’esecutore è un calcolatore universale cercheremo di scrivere algoritmi efficienti ossia che al crescere dei dati in input il numero delle operazioni svolte sia il migliore ! Lo studio dell’efficienza degli algoritmi porta a studiare la complessità computazionale degli algoritmi stessi secondo due parametri: ! Tempo – quanti cicli di CPU compie il computer ! Spazio – quanta memoria occupa 88 Grafico approssimato dati Tempo+spazio 10.000 10000 40.000 20.000 20.000 30.000 50.000 60.000 30000 Ricerca sequenziale – N/2 Ricerca Binaria - log N Ricerca in matrice NxN – N2 Esponenziale 2N 97 Alcuni esempi Quando N raddoppia il tempo di esecuzione … Si dice complessità … Non cambia – leggi il primo numero di una lista Costante - N Aumenta di una costante “piccola” – ricerca binaria Logaritmica log N Raddoppia – prodotto di due liste di numeri N Lineare 2N Un pò meno del raddoppio N log N Aumenta di un fattore 4 – ricerca in una matrice NxN Quadratica N2 Aumenta di un fattore esponente di 2 – sequenza di operazioni su una lista polinomiale Aumenta di molto secondo la base di cui N è esponente – torre di Hanoi Esponenziale 2N 98 Classi di complessità Nome della classe Espressione Costante Costante - N Sottolineare log N √N (radice di N) Lineare N o c*N dove c è una costante Quadratica N2 Polinomiale nk +c*n Esponenziale 2N 99 Misure di efficienza I problemi che si cerca di risolvere in modo automatico sono di tre categorie: ! Problemi per i quali sono al momento noti un certo numero di algoritmi risolutivi ! Problemi per i quali è noto che non esistono algoritmi risolutivi ! Problemi per i quali non si sa se esistano o non esistano algoritmi risolutivi 100 Kurt Gödel – 1906 - 1978 ! Primo teorema di incompletezza di Gödel ! Ogni teoria matematica coerente comprende sempre una formula è che non dimostrabile e così pure anche la sua negazione ! Secondo teorema di incompletezza di Gödel ! Nessun sistema coerente è sufficiente per dimostrare la sua coerenza ! Esistono problemi indecidibili di cui non si può dimostrare né che è vero né che è falso ! Esistono problemi irriducibili ossia irrisolvibili, altri ancora non sono calcolabili mediante tempi polinomiali, altri sono calcolabili in un tempo polinomiale 101 Classi di problemi ! I problemi quindi si possono dividere in tre grandi categorie: ! Semplici – algoritmo polinomiale - P ! Difficili – algoritmo non polinomiale (NP-completi) ! Indecidibili – non si da dire nulla ! Le ultime due categorie costituiscono i cd problemi intrattabili NP P NP- Completi 102 Log Log Classi di problemi Log LOGSpace P = polinomiali NP – polinomiali con macchine NON deterministiche PSpace - polinomiali EXP – tempo esponenziale con macchine deterministiche NEXP - tempo esponenziale con macchine NON deterministiche 103 3.5.3 Complessità esponenziale Coordinate logaritmiche 104 Scala Richter ! Magnitudo TNT equivalente Frequenza 0 1 chilogrammo circa 8.000 al giorno 1 31,6 chilogrammi 1,5 178 chilogrammi 2 1 tonnellata circa 1.000 al giorno 2,5 5,6 tonnellate 3 31,6 tonnellate circa 130 al giorno 3,5 178 tonnellate 4 1000 tonnellate circa 15 al giorno 4,5 5600 tonnellate 5 31600 tonnellate 2-3 al giorno 5,5 178000 tonnellate 6 1 milione di tonnellate 120 all'anno 6,5 5,6 milioni di tonnellate 7 31,6 milioni di tonnellate 18 all'anno 7,5 178 milioni di tonnellate 8 1 miliardo di tonnellate 1 all'anno 8,5 5,6 miliardi di tonnellate 9 31,6 miliardi di tonnellate 1 ogni 20 anni 10 1 trilione di tonnellate 105 Grafico della legge di Moore 106 Grafico approssimato dati Tempo+spazio 10.000 10000 40.000 20.000 20.000 30.000 50.000 60.000 30000 Ricerca sequenziale – N/2 Ricerca Binaria - log N Ricerca in matrice NxN = N2 Esponenziale 2N 107 Complessità computazionale: Tea Party o dei matrimoni stabili Problema: far sedere gli ospiti a una tavola rotonda, in modo che ciascuno abbia ai suoi lati una persona che gradisce Tabella delle preferenze: John Mary Bob Jane Alice John Mary Bob Jane Alice 108