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