Il concetto di algoritmo e di calcolatore
Problemi e soluzioni. Il calcolatore come esecutore universale di algoritmi. Proprietà di un algoritmo. Algoritmi, computazioni e funzioni calcolate. La risoluzione di problemi con il calcolatore.
La codifica dell'informazione
Informazione e rappresentazione. 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. Codifica dei testi. Rappresentazione analogica e digitale. Codifica di suoni, immagini e sequenze video. Codici rivelatori e correttori (cenni). Compressione (cenni): compressione senza perdita, compressione con perdita.
L'architettura del calcolatore
Organizzazione macroscopica del calcolatore (modello di von Neumann). L'unità centrale: i componenti, il ciclo macchina, il funzionamento dell'unità centrale, prestazioni. La codifica delle istruzioni: il linguaggio macchina, il linguaggio assemblatore, esempi di istruzioni in linguaggio assemblatore MIPS. La memoria centrale: modalità di accesso, prestazioni, memoria a sola lettura. La gerarchia di memoria. La memoria cache. La memoria di massa: dischi ottici, dischi magnetici, memoria flash. La gestione delle periferiche: l'interfaccia di ingresso-uscita, indirizzamento, sincronizzazione. Dispositivi di ingresso-uscita.
Il progetto degli algoritmi
La risoluzione algoritmica dei problemi. Il progetto degli algoritmi: processo di risoluzione di un problema, dall'analisi del problema all'esecuzione di un programma, caratteristiche di un algoritmo (istruzioni e dati). Tecniche di rappresentazione degli algoritmi. Il linguaggio degli schemi a blocchi. Proprietà degli algoritmi. Esempi di algoritmi. Algebra di Boole. Esercizi sull'algebra di Boole.
I linguaggi di programmazione di alto livello
I limiti del linguaggio assemblatore e i requisiti di un buon linguaggio di programmazione. I linguaggi di alto livello. Lo sviluppo dei linguaggi di alto livello. Paradigmi di programmazione. Il paradigma imperativo. Il concetto di astrazione (dati, controllo, procedurale). Tipi di dato, strutture di controllo, funzioni e procedure. Compilatori e interpreti. Linker, editor, debugger.
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, lo scheduling, la gestione dell'interazione tra processi. Il gestore della memoria centrale. Il gestore delle periferiche. Il gestore degli archivi. L'interprete dei comandi.
I calcolatori in rete
Le reti di calcolatori: funzionalità e classificazioni. Reti commutate e broadcast. Reti locali: topologia e metodi di accesso. Il modello a livelli il modello TCP/IP. La rete Internet: evoluzione storica e organizzazione. Il modello client-server. I principali servizi Internet: il servizio di risoluzione dei nomi, la posta elettronica, il World Wide Web. La sicurezza in Internet.
Introduzione al linguaggio C
Introduzione alla programmazione mediante l'utilizzo del nucleo elementare del linguaggio C: tipi di dati elementari, strutture di controllo, gestione dell'ingresso/uscita. Programmazione strutturata per raffinamenti successivi, programmazione modulare. Esempi ed esercizi di complessità crescente.