Introduzione (algoritmi e pseudocodice) Lezione 1 Jan 29, 2008 1 Discussion Time Esempio: Somma di due numeri Immagina di descrivere come addizionare a qualcuno che non ne ha mai sentito parlare. Come lo spiegheresti? 2 Come possiamo descrivere un algoritmo in un modo sufficientemente preciso da non lasciare ambiguita’? Il linguaggio di un robot Semplici istruzioni di movimento Es. “Muoviti in avanti per un sec.” Due tipi di istruzioni composite (di controllo) Condizionali If condition Then { List of instructions } Loop Do 5 times { List of instructions } Else { List of instructions } 3 Il linguaggio del robot illustra gli elementi essenziali di tutti i linguaggi per computer BASIC Torre di Babele dei computer C++ Java Python Caratteristiche dei languaggi umani: Caratteristiche dei linguaggi dei computer: variabili, semplici istruzioni aritmetiche, sostantivi/verbi/aggettivi/etc. Istruzioni condizionali/loop Per un computer, esistono solo numeri Justin Bieber song Sequenza di Numeri che rappresentano ampiezza, frequenza, etc. ad ogni istante (es., formato mp3) Image Sequenza di Numeri che rappresentano intensita’ dei colori per ogni pixel. 4 Compito base di un computer 40.99 62.99 52.99 … 22.99 Data: una sequenza di numeri in memoria (es., musica mp3) Scopo: Elabora questi numeri per ottenere una specifica sequenza di numeri come output (es., segnali elettrici che comandano le cuffie e riproducono la musica) Un primo semplice problema Un robot si prepara ad un’uscita galante… Come identificare il profumo piu’ economico? (Assumiamo possa leggere i prezzi) 5 Soluzione Prendi la prima bottiglia, Cammina lungo lo scaffale Confronta il prezzo sulla bottiglia dello scaffale con quello in mano Se e’ minore scambia la bottiglia tenuta in mano con quella sullo scaffale Alla fine la bottiglia di costo minimo e’ nelle mani del robot Problema simile in altro contesto Robot ha n prezzi in memoria Vuole trovare il prezzo minimo 6 Memoria: visione semplificta Una lavagnetta che puo’ essere cancellata e riscritta quante volte si vuole Una variabile: un pezzo di memoria con un nome; contiene/memorizza un “valore” i= nome 22.99 valore Esempi i ←5 Assegna ad i il valore 5 j ←i Assegna a j qualsiasi valore sia assegnato ad i. Lascia il valore di i invariato i ←j+1 Assegna i al valore di j + 1. Lascia il valore di j invariato i ←i+1 Assegna ad i il valore ottenuto sommando 1 al valore precedentemente assegnato ad i stesso. 7 Array A e’ un array di n valori A[ i ] e’ l’ i-esimo valore A= 40.99 62.99 52.99 … 22.99 Esempio: A[3] = 52.99 Soluzione Prendi la prima bottiglia, controlla il prezzo Vai lungo lo scaffale. Per ogni bottiglia, esegui: Se il prezzo sulla bottiglia e’ inferiore al prezzo di quella in mano, scambia le bottiglie. 8 Procedura trovamin! n elementi, nell’array A Variabili di supporto: i, best best ← 1! Do for i = 2 to n ! ! {! ! ! if ( A[i] < A[best] ) then! !! best ← i ! ! }! Un’alternativa per lo stesso task best ← 1;! i ← 1! Do while (i < n)! {! ! i ← i + 1;! ! if ( A[i] < A[best] ) then! ! ! best ← i ! }! 9 Molti passi di elaborazione in poche righe di codice Nuovo problema per robot: ordinamento Riposiziona le bottiglie in modo tale che i prezzi crescano da sinistra a destra. 10 Devo ordinare n bottiglie. Mmmm?!? Aha! trovo quella col prezzo minimo e la metto nella posizione piu’ a sinistra. Quindi mi rimane da ordinare solo le n-1 bottiglie alla sua destra. Soluzione Nota: sappiamo gia’ fare questo! Do for i=1 to n-1 { Trova la bottiglia piu’ economica tra quelle numerate da i a n Scambia tale bottiglia e la bottiglia i -esima. } “selection sort” 11