Corso di Laurea in Ingegneria Informatica
Tecniche di Programmazione
A.A. 2018/2019
Proff. Daniele Nardi, Fabio Patrizi (Canale 1 A-H)
Prof. Luca Iocchi (Canale 2 I-Z)
Docenti
CANALE 1 (A-H)
Prof. Daniele Nardi (Home page)
Prof. Fabio Patrizi (Home page)
CANALE 2 (I-Z)
Prof. Luca Iocchi (Home page)
Dipartimento di Ingegneria informatica automatica e gestionale “Antonio Ruberti” Università di Roma “La Sapienza”
Via Ariosto 25, Roma 00185, Italy.
E-mail: {cognome docente}@diag.uniroma1.it
Nei messaggi e-mail, usare il prefisso "[TP]" nel soggetto.
Orario delle lezioni
AVVISO: Le lezioni inizieranno martedì 26/2/2019
Periodo delle lezioni: 25/2/2019 - 31/5/2019
CANALE 1 A-H
Lunedì 10-12 Lab. Via Tiburtina Aule 15 e 16
Mercoledì 10-12 Aula 204 (ed. Marco Polo)
Giovedì 10-12 Aula 204 (ed. Marco Polo)
Venerdì 10-12 Aula 204 (ed. Marco Polo)
CANALE 2 I-Z
Lunedì 12-14 Lab. Via Tiburtina Aule 15 e 16
Martedì 15-17 Aula 204 (ed. Marco Polo)
Mercoledì 16-18 Aula 105 (ed. Marco Polo)
Venerdì 12-14 Aula 204 (ed. Marco Polo)
Orari di Ricevimento
(Validi nel periodo delle lezioni)
Prof. Iocchi - Martedì 11-13 Via Ariosto 25, stanza B114
Prof. Patrizi - Martedì 15 - 17 Via Ariosto 25, stanza B214
Esami
Informazioni sugli esami sono disponibili nella sezione Esami
Descrizione del corso
Il corso "Tecniche di programmazione" fa parte del percorso formativo della Laurea in Ingegneria Informatica e Automatica.
Il corso è da 9 CFU e le lezioni si svolgono nel secondo semestre del I anno
Obiettivi del corso
Il corso ha l'obiettivo di fornire allo studente la capacità di comprendere e progettare programmi che richiedano una conoscenza approfondita del modello di esecuzione dei programmi, in particolare, facciano una gestione esplicita della memoria. A questo scopo il corso fa riferimento ad una caratterizzazione dell'architettura dell'elaboratore basata sul modello di Von Neumann ed utilizza il linguaggio procedurale C/C++ per la programmazione. Attraverso il linguaggio verranno sviluppate le conoscenze per la gestione della memoria (stack, heap), la realizzazione di strutture dati di base e complesse, quali vettori, matrici, liste collegate, pile, code, alberi e grafi, tecniche di programmazione ricorsive, e la programmazione di algoritmi su tali strutture dati. Il corso ha una forte connotazione progettuale e prevede quindi esercitazioni settimanali in laboratorio, in ambiente Linux.
Programma
- Basi del linguaggio C
- Variabili, istruzioni, tipi di dato, puntatori, funzioni
- Gestione della memoria
- Array, matrici, allocazione memoria, stringhe, file, record
- Ricorsione
- Costo dei programmi
- Strutture collegate lineari
- Tipi di dato astratti
- Implementazioni funzionali e con side-effect
- Condivisione di memoria
- Strutture dati lineari
- Lista, Pila, Coda
- Implementazioni indicizzate e collegate
- Strutture dati non-lineari
- Alberi binari
Materiale Didattico
Libro di testo:
- Kim N. King, "Programmazione in C", Apogeo, 2010
Dispense del corso disponibili nel sistema Moodle
https://elearning.uniroma1.it/course/view.php?id=7214
Macchina virtuale per esercitazioni
LXLE-BIAR-1.6.5 (6 GB)
Nota: può essere usata qualsiasi versione precedente della VM in cui è installato il compilatore usato nel corso (g++).
Installazione compilatore C su Windows