FACOLTÁ DI INGEGNERIA CORSO DI LAUREA in Ingegneria Industriale Classe L/9 Insegnamento di Informatica S.S.D. INF/01 – 6 C.F.U. – A.A. 2014-2015 Docente: Prof. Massimo Cefalo E-mail: [email protected] Presentazione del corso L'informatica è una disciplina che si occupa dello studio e delle applicazioni dei computer. Abbraccia sia aspetti teorici che pratici e richiede quindi di pensare sia in termini astratti che concreti. Il lato pratico dell’informatica può essere visto ed apprezzato ovunque. Oggi, praticamente tutti sono utenti di un computer, e molte persone sono anche programmatori di computer. Vista da un livello più alto, l’informatica può essere considerata una disciplina scientifica, orientata in particolare al problem solving. Nata come mezzo per velocizzare i processi manuali di calcolo, oggi l’informatica è la base di potenti mezzi di comunicazione, di raccolta e di elebarozione automatica delle informazioni. L’informatica ha fatto nascere attività e professioni nuove, impensabili fino a pochi anni fa. Queste professioni si occupano di aspetti che vanno dal miglioramento dei processi produttivi, all'entertainment, da nuovi metodi per la gestione aziendale, a tecniche sofisticate di animazione e di generazione di suoni. Dalla cinematografia, alla simulazione multifisica dei sistemi meccanici e biologici. Gli informatici sono professionisti che devono possedere buone abilà nell’ambito della modellazione astratta e della modellazione fisica, spiccate capacità di analisi dei problemi e una forte conoscenza del funzionamento dell’hardware dei calcolatori. Ai progettisti di software è spesso richiesto di avere una buona cultura generale e un’ottima conoscenza della matematica per essere in grado di progettare soluzioni e verificarne la corretteza. Il problem solving richiede infatti precisione, creatività e un attento ragionamento. L'informatica ha anche forti connessioni con altre discipline. Molti problemi nel campo della scienza, dell'ingegneria, della medicina, dell’organizzazione aziendale sono affrontati e risolti efficacemente con l’uso dei calcolatori elettronici, ma trovare una soluzione, oltre alle conoscenze avanzate del dominio di applicazione richiede spesso particolari competenze ed abilità informatiche. L’informatica assume dunque un ruolo molto importante nella formazione accademica di un ingegnere. Indipendentemente dal percorso di specializzazione infatti, le conoscenze dell’informatica di base e di programmazione sono imprescindibili da qualunque applicazione professionale di successo. Il corso di Informatica è organizzato in quattro parti. La prima parte del corso, oltre ad alcune note storiche sulla nascita dei computer e dell’informatica, fornisce informazioni sull’organizzazione hardware di un calcolatore ed introduce gli argomenti necessari per comprendere i meccanismi di base dell’elaborazione artifificiale ed automatica dell’informazione. La seconda parte del corso è relativa al software e presenta i fondamenti della programmazione mediante l’introduzione al linguaggio C, un linguaggio procedurale, multipiattaforma, versatile e di assoluto valore per qualunque applicazione professionale ingegneristica. La terza parte del corso fornisce una preparazione di base sulle principali tecniche di programmazione utilizzate per risolvere alcuni problemi classici di tipo astratto. L’ultima parte del corso introduce infine il sistema operativo Linux, un esempio di sistema operativo libero, open source, molto efficiente e particolarmente apprezzato negli ambienti scientifici e per gli impieghi professionali in genere. Il Regolamento didattico del Corso di Laurea prevede che lo studente sia in grado di prepararsi a sostenere l’esame nell’arco di un periodo di 12 settimane. Propedeuticità Non vi sono esami propedeutici alla preparazione del corso di Informatica. E' tuttavia necessario il possesso delle seguenti conoscenze: una buona cultura generale; capacità logico-analitiche; una buona conoscenza delle nozioni fondamentali della matematica. Sono da riternersi sufficienti allo scopo le conoscenze fornite dai percorsi formativi della scuola secondaria. Ricevimento studenti Consultare il calendario alla pagina seguente del nostro sito verificando gli orari di Videoconferenza di Informatica: http://www.unicusano.it/calendario-lezioni-in-presenza/calendario-area-ingegneristica Orario delle lezioni Consultare il calendario alla pagina seguente del nostro sito verificando gli orari di Modulo di Informatica: http://www.unicusano.it/calendario-lezioni-in-presenza/calendario-area-ingegneristica Date degli appelli Consultare il calendario alla pagina http://www.unicusano.it/date-appelli/appelli-ingegneria per gli appelli presso la sede di Roma, e alla pagina http://www.unicusano.it/date-appelli/appelli-sediesterne per gli appelli presso le sedi esterne. Programma del corso PARTE I - ARCHITETTURA DI UN CALCOLATORE 1 Introduzione 1.1 Cenni storici 1.2 Terminologia 1.3 La rappresentazione dell’informazione in un calcolatore 1.4 Tipi di computer e tendenze del mercato 1.5 Il software Modulo 1 ... ... ... ... 2 La rappresentazione binaria 2.1 Sistemi di numerazione 2.1.1 Il sistema ottale e il sistema esadecimale 2.1.2 Conversioni di base 2.2 Calcoli tra numeri interi 2.2.1 Addizioni e sottrazioni 2.3 Calcoli tra numeri in virgola mobile Modulo 2 ... Modulo 3 Modulo 4 ... Modulo 5 3 La macchina di von Neumann 3.1 Struttura 3.2 La memoria 3.3 Il sottosistema di calcolo e il sottosistema di controllo Modulo 6 ... ... 4 Il linguaggio macchina 4.1 Il formato istruzioni 4.2 Il ciclo vita di una istruzione e il linguaggio macchina 4.3 Esempi di programma in linguaggio assembly Modulo 7 Modulo 8 e 9 Modulo 10 e 11 PARTE II - FONDAMENTI DI PROGRAMMAZIONE IN C 5 Introduzione al C 5.1 Note storiche 5.2 Il primo programma in C 5.3 Compilazione di un programma C Modulo 12 ... ... 6 I dati 6.1 Tipi di dati primitivi, variabili e costanti 6.2 Tipi di dati non primitivi 6.3 I typedef e gli enum 6.4 Conversioni tra tipi Modulo 13 ... Modulo 14 ... 7 Le istruzioni 7.1 Gli operatori 7.1.1 Gli operatori aritmetici, relazionali e logici 7.1.2 L’operatore di assegnamento 7.1.3 Gli operatori di incremento e decremento Modulo 15 ... ... ... 7.1.4 Precedenze tra gli operatori 7.2 Le istruzioni condizionali 7.3 Le istruzioni di controllo dei cicli ... Modulo 16 ... 8 Struttura dei programmi 8.1 Le funzioni 8.2 Alcune funzioni di Input/Output 8.3 Alcune funzioni matematiche 8.4 Le direttive del preprocessore e i file header Modulo 17 ... Modulo 18 ... 9 I puntatori 9.1 Introduzione 9.2 Passaggio di parametri per riferimento 9.3 Allocazione dinamica della memoria 9.4 Alcune funzioni di manipolazione delle stringhe Modulo 19 ... Modulo 20 Modulo 21 PARTE III - ALGORITMI FONDAMENTALI 10 Strutture dati astratte 10.1 Liste 10.2 Pile e code 10.3 Alberi 10.3.1 Alberi binari di ricerca 11 Algoritmi 11.1 Algoritmi per array e liste semplici 11.1.1 Algoritmo di ricerca sequenziale 11.1.2 Algoritmo di ricerca dicotomica 11.1.3 Algoritmo di ordinamento InsertionSort 11.1.4 Algoritmo di ordinamento SelectionSort 11.1.5 Algoritmo di ordinamento BubbleSort 11.1.6 Algoritmo di ordinamento QuickSort 11.1.7 Algoritmo di ordinamento MergeSort 11.2 Algoritmi di visita di un albero binario 11.2.1 Algoritmo di visita in ordine anticipato 11.2.2 Algoritmo di visita in ordine simmetrico 11.2.3 Algoritmo di visita in ordine posticipato Modulo 22 ... Modulo 23 ... Modulo 24 ... Modulo 25 Modulo 26 Modulo 27 Modulo 28 Modulo 29 Modulo 30 Modulo 31 Modulo 32 PARTE IV - FONDAMENTI DI LINUX 12 Introduzione 12.1 Cenni storici 12.2 Il progetto GNU 12.3 Il kernel 12.4 Le distribuzioni Linux 13 Il File System Modulo 33 ... ... ... 13.1 Nomi di file e cartelle 13.2 Permessi e modalità di accesso ai file 13.3 Struttura del file system 14 Command shell 14.1 Tipi di shell 14.2 Comandi per il login e il logout 14.3 Comandi per le directory 14.4 Comandi per i file 14.5 Comandi per la stampa 14.6 Altri comandi Modulo 34 ... ... ... Modulo 35 ... Modulo 36 ... ... Testi di riferimento 1. Dispense del docente. 2. Sulla parte I del corso: “Architettura e organizzazione dei calcolatori elettronici - Fondamenti”, McGraw-Hil - G.Bucci. 3. Sulla parte II del corso: “C - Corso completo di programmazione”, Prentice Hall Inc. - Harvey M. Deitel & Paul J. Deitel, 4. Sulla parte III del corso: “Introduzione agli algoritmi e strutture dati”, McGraw-Hil - Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein Obiettivi formativi Il corso ha lo scopo di far acquisire allo studente una conoscenza generale dei principi di funzionamento di un calcolatore elettonico, dei principi alla base della rappresentazione e dell’elaborazione automatica dell’informazione e i fondamenti della programmazione in C. Il corso ha inoltre lo scopo di far conoscere allo studente lo logica alla base di alcuni algoritmi fondamentali e di introdurre il sistema operativo Linux. Risultati attesi di apprendimento Conoscenza dell’architettura di un calcolattore elettronico, della rappresentazione binaria e dei relativi metodi di calcolo per l’implemtentazione delle operazioni aritmeriche principali sui numeri interi e decimali. Padronanza nell’utilizzo del linguaggio assembly presentato nel corso che dimostri la conoscenza dell’organizzazione logica di un calcolatore. Conoscenza e padronanza del linguaggio di programmazione C per la realizzazione autonoma di programmi di calcolo strutturati ed efficienti, che sfruttano i puntatori e la gestione dinamica della memoria. Capacità di implementare in C gli algoritmi fondamentali presentati nel corso relativi a ricerca, ordinamento, visita, inserimento e cancellazione dati per strutture dati astratte come liste ed alberi. Programma ridotto Gli studenti che a seguito dell’avvenuto riconoscimento di un esame affine, sostenuto in una precedente carriera accademica, devono sostenere l’esame di Informatica in forma ridotta (non da 6 c.f.u.) saranno esaminati sugli argomenti del corso relativi alla programmazione in C e agli algoritmi fondamentali (ovvero sulle parti 2 e 3 del programma: moduli da 12 a 32, estremi compresi). Modalità d’esame e di valutazione L’esame consiste in una prova scritta della durata di 90 minuti, sia quando svolto nella sede di Roma, sia quando svolto in un polo esterno. Non è prevista una prova orale obbligatoria. Tuttavia, gli studenti che hanno sostenuto la prova scritta presso la sede di Roma, conseguendo un voto almeno pari a 18/30, possono chiedere in modo del tutto facoltativo di sostenere una prova supplementare orale allo scopo di migliorare il punteggio finale. Tale prova consisterà in una interrogazione libera, potenzialmente su tutti gli argomenti coperti dal corso, compreso lo svolgimento di piccoli esercizi di programmazione. L’esito di tale prova facoltativa potrà contribuire a far crescere il voto finale così come a farlo decrescere, nel caso di una prova scarsa. Durante la prova scritta NON è consentito utilizzare dispense, appunti, testi o formulari in formato cartaceo né digitale ad eccezione di un manuale di programmazione C, consultabile esclusivamente per le parti relative alla definizione dei costrutti linguistici. L’uso della calcolatrice è consentito solo nel caso di calcolatrici non programmabili. Prof. Massimo Cefalo Massimo Cefalo – Curriculum vitae Adjunct professor in Computer Science at University Niccolò Cusano of Rome Via Don Carlo Gnocchi 3, 00166 Rome, Italy [email protected] Researcher at DIAG - Dipartimento di Ingegneria Informatica, Automatica e Gestionale Sapienza University of Rome Via Ariosto 25, 00185 Rome, Italy BIOGRAPHICAL NOTES Massimo Cefalo attained a Laurea degree in Computer Science Engineering at the University of Rome “La Sapienza” in May 2002. In April 2006, he attained a Ph.D. in Systems Engineering at DIS (Dipartimento di Informatica e Sistemistica) in the same University. His main research theme has been the motion control of underactuated mechanical systems. During the Ph.D. he also attended a three-year high training international school (NewMinE) on the eLearning topic. In 2008 Massimo won a research fellowship at IRI (Istitut de Robotica Industrial - Barcelona, Spain) and worked on the topic of modeling and control of Tensegrity systems (a special class of underactuated mechanical structures). In 2010 Massimo won a new research fellowship at SBAI (Dipartimento di Scienze di Base e Applicate per l'Ingegneria – Sapienza University of Rome). The topic of this collaboration concerned the development of new mesh generation algorithms for the numerical approximation of second order transmission problems across highly conductive layers of fractal type. In October 2011, Massimo won a research fellowship at DIAG at the same University, where he is currently working on the field of robot motion and path planning for redundant robot systems. In January 2015 Massimo won the position of adjunct professor in the University Niccolò Cusano of Rome for the course of Computer Science in the degree courses of civil engineering and industrial engineering. PUBLISHED PAPERS: INTERNATIONAL JOURNALS • “Cyclic task-constrained motion plannig”, M.Cefalo, G.Oriolo, submitted to IEEE Trans. on Robotics (2014). •“An optimal mesh generation algorithm for domains with Koch type boundaries”, M.Cefalo, M.R.Lancia, accepted for publication on Mathematics and Computers in Simulation; http://dx.doi.org/doi:10.1016/j.matcom.2014.04.009; April 2014 • “Heat flow problems across fractal mixtures: regularity results of the solutions and numerical approximation”, M.Cefalo, M.R.Lancia, H.Lyang, Differential and Integral Equations, 26 (2013) 1027-1054 • “Numerical approximation of transmission problems across Koch-type highly conductive layers”, M.Cefalo, G.Dell’Acqua, M.R.Lancia, Applied Mathematics and Computation 218 (2012) 5453–5473 • “Real-Time self collision detection algorithms for tensegrity systems”, M.Cefalo, J.M.Mirats Tur, International Journal of Solids and Structures 47 (2010) 1711–1722 • “A comprehensive dynamic model for class-1 tensegrity systems based on quaternions” , M.Cefalo, J.M.Mirats Tur, International Journal of Solids and Structures 48 (2011) 785–802 INTERNATIONAL CONFERENCES • “Task-constrained motion planning for underactuated robots”, M.Cefalo, G.Oriolo – accepted for publication to 2015 IEEE Int. Conf. on Robotics and Automation (ICRA 2015), Seattle, USA • “KUKA LWR4 dynamic modeling in V-REP and remote control via Matlab/Simulink”, Selected contribution at workshop session at IROS 2014, Chicago, USA • “Boundary design for fast diffusion across (pre)fractal boundaries”, M.Cefalo, M.R.Lancia – 8th European Conference on Elliptic and Parabolic Problems, Gaeta – Italy, May 2012 • “Dynamically Feasible Task-Constrained Motion Planning with Moving Obstacles”, M.Cefalo, G.Oriolo – 2014 IEEE Int. Conf. on Robotics and Automation (ICRA 2014), Hong Kong, China, June 2014 • “Task Constrained Motion Planning with Moving Obstacles”, M.Cefalo, G.Oriolo, M.Vendittelli – 2013 IEEE/RSJ Int. Conf. on Intelligent Robots and Systems (IROS 2013), Tokyo, Japan, pp. 5758-5763, 2013 • “Planning Safe Cyclic Motions under Repetitive Task Constraints”, M.Cefalo, G.Oriolo, M.Vendittelli – 2013 IEEE Int. Conf. on Robotics and Automation (ICRA 2013), Karlsruhe, Germany, pp. 3807-3812, 2013 • “Numerical approximation of evolution problems in (pre)fractal domains”, M.Cefalo, M.R.Lancia, H. Liang – 7th European Conference on Elliptic and Parabolic Problems, Gaeta – Italy, May 2012 • “An optimal mesh generation for domains with Koch-type boundaries”, M.Cefalo, M.R.Lancia, Mascot11 – 11th Meeting on Applied Scientific Computing and Tools, Rome – Italy, October 2011 • “Numerical approximation of some conditioned heat flow problems across fractal layers”, M.Cefalo, G.Dell’Acqua, M.R.Lancia; SIMAI 2010 Biannual Congress, Cagliari – Italy, June 2010 • “Energy-based control of the Butterfly robot”, M.Cefalo, L.Lanari, G.Oriolo; Syroco 2006, 8th International IFAC Symposium on Robot Control, Bologna - Italy, September 2006 •“The REAL Lab: Remote Experiments for Active Learning”, M.Cefalo, L.Lanari, G.Oriolo, M.Vendittelli; XLI AICA Annual Congress, Trento - Italy, September 2003