Informatica B (Docente Vittorio Zaccaria) Informatica B - Codice Corso: 081369 - A.A. 2011/2012 INGEGNERIA MECCANICA (BV) - INGEGNERIA IV (1 liv.) - Scaglione S - Z INGEGNERIA ENERGETICA (BV) - INGEGNERIA IV (1 liv.) - Scaglione S - Z
Contatti E-mail: zaccaria@elet.polimi.it Ufficio: Dip. di Elettronica e Informazione (DEI) Tel: 3642 (dall esterno: +39 02 2399 3642) Ricevimento: Martedì, 14.15 16.15. E comunque preferibile prendere appuntamento via mail.
Contatti Piazza Piola Dipartimento di Elettronica e Informazione Sede Centrale Politecnico di Milano (c) Google Maps
Orario Lezione ed esercitazioni MERCOLEDI 08.15-11.15, aula CT33 GIOVEDI 08.15-10.15, aula L06 Laboratorio LUNEDI 15.15-19.15 totale 21 ore 1^ laboratorio LUNEDI 3 Ottobre - aula LM1 (4 ore)
Organizzazione del corso Argomenti Fondamenti di programmazione e introduzione ad alcune tecniche di programmazione avanzata Linguaggio C - Prima parte del corso Linguaggio Matlab - Seconda parte del corso Nozioni base sull architettura dei calcolatori, sul sistema operativo e sulle reti di calcolatori
Modalità di verifica 2 prove in itinere scritte Ciascuna prova copre circa una metà del programma Massimo 17 punti per prova Condizioni per passare l esame: 18 punti totali almeno 8 in ciascuna prova 1 appello regolare per sessione di esame Scritto su tutto il programma e orale obbligatorio Soglia: 18 punti Laboratorio Non è prevista un prova di laboratorio ma la partecipazione attiva sarà elemento di valutazione
Accesso al materiale del corso http://home.dei.polimi.it/zaccaria Seguire il link Informatica-B Troverete: Materiale didattico usato a lezione, esercitazione e laboratorio Temi d esame (quando disponibili) Calendario laboratorio Avvisi
Bibliografia (I parte) I lucidi sono SOLO un supporto didattico Bibliografia Dino Mandrioli, Stefano Ceri, Licia Sbattella, Paolo Cremonesi, Gianpaolo Cugola, "Informatica. arte e mestiere", Terza Edizione, McGraw-Hill Libri Italia, 2008. A. Kelley e I. Pohl, C: didattica e programmazione, Addison/Wesley, 1998. H. Schildt, C - Guida completa, McGraw-Hill Libri Italia, 1995. H. M. Deitel e P. J. Deitel, C corso completo di programmazione, Apogeo, 2000. P. Tosoratti, Introduzione all informatica, seconda edizione, Casa Editrice Ambrosiana, 1998. altri testi di introduzione alla programmazione e al C possono andare bene
Introduzione - aspetti generali dell informatica Vittorio Zaccaria, Daniele Loiacono Informatica B - Codice Corso: 081369 - A.A. 2011/2012 INGEGNERIA MECCANICA (BV) - INGEGNERIA IV (1 liv.) - Scaglione S - Z INGEGNERIA ENERGETICA (BV) - INGEGNERIA IV (1 liv.) - Scaglione S - Z
Cos è l Informatica? E una scienza, ovvero una conoscenza sistematica di tecniche/metodi per: Rappresentare dell informazione Elaborare l informazione L informazione e costituita da una collezione di dati (osservazioni, fatti, entità fisiche o concettuali)
Cosa è un calcolatore Nell epoca moderna, è uno strumento elettronico che elabora informazione. Informazione in ingresso Calcolatore Informazione in uscita Il calcolatore esegue un algoritmo ed utilizza elementi di memoria per elaborare l informazione
Cosa è un calcolatore Uscita informazione Calcolatore Ingresso informazione
Cos è un algoritmo? Es. IKEA Una sequenza finita di operazioni elementari tali che: siano comprensibili ad uno specifico esecutore possano essere eseguite senza ambiguità permettano di risolvere uno specifico problema
Esempio: gestione biblioteca Scaffali Posizione Autore: Mark Twain Titolo: The advent... Scaffale: 31 Posizione: 4 Schedario
Algoritmo di prelevamento di un libro 1. Cerca la scheda del libro richiesto nello schedario 2. Leggi scaffale (s) e posizione (p) dalla scheda 3. Vai allo scaffale s 4. Preleva libro dalla posizione p La funzione Cerca è un sotto-algoritmo
Sotto-algoritmo Cerca 1. Leggi la prima scheda dallo schedario 2. Se titolo e autore/i corrispondono a quelli cercati allora concludi la ricerca con esito positivo, altrimenti passa la scheda successiva 3. Se le schede sono esaurite allora concludi la ricerca con esito negativo, altrimenti ricomincia dal punto 2 L algoritmo può essere ulteriormente migliorato, rendendo la ricerca più furba!
Sotto-algoritmo Cerca migliorato Intero schedario (15 elementi) passo 1 passo 2 passo 3 passo 4 Ricerca binaria
Dal problema alla soluzione automatica - Correttezza - Efficienza Definizione problema Specifica (semi-formale o formale) dell algoritmo Scrittura dell algoritmo in un linguaggio artificiale comprensibile dal calcolatore Passo più difficile - Concentrarsi sugli aspetti fondamentali - Raffinamenti successivi - Esperienza
Come si specifica un algoritmo? Un opzione è chiamata pseudo-codice: se A > 0 allora A = A + 1 altrimenti A = 0 Un altra opzione è quella dei diagrammi di flusso (schemi a blocchi) inizio fine assegnamento test scrivi leggi
Esempio di pseudo-codice Calcolo del massimo comune divisore Leggi N ed M MIN = il minimo tra N ed M X = 1 MCD = 1 Finchè X < MIN X = X + 1 se X divide sia N che M, allora MCD = X Stampa MCD
Esempio di diagramma a blocchi inizio leggi N ed M MIN = min(n,m) X=1 MCD=1 Stampa MCD no X<MIN? X=X+1 si X divide M ed N? no fine si MCD=X
Scrittura algoritmo interpretabile dal calcolatore Il calcolatore (in particolare la Central Processing Unit - CPU) può eseguire solo operazioni semplici. CPU leggi istruzione ed eventualmente operandi Scrivi risultato in memoria Memoria 0: 10100101 1: 01101111 2: 11100100 3: 00000101...
Scrittura algoritmo interpretabile dal calcolatore Le operazioni semplici sono codificate in memoria Memoria 0: 10100101 1: 01101111 2: 11100100 Corrisponde a load add branch 3: 00000101... Programma in linguaggio macchina... Programma in linguaggio assembly
Linguaggi di alto livello E impensabile scrivere programmi di media complessita in linguaggio macchina. Linguaggio di alto livello (C, C++, Java, matlab) Assembly Conversione automatica (compilatore/interprete) Conversione automatica (assemblatore) Linguaggio macchina
I linguaggi artificiali Caratterizzati da sintassi e semantica La sintassi definisce come si scrive il programma (forma e struttura) <variabile> = <espressione>; istruzione di alto livello La semantica definisce le istruzioni macchina associate agli elementi sintattici X = 3+1; load 3 in reg1 load 1 in reg 2 add reg1, reg2 in reg3 store reg3, @X
Sintassi e semantica Un programma sintatticamente corretto non e necessariamente semanticamente corretto: A = 0; X = 3; C = X/A; La traduzione, quando viene eseguita dal calcolatore, genera un errore (chiamato eccezione)! La correttezza semantica e legata anche alla specifica del problema che volete risolvere.
Compilatori ed interpreti Compilatore: traduce un programma di alto livello (chiamato sorgente) di alto livello in codice macchina. Interprete: programma che legge una istruzione di alto livello e determina, di volta in volta, quale istruzioni macchina eseguire per realizzarne il significato. Sono due modalita alternative per scrivere ed eseguire programmi su un calcolatore. Noi ci focalizzeremo sulla prima alternativa, ed in particolare sul linguaggio di alto livello C.
Catena di programmazione C - scrittura del programma Scrittura del programma in uno o piu file di testo con estensione.c Tali file sorgenti sono memorizzati all interno del calcolatore.
Catena di programmazione C - traduzione del programma Il compilatore e un programma che deve essere invocato (a seconda della piattaforma) per tradurre ciascun file sorgente in linguaggio macchina (chiamato file oggetto). int f(int a) { printf( Hi! ); } Compilatore C 0: 10100101 1: 01101111 2: 11100100 3: 00000101... file.c file.o Si riconoscono i costrutti, le parole chiave e i simboli del linguaggio. Si generano eventuali errori.
Catena di programmazione- Fase di link (o collegamento) int f(int a) { printf( Hi! ); } Compilatore C 0: 10100101 1: 01101111 2:???????? 3: 01101111 4: 00000101... salto a dove? file.c file.o 0: 10100101 1: 01101111 2: 11100100 3: 00000101... file.o contenente il codice della printf (libreria di I/O) Linker 0: 10100101 1: 01101111 2: 11100100 3: 00000101... File eseguibile completo
Catena di programmazione C - Caricamento Caricamento ed esecuzione avvengono per richiesta dell utente. Il caricatore (loader) individua delle zone di memoria libere per: Caricare l eseguibile Allocare e inizializzare la memoria dati del programma (variabili globali inizializzate e non, stack, heap). Eventuali messaggi rivolti all utente possono segnalare che non c'è abbastanza spazio in memoria
Catena di programmazione C - Esecuzione Al termine del caricamento, la CPU inizia ad eseguire la prima istruzione del programma. Ovviamente per eseguire il programma occorre fornire in ingresso i dati richiesti e in uscita riceveremo i risultati (su video o file o stampante o rete) Durante l esecuzione possono verificarsi degli errori (detti errori di run-time ), quali: calcoli con risultati scorretti (per esempio un overflow) calcoli impossibili (divisioni per zero, logaritmo di un numero negativo, radice quadrata di un numero negativo,.) errori nella concezione dell algoritmo (l algoritmo non risolve il problema dato)