Corso di Laurea in Ingegneria Informatica
Complementi di Programmazione
A.A. 2023/2024
Prof. Daniele Nardi (Canale 1 A-L)
Prof. Luca Iocchi (Canale 2 M-Z)
Docenti
CANALE 1 (A-L)
Prof. Daniele Nardi (Home Page)
CANALE 2 (M-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 "[CP]" nel soggetto.
Tutor
Classe virtuale
Google classroom, codice
sojy5rd
Link: https://classroom.google.com/c/NjYzOTgzNDg3NDY0?cjc=sojy5rd
Orario delle lezioni
Orario e aule delle lezioni sono disponibili sul sito del corso
https://corsidilaurea.uniroma1.it/it/corso/2023/31810/programmazione
Periodo delle lezioni: 26/2/2024 - 31/5/2024
Le lezioni inizieranno lunedì 26/2/2024 presso il Laboratorio in Via Tiburtina
CANALE 1 A-L
Lunedì 12-14 Lab. Via Tiburtina Aule 15 e 16
Martedì 13-15 Aula 204 (ed. Marco Polo)
Mercoledì 17-19 Aula 204 (ed. Marco Polo)
Giovedì 16-18 Aula 204 (ed. Marco Polo)
CANALE 2 M-Z
Lunedì 10-12 Lab. Via Tiburtina Aule 15 e 16
Martedì 8-10 Aula 204 (ed. Marco Polo)
Mercoledì 8-10 Aula 204 (ed. Marco Polo)
Giovedì 12-14 Aula 204 (ed. Marco Polo)
Orari di Ricevimento
Informazioni disponibili nelle pagine web dei docenti (sezione Didattica/Teaching).
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 sarà resa disponibile tramite classroom.
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