Sei sulla pagina 1di 4

FONDAMENTI DI INFORMATICA

Corsi di laurea:
• Ingegneria Meccatronica
• Ingegneria dell’innovazione del prodotto
PROGRAMMA A.A. 2017-2018
In questo documento vengono usati i simboli:
o [Bro12] come riferimento al testo: Brookshear G., Brylow D., “Informatica, una panoramica
generale” 12° edizione, Pearson 2016;
o [K] come riferimento al testo: King, K., “Programmazion in C”, Apogeo, Maggioli, 2014;

Fondamenti teorici dell’Informatica:


[Bro12], Capitolo 1 – Memorizzazione dei dati
• Concetto di bit, introduzione all'algebra booleana.
• Funzioni booleane e tabella della verità.
• Operazioni logiche fondamentali: NOT, AND, OR, XOR.
• Concetto di notazione posizionale.
• Esempi di rappresentazione di dati usando i byte: caratteri (tabella ASCII) e immagini.
• Notazione binaria naturale.
• Conversione tra le basi 2 e 10.
• Somma tra numeri binari.
• Rappresentazione dei numeri interi con segno: notazione complemento a 2, notazione in eccesso;
esempi ed esercizi.
• Numeri binari frazionari; esempi ed esercizi.
• Rappresentazione dei numeri razionali: floating point; esempi ed esercizi.
• Errori di troncamento.
• Numeri frazionari decimali finiti che diventano periodici in base 2.
• Limiti delle variabili built-in del C (char, short, int e corrispondenti unsigned, float, double).
[Bro12], Capitolo 2 – Elaborazione dei dati
• Differenze tra rappresentazione analogica e digitale dell'informazione.
• Porte logiche, esempi di rappresentazione di circuiti logici.
• Sistemi di memorizzazione: il latch SR (Set-Reset).
• Studio del funzionamento di due diverse realizzazioni circuitali del latch SR.
• Significato di Set, Reset, Memorizzazione.
• Organizzazione della memoria centrale di un calcolatore.
• Indirizzamento della memoria centrale.
• Concetto di memoria ad accesso casuale, semicasuale, seriale.
• Memoria di massa: hard disk, CD.
• Differenti caratteristiche della memoria centrale e di quella di massa.
• Tempo necessario per accedere ai dati su un disco fisso.
• Componenti di base di un computer: CPU e memoria centrale.
• Componenti di una CPU: ALU, CU e registri.
• Registri general purpose.
• Instruction set, linguaggio Assembly e linguaggio macchina.
• Esempio di esecuzione di un semplice programma: i passi necessari per sommare due numeri.
• Architettura di Von Neuman, dati e istruzioni nella stessa memoria.
• Due filosofie di progettazione dei processori: CISC e RISC.
• Tipologie di istruzioni: istruzioni di trasferimento dei dati, istruzioni aritmetico/logiche e
istruzioni di
controllo.
• Campi di un'istruzione: opcode e argomenti.
• Registri speciali: IR e PC.
• Ciclo di esecuzione dei programmi / ciclo macchina: fetch, decode, execute.
• Processori multi-core e hyperthreading: due CU connesse alla stessa ALU.
• Somma di due numeri: esempio di esecuzione del codice macchina, con focus su evoluzione dei
dati nel
PC e nell'IR.
• Operazioni bitwise (and, or, xor) e mascheramento; esempi.
• Shift circolare e shift logico, shift come moltiplicazione o divisione per una potenza del 2.
• Collegamento di periferiche al bus di sistema, funzione dei controller, controller universale
(USB).
• Memory-mapped I/O vs I/O con istruzioni specifiche.
• Direct Memory access (DMA).
• Handshaking, parola di stato.
• Due tipi di comunicazione: seriale vs parallela.
• Pipelining e problemi con le istruzioni di salto.
• Architetture di calcolo SIMD e MIMD.
[Bro12], Capitolo 3 – Sistemi operativi
• Definizione di sistema operativo.
• Sistemi a coda di job e problemi di interattività.
• Discussione sulla valutazione della didattica.
• Classificazione del software e software componenti del sistema operativo.
• Time sharing e suo impatto sull'interattività.
• Kernel e shell di un sistema operativo.
• Shell testuale e grafica (GUI), window manager.
• Alcuni componenti del kernel: file manager, driver di periferica e memory manager.
• Procedura di boostrap.
• Concetti di processo e programma, loro differenza.
• Stato di un processo.
• Scheduler e dispatcher.
• Timer e interrupt per la gestione dei quanti di tempo di un processo in un sistema time sharing.
• Context switch (commutazione di processo/contesto).
• Competizione tra processi per l'accesso a risorse non condivisibili.
• Flag e semafori.
• Problemi della gestione dei flag in sistemi time-sharing, istruzione test-and-set (operazione
atomica).
• Deadlock (stallo): condizioni perché si verifichi, modalità di risoluzione.
[Bro12], Capitolo 8 – Strutture dei dati elementari
• Due esempi di strutture dati: array (già noti) e linked list. Vantaggi e svantaggi delle due strutture.
PROGRAMMAZIONE IN LINGUAGGIO C
[K], Capitolo 2 – Fondamenti di C
• Ambiente di sviluppo; Editor, Precompilatore, Compilatore, Esecuzione. Processo di
compilazione;
errori sintattici (o di compilazione), errori in run-time ed errori logici.
• Strumenti di sviluppo: Precompilatore, Compilatore, Linker.
• Il linguaggio di programmazione C: caratteristiche e finalità.
• La struttura di un semplice programma. Commenti, Direttive, Funzioni, Istruzioni, Stampe di
stringhe.
[K], Capitolo 3 – Input/Output formattato
• Direttiva "#include".
• "scanf" e "printf".
• Definizione intuitiva di Problema. Definizione di Algoritmo. Insiemi di test.
[K], Capitolo 4 – Espressioni
• Operatori aritmetici
• Espressioni.
[K], Capitolo 5 – Istruzioni di selezione
• Controlli.
• Istruzioni di selezione. "if-else".
• Selezioni a cascata.
[K], Capitolo 6 – Cicli
Cicli. Iterazioni. Cicli a contatore, a condizione iniziale, a condizione finale. "while", "do-while",
"for".
• Cicli annidati gestiti soltanto mediante due funzioni separate.
• Istruzione "break" usata dentro un ciclo.
[K], Capitolo 7 – I tipi base
• Tipi; distinzione tra tipi scalari e aggregati.
• Tipi base (o fondamentali); "int", "float", "char"; booleani gestiti mediante "int". Operazioni
associate ai tipi base.
[K], Capitolo 8 – Vettori (Array)
• Array a 1 dimensione (unidimensionali). Definizione.
• Indice, capienza, operatore di indicizzazione [ ], sfondamento di un array, grandezza.
[K], Capitolo 9 – Funzioni
• Funzioni. Parametri e argomenti. Classificazione dei parametri rispetto alla direzionalità.
• Definizione, descrizione, intestazione e corpo di una funzione.
• Parametri di passaggio; valore di ritorno. Passaggio per (copia di) valore.
• Invocazione; link ed esecuzione di un'invocazione.
• Definizione di algoritmi risolubili mediante un'unica espressione. Espressioni booleane. Esercizi
vari.
• Scomposizione di un problema.
• Concetto della ricorsione.
• Funzioni ricorsive con parametri scalari.
[K], Capitolo 10 – Organizzazione del programma
• Variabili; definizione, inizializzazione, assegnazione, indirizzo. Variabili con visibilità interna (o
locale);
• variabili a durata automatica.
• Costanti mediante direttiva "#define".
[K], Capitolo 11 – Puntatori
• Puntatori e indirizzi.
• Operatori di indirizzo & e di indirezione *.
• Passaggio per (copia di) indirizzo.
• Parametri d'IO verso un dispositivo.
[K], Capitolo 13 – Stringhe
• Stringhe.
• Array di strutture.
• Array a più dimensioni (multidimensionali).
• Array di stringhe.
[K], Capitolo 16 – Strutture
• Strutture. Tipi e variabili strutturate. Campi. Annidamento di strutture.
• Strutture e funzioni. Variabile strutturata passata per indirizzo. Qualificatore "const".
• Operatore ->.
[K], Capitolo 22 – Input/Output
• File di testo (o testuali) e file binari.
• Terminologia generale.
• Accesso ad un file.
• Lettura e scrittura da un file di testo.
[Bro12], Capitolo 5 – Algoritmi
• Strumenti di analisi e misura delle prestazioni degli algoritmi; ipotesi semplificative; notazione O.
• Individuazione delle prestazioni in algoritmi iterativi.
• Problema della ricerca. Ricerca lineare; ricerca binaria mediante iterazione. Algoritmi risolutivi e
prestazioni.
• Merge. Algoritmo risolutivo e prestazione.
• Ordinamento. Algoritmi risolutivi: selection-sort, insertion-sort, merge-sort, quick-sort.
• Prestazioni nel caso pessimo, medio e ottimo.