1 Parte 2 Fondamenti di programmazione
2 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
3 Proprietà degli algoritmi FINITI NON AMBIGUI GENERALI
4 Soluzione di ax 2 +bx+c=0 1. inizio dell’algoritmo; 2. acquisire dall’esterno i valori dei coefficienti a, b e c; 3. calcolare il valore b 2 -4ac; 4. se , allora non esistono radici reali: eseguire 8; 5. se , allora x 1 =x 2 =-b/2a: eseguire 7; 6. se , allora x 1 =(-b+ )/2a e x 2 =(-b- )/2a; 7. comunicare all’esterno i valori di x 1 ed x 2 ; 8. fine dell’algoritmo.
5 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.
6 Blocchi elementari begin end input output azione C vero falso
7 Esempio su ax 2 +bx+c=0 end begin a, b, c b 2 -4ac VF FV x 1 =-b/2a x 2 =-b/2a x 1 =(-b+ )/2a x 2 =(-b- )/2a radici c.c. x 1, x 2
8 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
9 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.
10 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
11 Soluzione del gioco delle monete 1, 2, 3, 4 : 5, 6, 7, 8 1, 2, 5 : 3, 4, 6 9, 10 : 11, 1 1:27:81:2 9:10 7P 8P 1L 9L0 1L 2L 3L 4L 5P 6P 7P 8P 1P 2P 3P 4P 5L 6L 7L 8L 9L 10L 11L 12L 9P 10P 11P 12P 0 1L 2L 6P5P 3L 4L5L 3P 4P 7L 8L 1P 2P 6L 9L 10L 11P 12L 12P 0 9P 10P 11l 7:83:4 6P2L8Pimp7P3L5P4L4P5L3P7Limp8L2P6L 12:19:10 11P10L12L12P10P11L9P 1P
12 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)
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)
14 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.
15 Componenti hardware principali Dispositivi di input Ad es.: mouse, tastiera Dispositivi di output Ad es.: monitor, stampante Insieme in uno stesso contenitore Processore (CPU) Central Processing Unit Interpreta e esegue le istruzioni Memoria Organizzazione hardware standard Memoria Processore (CPU) Dispositivi di input Dispositivi di output
16 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
17 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
18 Radice Organizzazione della Memoria Ausiliaria FileDirectory File Directory File Directory
19 Programma Insieme di istruzioni che il calcolatore deve eseguire Calcolatore ProgrammaInputOutput
20 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
21 Informazione Esistono due formati per memorizzare l’informazione: ANALOGICO DIGITALE L’informazione analogica è continua La tecnologia digitale spezza e cresce proporzionalmente alla l’informazione in tanti pezzi sorgente di informazione che rappresenta come numeri Es: termometro di mercurio, segnali Es: compact disc elettrici
22 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.
23 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=2x x x x10 0
24 In generale i sistemi numerici posizionali in base b 2 rappresentano ogni numero con m cifre in base b: N=c m-1 …….c 0 Dove i c i denotano elementi di un insieme di b simboli che corrispondono ai primi b numeri naturali 0…..b-1. Vale N=∑c i b i Es: =1x2 3 +1x2 2 +0x2 1 +0x2 0
25 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
26 Storia Moderna PASCAL (1970) Programming in Logic (1971) C (1974) ADA(1980)
27 Storia Contemporanea C++ (1985) Java (1994)
28 Tipi di programmazione Funzionale Logica Procedurale Orientata agli oggetti
29 Traduttori traduttore programma macchina Codice in l. macchina dati macchina Codice in l. macchina risultati
30 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
31 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
32 L’ambiente Java Programma Java Compilatore Java Programma in Byte-Code Dati in input Esecuzione Interprete Programmi precedentemente compilati Output del Programma Java