Parte 2 Laboratorio di Informatica Dott.ssa Elisa Tiezzi Dott.ssa Elisa Mori Laboratorio di Informatica 1 Definizione intuitiva di algoritmo • Elenco finito di istruzioni che specificano una serie di operazioni, eseguendo le quali e’ possibile risolvere ogni istanza di un problema di un dato tipo Laboratorio di Informatica 2 Proprietà degli algoritmi • FINITI • NON AMBIGUI • GENERALI Laboratorio di Informatica 3 Soluzione di ax2+bx+c=0 1. inizio dell’algoritmo; 2. acquisire dall’esterno i valori dei coefficienti a, b e c; 3. calcolare il valore b2-4ac; 4. se , allora non esistono radici reali: eseguire 8; 5. se , allora x1=x2=-b/2a: eseguire 7; 6. se , allora x1=(-b+)/2a e x2=(-b-)/2a; 7. comunicare all’esterno i valori di x1 ed x2; 8. fine dell’algoritmo. Laboratorio di Informatica 4 Descrizione degli algoritmi Diagramma a blocchi (flow chart): rappresentazione grafica di un algoritmo che indica il flusso delle trasformazioni descritte dall’algoritmo che devono essere eseguite a partire dai dati iniziali per ottenere i risultati finali. Laboratorio di Informatica 5 Blocchi elementari input azione begin falso end C vero output Laboratorio di Informatica 6 Esempio su ax2+bx+c=0 begin a, b, c b2-4ac V F x1=-b/2a V F x1=(-b+)/2a x2=(-b-)/2a x2=-b/2a x1, x2 radici c.c. end Laboratorio di Informatica 7 Il gioco dei quindici Quindici oggetti, ad esempio fiammiferi, sono su una tavola. Il primo giocatore ne raccoglie 1, 2 o 3. Il secondo giocatore ne raccoglie a sua volta 1, 2 o 3. Quindi è ancora il primo giocatore a raccogliere 1, 2 o 3 fiammiferi. I giocatori alternano le loro mosse finchè sul tavolo non esistono più fiammiferi. Il giocatore che è costretto a raccogliere l’ultimo fiammifero è il perdente. Descrivere una strategia vincente per il primo giocatore Laboratorio di Informatica 8 Problema delle dodici monete Tra 12 monete di identico aspetto potrebbe nascondersene una falsa e pertanto di peso diverso. Disponendo di una bilancia a 2 piatti per confrontare gruppi di monete, si vuole individuare la moneta falsa e stabilire se essa pesi più o meno delle altre, mediante non più di 3 pesate. Laboratorio di Informatica 9 Soluzione del gioco dei quindici Siano A il primo giocatore e B il secondo 1. Prima mossa: A raccoglie 2 fiammiferi 2. Mosse successive: se B raccoglie k fiammiferi (k<=3), allora A raccoglie 4-k fiammiferi Laboratorio di Informatica 10 Soluzione del gioco delle monete 1, 2, 3, 4 : 5, 6, 7, 8 1L 2L 3L 4L 5P 6P 7P 8P 9L 10L 11L 12L 9P 10P 11P 12P 0 1, 2, 5 : 3, 4, 6 1L 2L 6P 1:2 1L 6P 2L 5P 3L 4L 7P 8P 7:8 1P 2P 3P 4P 5L 6L 7L 8L 1, 2, 5 : 3, 4, 6 5L 3P 4P 7L 8L 3:4 7:8 3:4 8P imp 7P 3L 5P 4L 9L 10L 11P 9:10 9L 9, 10 : 11, 1 4P 5L 3P 7L 12L 12P 0 12:1 1:2 2P 6L 1P 9P 10P 11l 9:10 11P 10L 12L 0 12P 10P 11L Laboratorio di Informatica imp 8L 1P 2P 6L 9P 11 Breve storia dei calcolatori • Primi strumenti di calcolo meccanici – Abaco • 1600 – Pascal (somma e sottrazione) – Leibniz (moltiplicazione e divisione) • 1800 – Babbage (quadrato e stampa) – Babbage (macchina analitica) • Ada Augusta Lovelace (prima programmatrice) – Schede perforate utilizzate nel 1890 (inizio di IBM) Laboratorio di Informatica 12 • 1944 – Mark I (primo calcolatore elettromeccanico) • 1946 – ENIAC • 1949 – EDSAC (macchina di tipo Von Neumann) • Anni successivi – Stessa architettura ma tecnologia più avanzata • 1960 – Internet (fine anni sessanta per esigenze militari, si chiamava Arpanet) • 1989 – www (word wide web: enorme enciclopedia) Laboratorio di Informatica 13 Hardware Pezzi fisici tangibili che supportano l’elaborazione (chip di silicio, fili elettrici, tastiera, dischi, stampanti….) Software I componenti hardware sono inutili se non ricevono precise istruzioni. Un programma è una serie di istruzioni che l’hardware esegue in sequenza. Laboratorio di Informatica 14 Componenti hardware principali Organizzazione hardware standard • Dispositivi di input – Ad es.: mouse, tastiera • Dispositivi di output – Ad es.: monitor, stampante • Insieme in uno stesso contenitore Memoria – Processore (CPU) Dispositivi di input Processore (CPU) • Central Processing Unit • Interpreta e esegue le istruzioni Dispositivi di output – Memoria Laboratorio di Informatica 15 Due Tipi di Memoria • Principale – area di lavoro – mantiene temporaneamente programmi e dati (mentre il programma è in esecuzione) • Ausiliaria – permanente – salva programmi e risultati – Esempi: floppy & hard disk, CD, nastri Laboratorio di Informatica 16 Organizzazione della Memoria Principale • Bit = una cifra binaria – valori: 0 o 1 • Byte = 8 bit • La memoria principale è una lista di locazioni numerate ciascuna di un byte • Il numero di byte utilizzato per memorizzare un dato varia con il tipo di dato Indirizzo Dato 3021 1111 0000 3022 1100 1100 3023 1010 1010 3024 1100 1110 3025 0011 0001 3026 1110 0001 3027 0110 0011 3028 1010 0010 3029 … Laboratorio di Informatica Dato 1: 2 byte Dato 2: 1 byte Dato 3: 3 byte Dato 4: 2 byte Etc. 17 Organizzazione della Memoria Ausiliaria Radice File File Directory Directory Directory File Directory File Directory File Directory File Laboratorio di Informatica 18 Programma • Insieme di istruzioni che il calcolatore deve eseguire Programma Input Calcolatore Laboratorio di Informatica Output 19 Tipi di Programmi • Sistema Operativo – Programma supervisore • DOS, Windows, MacOS, UNIX, Linux • Applicazioni esistenti – word-processor/editor – web browser – compilatori o assembler • Applicazioni create dall’utente Laboratorio di Informatica 20 Informazione Esistono due formati per memorizzare l’informazione: ANALOGICO DIGITALE L’informazione analogica è continua e cresce proporzionalmente alla sorgente di informazione Es: termometro di mercurio, segnali elettrici Laboratorio di Informatica La tecnologia digitale spezza l’informazione in tanti pezzi che rappresenta come numeri Es: compact disc 21 I computer moderni sono digitali: Ogni tipo di informazione è spezzato in blocchi. Ogni blocco è rappresentato da un numero e l’informazione è memorizzata sotto forma di sequenza di numeri. Il computer digitale memorizza l’informazione sotto forma di numeri binari (base 2). La singola cifra binaria si chiama bit (binary digit). La base del sistema indica quante cifre si hanno a disposizione e il valore posizionale di ogni cifra in un numero. Laboratorio di Informatica 22 Sistemi posizionali Il sistema di numerazione decimale è basato sull’alfabeto decimale {0,1,2,3,4,5,6,7,8,9} ed ogni numero è rappresentato come sequenza di simboli di tale alfabeto. Ad ogni simbolo è associato un peso a seconda della posizione. Es: 2863=2 x 103 + 8 x 102 + 6 x 101 + 3 x 100 Laboratorio di Informatica 23 In generale i sistemi numerici posizionali in base b2 rappresentano ogni numero con m cifre in base b: N=cm-1…….c0 Dove i ci denotano elementi di un insieme di b simboli che corrispondono ai primi b numeri naturali 0…..b-1. Vale N=∑cibi Es:11002=1 x 23+1 x 22+0 x 21+0 x 20 Laboratorio di Informatica 24 Come comunicare • Linguaggio macchina: – sequenze di 0 ed 1 – rigoroso – essenziale • Linguaggio assembler: – simbolico – semplice traduzione aggiuntiva • Linguaggio naturale: – linguaggio preferito dall’essere umano – ambiguo, ridondante, non preciso • Linguaggio di programmazione ad alto livello Laboratorio di Informatica 25 Storia Moderna • PASCAL (1970) • Programming in Logic (1971) • C (1974) • ADA(1980) Laboratorio di Informatica 26 Storia Contemporanea • C++ (1985) • Java (1994) Laboratorio di Informatica 27 Tipi di programmazione • Funzionale • Logica • Procedurale • Orientata agli oggetti Laboratorio di Informatica 28 Traduttori macchina traduttore programma Codice in l. macchina macchina dati Codice in l. macchina Laboratorio di Informatica risultati 29 Compilatori ed interpreti • Compilatore – programma che traduce un programma in linguaggio ad alto livello in un programma in linguaggio più semplice che il calcolatore può eseguire (più o meno) direttamente. • Interprete – programma che traduce ed esegue una dopo l’altra le istruzioni che compongono il programma sorgente Laboratorio di Informatica 30 L’approccio di Java • Sia compilato che interpretato • Codice intermedio: “Byte Code” – codice a basso livello portabile – simile al codice assembler ma indipendente dall’hardware – invisibile ai programmatori Java • L’interprete traduce dal byte code in un programma nel linguaggio macchina della macchina specifica Laboratorio di Informatica 31 L’ambiente Java Programma Java Programmi precedentemente compilati Dati in input Compilatore Java Programma in Byte-Code Interprete Esecuzione Output deldiProgramma Laboratorio Informatica Java 32