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

  1. Basi del linguaggio C
    • Variabili, istruzioni, tipi di dato, puntatori, funzioni
  2. Gestione della memoria
    • Array, matrici, allocazione memoria, stringhe, file, record
  3. Ricorsione
  4. Costo dei programmi
  5. Strutture collegate lineari
  6. Tipi di dato astratti
    • Implementazioni funzionali e con side-effect
    • Condivisione di memoria
  7. Strutture dati lineari
      • Lista, Pila, Coda
      • Implementazioni indicizzate e collegate
  8. 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

http://www.mingw.org/