Corso di “Programmazione I”
Corso di Laurea in Ingegneria Informatica
Corso di Laurea in Ingegneria Elettronica per l’Automazione e le Telecomunicazioni
I anno, I e II semestre

 

Prof. Franco FRATTOLILLO

Dipartimento di Ingegneria

 

 

Obiettivi del Corso:

Il corso si rivolge a studenti che non hanno conoscenze di programmazione, ma hanno familiarità con l'uso del computer. Il corso ha obiettivi pedagogici e tecnologici. Un primo obiettivo pedagogico è avviare gli studenti all'utilizzo di un linguaggio di programmazione procedurale, in cui il programmatore è responsabile dell'allocazione della memoria o del controllo di consistenza dei tipi nelle espressioni. Un secondo obiettivo pedagogico è consentire agli studenti di apprendere l'implementazione, mediante il linguaggio C, delle più comuni strutture dati (liste, code, stack, alberi, set) e di alcuni algoritmi fondamentali, quali quelli di ricerca, di ordinamento e gestione delle stringhe di caratteri. Gli obiettivi tecnologici sono invece legati all'acquisizione da parte degli studenti delle capacità di base necessarie per: (1) diventare sviluppatore di programmi in C, utilizzando anche chiamate di sistema; (2) abituarsi all'uso di vari strumenti di supporto alla programmazione (Makefile, debugger, etc ..); (3) sviluppare applicazioni di media complessità mediante il linguaggio C, tenendo conto delle principali peculiarità di tale linguaggio.

 

 

Contenuti del corso:

Nozioni fondamentali di programmazione. Il concetto di algoritmo. Come è fatto un sistema di elaborazione. Nozioni di base sulla sintassi del linguaggio C. Istruzioni di controllo del flusso. Tipi di dati; espressioni; funzioni. Puntatori; array; allocazione dinamica della memoria. Manipolazione di stringhe; il sistema di I/O. Direttive del preprocessore; utilizzo di Makefile; debugging. System call Unix: I/O; gestione file system, gestione dei processi. Strutture dati elementari: liste, code, pile, alberi. Algoritmi di ordinamento e di ricerca.

 

 

Valutazione:

La valutazione consiste in (i) una prova pratica, nella quale lo studente dovrà sviluppare un programma C avendo a disposizione un elaboratore, e (ii) una prova orale, nella quale saranno discussi l'elaborato sviluppato nella prova pratica e gli altri argomenti del programma d'esame.

 

 

Bibliografia consigliata:

 

·        Testi sul linguaggio:

Ø  B. E. Kernighan, Dennis M. Ritchie - Il Linguaggio C: Principi di Programmazione e Manuale di Riferimento - Pearson - Prentice Hall

Ø  K. N. King - Programmazione in C - Apogeo

Ø  E. Koffman, J. R. Hanly - Problem solving e programmazione in C - Apogeo

Ø  P. Deitel, H. Deitel - Il Linguaggio C. Fondamenti e tecniche di programmazione - Pearson

Ø  J. G. Brookshear, S. G. Kochan - Fondamenti di Informatica e Programmazione in C - Pearson

Ø  T. Facchinetti, C. Larizza, A. Rubini - Programmare in C - Maggioli Editore

Ø  S. Berretti, L. Carnevali, E. Vicario - Fondamenti di Programmazione - Società Editrice Esculapio

Ø  Kelley, I. Pohl - C. Didattica e programmazione - Pearson

Ø  A. Mazzone - C e C++. Le chiavi della programmazione - Edizioni LSWR (solo Parte 1)

 

·        Testi di approfondimento:

Ø  G. Cabodi, P. E. Camurati, P. Pasini, D. Patti, D. Vendraminetto - Dal problema al programma - Maggioli Editore

Ø  G. Cabodi, P. E. Camurati, P. Pasini, D. Patti, D. Vendraminetto - Ricorsione e problem solving - Maggioli Editore

Ø  G. Cabodi, P. E. Camurati, P. Pasini, D. Patti, D. Vendraminetto - Puntatori e strutture dati dinamiche - Maggioli Editore

Ø  Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein - Introduzione agli algoritmi e strutture dati - McGraw Hill


 

Slide del Corso (versione del giorno 8/11/2019):

 

Parte 1

Parte 2

Parte 3

Parte 4

Parte 5

Parte 6

Parte 7

Parte 8

Parte 9

Parte 10

Hardware

 

Esercitazioni (versione del giorno 8/5/2019)