SCUOLA DI MEDICINA E CHIRURGIA Università degli Studi di Napoli Federico II Corso di Sistemi di Elaborazione delle Informazioni Dott. Francesco Rossi a.a. 2016/2017 1
I linguaggi di programmazione e gli algoritmi 2
Prima Parte: A che punto siamo arrivati? La lezione di settimana scorsa è stata pesantissima: non mi ricordo nulla! 3
La volta scorsa Come funziona un computer? processore memoria programmi: serie di istruzioni elementari vengono eseguiti dal computer in linguaggio macchina (istruzioni binarie) 4
Seconda parte: Come si scrivono i programmi? Non vorrà mica farci scrivere dei programmi questa qua, vero?! 5
Linguaggio macchina Un programma è una serie di istruzioni elementari codificate in linguaggio macchina la serie è molto lunga (anche milioni di righe di codice) che prende il nome di oggetto binario ricordiamoci: un istruzione è composta da 4 byte: 10011111 00101000 00000011 01110100 Scrivere un programma direttamente in linguaggio macchina è un processo: lungo e soggetto ad errori praticamente impossibile per programmi complessi! 6
Assembly E possibile scrivere istruzioni più semplici: ADD 2000 2040 2080 usiamo lettere e numeri invece che bit Ognuna di queste istruzioni viene poi trasformata in un istruzione in linguaggio macchina: il programma che effettua la trasformazione in linguaggio macchina si chiama assembler il linguaggio si chiama assembly 7
Questo l ho capito! Voi informatici siete degli scansafatiche e, al posto che scrivere direttamente in linguaggio macchina (che è l unica cosa che i computer possono eseguire), scrivete in assembly (che è un po più semplice) e poi chiedete all assembler di trasformarlo in linguaggio macchina. 8
Abbiamo detto: Tutto in assembly? l assembler trasforma un istruzione scritta in assembly in una istruzione scritta in linguaggio macchina l oggetto binario (l insieme delle istruzioni di un programma) è lungo anche milioni di istruzioni Quindi, per scrivere un programma, dovremmo scrivere migliaia (anche milioni) di istruzioni in assembly E ancora troppo difficile! 9
Linguaggi di programmazione di alto livello I linguaggi di programmazione di alto livello permettono di specificare istruzioni in linguaggi più semplici per l uomo: istruzioni più complesse rispetto alle istruzioni elementari eseguite dal processore il compilatore trasforma ogni istruzione di un programma di alto livello in una o più (spesso molte di più!) istruzioni elementari 10
Codifica del software 11
Quanta automazione? Il passaggio dal codice di alto livello al codice in linguaggio macchina è automatico E possibile semplificare ulteriormente la creazione di codice? in parte sì (ad esempio, riutilizzo del codice) in buona parte no: è un operazione che deve essere svolta manualmente dai programmatori 12
Quanto è difficile? E difficile scrivere codice di alto livello? molto meno che scrivere il codice in linguaggio macchina semplici programmi sono facili da scrivere un corso universitario è sufficiente per imparare le basi programmi complessi e/o di grandi dimensioni sono più difficili da scrivere spesso contengono errori 13
Errori dei programmi 14
Errori dei programmi (2) 15
Errori dei programmi (3) 16
Terza Parte: Cosa sono gli algoritmi Non c entrano nulla con i logaritmi! 17
Gli algoritmi che conoscete già Serie di istruzioni finalizzate a conseguire uno scopo: come si cucina una torta? come si fa una somma in colonna? come si monta un mobiletto? Queste sono procedure, non algoritmi, ora scopriamo la differenza... 18
Cos è un algoritmo Procedimento che permette di risolvere un dato problema attraverso una serie di passi eseguiti in una sequenza specificata: assume in input delle informazioni produce in output delle informazioni Problema Input Algoritmo Output 19
Algoritmo: 5 proprietà fondamentali Input specificato: bisogna specificare cosa l algoritmo assume in input Output specificato: quali risultati può generare l algoritmo Determinatezza Efficacia Terminazione 20
Determinatezza L algoritmo specifica precisamente la sequenza di operazioni Ogni operazione deve avere una sola interpretazione possibile Esempio: eseguire i passi necessari eseguire i passi 1, 2, 5 aggiungete un po di sale aggiungete 4g di sale 21
Efficacia (o calcolabilità) L algoritmo deve poter essere eseguito in modo meccanico Deve essere possibile calcolare ogni operazione Ad ogni passo si ha la conoscenza: degli input dell algoritmo dei risultati calcolati nei passi precedenti 22
Terminazione Come potrebbe non terminare una procedura? alcune operazioni possono essere ripetute se fossero ripetute all infinito, la procedura potrebbe non terminare 23
Programmi e algoritmi Un programma è un algoritmo espresso in un particolare linguaggio di programmazione: un programma implementa un algoritmo un algoritmo può essere implementato in diversi modi Gli informatici studiano principalmente gli algoritmi ma anche come possono essere implementati 24
Programmi e algoritmi Problema possono esistere più algoritmi per risolvere lo stesso problema Input Algoritmo Output Programma un algoritmo può essere implementato con linguaggi diversi Informatica di base Linea 1 25
Dal problema al programma Problema Algoritmo lavoro umano Espressi in linguaggio naturale Espressi in linguaggi formali implementazione (fatta dall uomo) Codice di alto livello Compilazione e assemblamento Codice oggetto 26
Linguaggi naturali vs formali Linguaggi naturali: es: italiano, inglese, etc... sono soggetti ad interpretazioni Linguaggi formali: es: assembly, C++, Java (2 linguaggi di alto livello) sono univocamente interpretabili 27
Terza Parte: Pensiamo in modo algoritmico! Mmm, qua diventa difficile... 28
Prendiamo un problema reale Abbiamo dei CD in una scaffalatura uno spazio per ogni CD Ogni CD ha un prezzo Vogliamo mettere il CD con il prezzo minore all inizio della scaffalatura (a sinistra) Definiamo l algoritmo MEAS (=Metti Economico A Sinistra) MEAS è un nome inventato solo per questa lezione! 29
Input e Output Input: una sequenza di CD che riempie completamente una scaffalatura orizzontale. Es: Output: al termine, i CD in input sono in un ordine tale che il CD con il prezzo minore è nella prima posizione a sinistra dello scaffale. Es: 5 2 4 1 1 5 4 2 30
Procedura MEAS 1. Sia alfa la prima posizione a sinistra 2. Sia beta la posizione appena a destra di alfa 3. Se il CD in posizione beta costa meno del CD in posizione alfa, allora scambia il CD in posizione alfa con il CD in posizione beta 4. Se c è almeno una posizione a destra di beta, sposta beta a destra di una posizione e torna al passo 3, altrimenti termina 31
Esempio Input: Passo 1: Passo 2: Passo 3: 5 2 4 1 5 2 4 1 alfa 5 2 4 1 alfa beta 2 5 4 1 alfa beta Passo 4: + torna al passo 3 2 5 4 1 alfa beta 32
Esempio (cont.) Passo 3: 2 5 4 1 alfa beta Passo 4: + torna al passo 3 2 5 4 1 alfa beta Passo 3: 1 5 4 2 alfa beta Passo 4: termina. 33
La procedura MEAS è un algoritmo? Input e un output sono definiti Ogni istruzione è deterministica Ogni istruzione può essere calcolata L algoritmo termina: perché ad ogni iterazione del ciclo (istruzioni 3 e 4) beta indica una posizione sempre più a destra e le posizioni sono finite Dunque la procedura MEAS è un algoritmo 34
Diagramma di flusso Serve per rappresentare in forma grafica i passi di un algoritmo permette di visualizzare i blocchi di istruzioni, le scelte, le iterazioni, Serve ai programmatori, non ai computer 35
Diagramma di flusso Inizio Beta è la posizione successiva Alfa è la prima posizione a sinistra CD in pos. beta costa meno CD in pos. alfa? no sì Scambia CD in pos alfa e beta Sposta beta a destra di una posizione sì C è almeno una posizione dopo beta? no Termina 36
Ordinamento dei CD Consideriamo un nuovo problema: vogliamo ordinare tutti i CD in base al loro prezzo Possiamo: trovare un metodo completamente nuovo oppure estendere il metodo precedente 37
Input e Output Input: una sequenza di CD che riempie completamente una scaffalatura orizzontale. Es: Output: al termine tutti i CD in input sono ordinati a seconda del loro prezzo, da sinistra (il più basso) a destra (il più alto). Es: 5 2 4 1 1 2 4 5 38
Idea! Eseguo MEAS una volta e metto il CD più economico a sinistra Poi eseguo MEAS un altra volta, considerando tutte le posizioni tranne la prima (il più economico è già nella prima posizione) metto il secondo più economico al secondo posto Continuo fino a quando non l ho fatto per tutti! 39
Applico MEAS a ottengo: Esempio Nella prima posizione c è il CD giusto Applico MEAS a ottengo: Nella seconda posizione c è il CD giusto Applico MEAS a ottengo: 5 2 4 1 1 5 4 2 5 4 2 2 5 4 5 4 4 5 Nella 3 e 4 posizione ci sono i CD giusti 40
MEAS Procedura OrdinaCD 1. Sia alfa la prima posizione a sinistra 2. Sia beta la posizione appena a destra di alfa 3. Se il CD in posizione beta costa meno del CD in posizione alfa, allora scambia il CD il posizione alfa con il CD in posizione beta 4. Se c è almeno una posizione a destra di beta, sposta beta a destra di una posizione e torna al passo 3 5. Se ci sono almeno due posizioni a destra di alfa, sposta alfa alla posizione appena a destra di alfa e torna al passo 2 6. Termina 41
Per capire meglio Alfa è la posizione in cui vogliamo mettere il CD più economico rimasto tra quelli da considerare all inizio è la prima posizione, poi si sposta verso destra Ogni volta che cambio il valore di alfa, beta scorre tutti quelli successivi alla ricerca del CD più economico rimasto 42
Prova tu! Inventati qualche input e prova ad eseguire a mano l algoritmo OrdinaCD: esempio: 7 2 9 3 4 Prova a disegnare il diagramma di flusso di OrdinaCD: parti dal diagramma di flusso di MEAS e modificalo 43
OrdinaCD è un algoritmo? Input e un output sono definiti Ogni istruzione è deterministica Ogni istruzione può essere calcolata L algoritmo termina: perché beta indica una posizione sempre più spostata a destra (e le posizioni sono finite!) ogni volta che beta arriva all ultima posizione, alfa viene spostato a destra (e le posizioni sono finite!) Dunque la procedura OrdinaCD è un algoritmo 44
Quinta parte: Riepilogo 45
Gli algoritmi Cos è un algoritmo Quali sono le proprietà di un algoritmo: Input definito Output definito Determinatezza Efficacia Terminazione 46
Come si ragiona in modo algoritmico? Capacità che dovete acquisire: come si può trovare un algoritmo che risolva un (semplice) problema? dato un algoritmo, sono in grado di capire cosa fa? I diagrammi di flusso possono aiutarvi a capire meglio un algoritmo 47