Corso di Laurea in Ingegneria Informatica
Complementi di Programmazione
A.A. 2022/2023
Prof. Luca Iocchi (Canale 1 A-L)
Prof. Gabriele Proietti Mattia (Canale 2 M-Z)
Docenti
CANALE 1 (A-L)
Prof. Luca Iocchi (Home page)
CANALE 2 (M-Z)
Prof. Gabriele Proietti Mattia (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 "[CP]" nel soggetto.
Tutor
Classe virtuale
Google classroom, codice
y4joo57
Link: https://classroom.google.com/c/NTg4NDY2NzA3MDU0?cjc=y4joo57
Orario delle lezioni
Orario e aule delle lezioni sono disponibili sul sito del corso
https://corsidilaurea.uniroma1.it/it/corso/2022/31810/programmazione
Periodo delle lezioni: 20/2/2023 - 31/5/2023
Le lezioni inizieranno martedì 20/2/2023 presso il Laboratorio in Via Tiburtina
CANALE 1 A-L
Lunedì 10-12 Lab. Via Tiburtina Aule 15 e 16
Martedì 13-15 Aula 204 (ed. Marco Polo)
Mercoledì 15-17 Aula 204 (ed. Marco Polo)
Giovedì 17-19 Aula 204 (ed. Marco Polo)
CANALE 2 M-Z
Lunedì 12-14 Lab. Via Tiburtina Aule 15 e 16
Martedì 11-13 Aula 204 (ed. Marco Polo)
Mercoledì 9-11 Aula 204 (ed. Marco Polo)
Giovedì 13-15 Aula 204 (ed. Marco Polo)
Orari di Ricevimento
Informazioni disponibili nelle pagine web dei docenti.
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 on-line (vedi sezione Lezioni)
Macchina virtuale per esercitazioni
TODO
Nota: può essere usata qualsiasi versione precedente della VM in cui è installato il compilatore usato nel corso (g++).
Per problemi relativi all'uso della macchina virtuale riempire questo form.
Installazione compilatore C su Windows