INFORMATICA

[185SM]
a.a. 2025/2026

1° Anno - Secondo Semestre

Frequenza Non obbligatoria

  • 9 CFU
  • 72 ore
  • ITALIANO
  • Sede di Trieste
  • Obbligatoria
  • Convenzionale
  • Scritto e Orale Congiunti
  • SSD INF/01
  • Base
Curricula: DIDATTICO
Syllabus

Gli obiettivi della parte teorica del corso sono di acquisire le conoscenze di base dell'architettura dell'elaboratore e di efficienza computazionale, la capacità di formalizzare un problema in termini algoritmici, definire un algoritmo per la soluzione del problema, di stabilirne la complessità computazionale, di mettere in relazione l'hardware con il software. Inoltre, ci si aspetta che, grazie alle sessioni di esercitazioni/laboratorio/apprendimento cooperativo, lo studente maturi: 1) la capacità di passare da un sistema numerico all'altro 2) la capacità di disegnare un semplice circuito a partire da una tabella di verità, sfruttando l'algebra booleana 3) la capacità di decodificare la circuiteria che costituisce un datapath multiciclo MIPS32 4) la capacità di leggere e comprendere uno pseudocodice 5) la capacità di leggere e comprendere un semplice programma Assembly 6) la capacità di scegliere la struttura dati e l'algoritmo più consono per risolvere problemi nuovi 7) la capacità di stimare la complessità computazionale di un nuovo algoritmo scritto 8) la capacità di esprimersi in modo tecnicamente corretto, con chiarezza e completezza di informazioni. Infine, si vuole che, grazie alle conoscenze acquisite, lo studente sia in grado di apprendere o sviluppare autonomamente nuovi algoritmi, basandosi sulle tecniche apprese a lezione (es. ricorsione, divide et impera), di poterli autonomamente scrivere in pseudocodice e di avere consapevolezza di come un software non efficiente possa impattare su un'architettura più o meno performante. Lo studente, posto di fronte ad un problema diverso da quelli visti a lezione, deve essere in grado di valutare se il problema ha già soluzioni esistenti o se è intrattabile, altrimenti proporre una soluzione nuovo, motivando le sue scelte implementative, considerando sia aspetti di software che di hardware. In riferimento ai Descrittori di Dublino, questi sono l'obiettivo di questo corso: 1. Conoscenza e capacità di comprensione: gli studenti avranno una comprensione sistematica dei concetti fondamentali, delle teorie e dei metodi dell'informatica. 2. Capacità di applicare conoscenza e comprensione. Gli studenti saranno in grado di applicare le loro conoscenze in Informatica per risolvere problemi in una varietà di contesti. 3. Autonomia di giudizio: gli studenti avranno la capacità di raccogliere e interpretare e formulare giudizi su dati rilevanti (soprattutto nel campo della matematica applicata) grazie alle loro conoscenze informatiche. Saranno inoltre in grado di riflettere su questioni sociali, scientifiche o etiche rilevanti, in particolare nel contesto dell'Intelligenza Artificiale 4. Comunicazione: Gli studenti saranno in grado di comunicare informazioni, idee, problemi e soluzioni a un pubblico che è sia specialista in informatica che non specialista. 5. Capacità di apprendimento: Gli studenti svilupperanno quelle capacità di apprendimento in Informatica che sono necessarie per continuare a intraprendere ulteriori studi sia in Matematica pura e applicata, sia in Informatica, con un alto grado di autonomia

Matematica elementare

Il corso è dedicato allo studio dei principi base dell'informatica, in un'ottica ampia, partendo dalle basi hardware di com'è fatto un elaboratore per arrivare a risolvere in modo consapevole problemi di ordinamento e ricerca su diverse strutture dati. Si tratterà in modo trasversale anche il tema della complessità computazionale. Si accennerà infine al machine learning nelle ultime lezioni del corso.

PER IL MODULO 1: Patterson, David A., e John L. Hennessy. Computer Organization and Design: The Hardware/Software Interface (trad. Struttura e progetto dei calcolatori). Quinta edizione italiana condotta sulla sesta edizione americana, a cura di Alberto Borghese, Zanichelli, 2022. PER IL MODULO 2: Cormen, Thomas H., et al. Introduzione agli algoritmi e strutture dati. 4ª ed., Pearson, 2023. Slide del docente rilasciate dopo ogni lezione su Moodle.

Il corso è diviso in due moduli principali: 1. Architettura degli elaboratori 2. Strutture dati e algoritmi **Architettura degli elaboratori: - sistemi numerici, codifica di numeri reali (incluso complemento a 2 e standard IEEE 754), conversioni da uno all'altro - operazioni binarie elementari - circuiti logici semplici (sia combinatori che sequenziali) - algebra booleana, teorema dei mintermini/maxtermini - Architettura di Von Neumann e MIPS32 - Catena programmativa - Basi di assembly - Instruction Set Architecture per MIPS32 - Finite State Machine (FSM) - Datapath (MIPS32) e suo controllo tramite FSM **Strutture dati e algoritmi: - Strutture dati: array, liste concatenate, pile, code, alberi, heap, tabelle hash, grafi. - Complessità computazionale (temporale e spaziale), notazione asintotica O grande, classi di complessità. - Concetto di algoritmo. - Algoritmi di ordinamento: insertion sort, bubble sort, selection sort, merge sort, counting sort, heap sort e quicksort. - Algoritmi su grafi: visita in ampiezza ed in profondità, algoritmi di Bellman-Ford e di Dijkstra. - Introduzione al machine learning e all'intelligenza artificiale

Le strategie didattiche impiegate durante il corso saranno volutamente molto varie, includendo lezioni frontali, sessioni pratiche di esercitazione e laboratorio (basate su simulatore QtSpim e Python), uno o due seminari e altre attività di apprendimento cooperativo (es. jigsaw). Nell'ed. 2024/25 il corso si è sviluppato con circa 70% lezioni frontali, 20% laboratori, 10% tra attività di apprendimento cooperativo e seminari.

Vengono impiegati due strumenti software: - il simulatore per architettura MIPS32 QtSpim (con linguaggio di programmazione Assembly) - Python (usando Colab notebooks) Le nozioni necessarie per utilizzare QtSpim saranno date interamente durante le lezioni. Per l'apprendimento di Python, invece, ci si aspetta che gli studenti abbiano le conoscenze di Python fornite nel corso parallelo di introduzione a Python. Nel corso di Informatica Python viene utilizzato nella seconda parte, dando la possibilità quindi agli studenti di aver già familiarizzato con questo linguaggio di programmazione.

La valutazione dello studente prevede una prova scritta e una orale. Nella prova scritta si chiederà di risolvere esercizi simili a quelli svolti a lezione e nelle esercitazioni/lab. La tipologia di esercizi può variare tra domande a risposta aperta, a risposta multipla e brevi esercizi per dimostrare l'apprendimento delle nozioni base del corso (ad esempio: conversioni tra un sistema numerico e l'altro, decodifica di un'istruzione di ISA per MIPS32, semplici codici Assembly o pseudocodici da interpretare). La durata della prova è di circa due ore. Il punteggio della prova scritta sarà espresso in trentesimi. Il voto dello scritto pesa 40% sul voto finale. L’ammissione alla prova orale è soggetta all'ottenimento di un punteggio maggiore o uguale a 18/30. Uno scritto sufficiente è valido per tutto l'anno accademico. Nella prova orale, invece, la prima domanda è scelta, a discrezione della docente, da una lista di domande fornite dalla docente alla fine del corso (ogni anno diverse in base al programma svolto). Successivamente, verranno poste altre domande che possono riguardare qualunque argomento trattato nel corso. Le domande possono essere di natura puramente teorica oppure di ragionamento su uno scenario applicativo specifico. La valutazione della prova orale comprende diversi aspetti: la capacità di esprimersi in modo chiaro e non ambiguo, la capacità di usare la terminologia tecnica specifica, la capacità di rispondere puntualmente alla domanda, la conoscenza dei contenuti del corso, la capacità di ragionare e rielaborare concetti visti a lezione per nuovi scenari. Il voto dell'orale è espresso anch'esso in trent'esimi e vale 60% del voto finale.