Crea sito

Programma di

Fondamenti di Informatica:

 

 

Conoscenze generali di informatica.
Definizione di informatica, concetto di algoritmo, origini del calcolatore, storia dei calcolatori elettronici, legge di Moore. La rappresentazione dell'informazione. Codifica dei numeri interi, sistema di numerazione posizionale, rappresentazione in base p, conversione fra basi diverse, conversione per parti, somma prodotto e divisione sui numeri binari, notazione modulo e segno, complemento a due, somma e sottrazione in complemento a due. Rappresentazione a virgola fissa. Codifica dei numeri reali in virgola mobile, Standard IEEE.754 (cenni), somma e differenza in virgola mobile, codifica dei caratteri, ASCII, Unicode, codifica delle immagini, algebra di Boole, espressioni booleane. L'architettura di von Neumann (generalizzata), codifica e esecuzione delle istruzioni, la memoria centrale (MM), l'unità di elaborazione (CPU), il bus di sistema. Suddivisione funzionale del bus di sistema, le interfacce delle periferiche, sequenze di lettura e scrittura, fasi fetch, decode ed execute, codifica algoritmi in linguaggio assembly, rappresentazione di un programma in forma binaria. Origini dei sistemi operativi, struttura a strati di un sistema operativo, funzioni del sistema operativo, gestione dei processi, definizione di processo, stati di un processo, context switch, interruzioni interne, interruzioni esterne, esecuzione in modo S e modo U, politiche di esecuzione dei processi, sincronizzazione fra processi. Gestione della memoria centrale, rilocazione statica e dinamica, processo di compilazione ed esecuzione del codice, linker e loader, paginazione, segmentazione, memoria virtuale, accesso in memoria modo S e modo U, driver hardware e software, memorie di massa, nastri, dischi magnetici, dischi ottici, memorie flash, il file system, struttura ad albero, organizzazione dei file. Il file system FAT, elementi della FAT, directory, sistema operativo MS-DOS, comandi fondamentali di MS-DOS. Analisi dell'efficienza di algoritmi, complessità computazionale, modello di macchina, modello di costo, complessità asintotica, notazione O, Ω e Θ, algoritmi di ricerca sequenziale e binaria. Algoritmi di ordinamento: bubble-sort, selection-sort, merge-sort. Estensioni dell'architettura di von Neumann, limiti dell'architettura di von Neumann, fattori che influiscono sulla velocità di esecuzione del codice, pipelining, superpipeline, superscalare, problemi del pipelining, long instruction word, hyperthreading, cache, gerarchie di memoria, direct memory access, architetture multiprocessore, architetture CISC, RISC e CRISC. Basi di dati, realizzazione su file separati e suoi problemi, database management systems, vantaggi di un DBMS, transazioni e loro proprietà, livelli di astrazione, utenti di una base dati, database administrator, categorie di linguaggi: DDL e DML, modello dei dati, basi di dati relazionali, relazione, chiave, il linguaggio SQL, cenni sull'uso di SQL per l'interrogazione di basi di dati. Sistemi distribuiti e reti di calcolatori. Mezzi di trassmissione dati, modulazione, topologie delle reti di calcolatori, scambio di messaggi fra calcolatori, lo stack ISO-OSI, ethernet. I protocolli di Internet, TCP/IP, paradigma client-server, telnet e ftp, il protocollo HTTP, la posta elettronica.

Programmazione in linguaggio C.
Linguaggi di programmazione ad alto livello, pseudocodice, diagrammi di flusso, la macchina astratta del (nucleo del) C, variabili, identificatori simbolici, parole chiave, standard input e standard output, struttura sintattica di un programma C, istruzione di assegnamento, istruzioni di ingresso/uscita, istruzioni composte, istruzione condizionale (if), istruzione iterativa (while), Teorema di Böhm-Jacopini. Variabili strutturate, array di variabili, stringhe. Esecuzione di programmi C su macchine reali, compilazione, ambiente IDE Dev-CPP, struttura di un programma C, parte dichiarativa, dichiarazione di variabili, dichiarazione di costanti, direttiva #include<>, istruzioni printf e scanf con relative specifiche di conversione. Tipo di dato, tipi semplici predefiniti del C, tipo int, tipi float e double, tipo char, tipo restituito dalle espressioni booleane. Rappresentazione delle stringhe in C, forma compatta per l'assegnamento, forma compatta per l'incremento e il decremento, libreria <ctype> per la manipolazione dei caratteri. Comando typedef per la ridefinizione di tipo, tipi enumerati (enum), dichiarazione di tipi array, la direttiva #define, il preprocessore, tipi strutturati (struct), i puntatori. Il comando for, aritmetica dei puntatori, forte tipizzazione, il comando switch, il comando break, il comando continue, puntatori a strutture. Istruzioni break e continue, istruzione default nel costrutto switch, costrutto do ... while, numero di elementi in un array, il concetto di sottoprogramma, sintassi di definizione delle funzioni, parametri formali, passaggio di parametri, macchine astratte master/slave. Procedure, passaggio di parametri per valore e per indirizzo, uso interscambiabile di procedure e funzioni, i blocchi, visibilità (scope) degli identificatori, ciclo di vita delle variabili, passaggio di parametri di tipo struct e array. Passaggio di parametri in C da riga di comando. Gestione dei file in C, apertura di un file in C, tabella dei file aperti, lettura e scrittura formattata su file (fprintf,fscanf), lettura e scrittura di caratteri e righe su file, chiusura di un file, gestione degli errori e fine file. Lettura e scrittura di dati binari su file (fread,fwrite), accesso diretto a file. Programmazione ricorsiva, formulazione in termini ricorsivi di problemi ed algoritmi, esecuzione di sottoprogrammi ricorsivi, attivazione di funzioni, record di attivazione, la gestione a stack della memoria. Strutture dati dinamiche, allocazione e cancellazione della memoria: malloc,calloc e free, stack e heap, rischi della gestione dinamica della memoria, tipi di dati dinamici, struttura dati lista, dichiarazione lista dinamica, operazioni su liste.