Il concetto di algoritmo e di calcolatore
Problemi e soluzioni. Proprietà di un algoritmo. Algoritmi, computazioni e funzioni calcolate. Dal problema all'algoritmo: la risoluzione algoritmica dei problemi, gli schemi a blocchi.
La rappresentazione binaria delle informazioni
Informazione e rappresentazione. Rappresentazione analogica e digitale. Codici binari. Notazioni posizionali: notazione posizionale con base, conversioni, notazione binaria, ottale ed esadecimale. Codifica dei numeri naturali. Codifica dei numeri interi relativi: in valore assoluto e segno, in complemento. Codifica dei numeri razionali: in virgola fissa, in virgola mobile, il formato IEEE754. Esercizi sulla codifica dei numeri. Codifica di valori logici e caratteri. Algebra booleana. Codifica dei testi. Codifica di suoni, immagini e sequenze video. Codici rivelatori e correttori. Compressione: compressione senza perdita, compressione con perdita.
L'architettura del calcolatore
Hardware, software e firmware. Organizzazione di un sistema di elaborazione. Il modello di Von Neumann. La memoria centrale: modalità di accesso, prestazioni, memoria a sola lettura. L'unità centrale: i componenti, il ciclo macchina, prestazioni. La gestione delle periferiche: l'interfaccia di ingresso-uscita, indirizzamento, sincronizzazione. Dispositivi di ingresso uscita. Memoria di massa: dischi ottici, dischi magnetici, memoria flash. Soluzioni organizzative avanzate: gerarchia di memoria, memoria cache, bus multipli (cenni).
Il linguaggio del calcolatore
Il linguaggio macchina. Il linguaggio assemblatore. Esempi di sequenze di istruzioni in linguaggio assemblatore MIPS. L'esecuzione delle istruzioni.
Il sistema operativo
Le macchine virtuali. Le funzioni di un sistema operativo. Organizzazione di un sistema operativo. Il gestore dei processi: il concetto di processo e di stato, la gestione dell'interazione tra processi. Il gestore della memoria centrale. Il gestore delle periferiche. Il gestore degli archivi.
I linguaggi di programmazione ad alto livello
Limitazioni dei linguaggi assembly. I linguaggi di alto livello. Astrazione sui dati, sul controllo e procedurale. Paradigmi di programmazione. Il paradigma imperativo. Compilatori e interpreti.
Introduzione alla programmazione in linguaggio C
Introduzione alla programmazione mediante l'utilizzo del nucleo elementare del linguaggio C: variabili, tipi di dati, strutture di controllo, gestione dell'ingresso/uscita. Esempi ed esercizi di complessità crescente.