ATTENZIONE: regole per le iscrizioni all'esame per gli studenti degli anni precedenti
I concetti di calcolatore e algoritmo
Problemi e loro soluzioni. Il processo risolutivo. Il concetto di algoritmo. Il calcolatore come esecutore universale di algoritmi. Vantaggi nell’uso di un calcolatore. Processo e flusso di esecuzione di un algoritmo. Proprietà di un algoritmo. Variabili ed istruzioni. Istruzioni di assegnamento. Espressioni aritmetico, relazionali, logiche. Algebra di Boole. Gli schemi a blocchi. Gli schemi a blocchi strutturati: sequenze, selezione semplice, selezione a 2 vie, cicli a condizione iniziale. Trasformazione funzionale per strutturare uno schema a blocchi. Il teorema di Jacopini-Boem. Cicli a condizione finale e selezione a scelta multipla. Esercizi sull’uso di diagrammi a blocchi strutturati.
La codifica dell’informazione
L’informazione ed i suoi supporti. Il bit. Il problema della rappresentazione. Grandezze di misura dell’informazione. La codifica di testi: codici ASCII, Latin-1 ed UNICODE. Codifica delle istruzioni. Codifica dei numeri naturali: conversione da base 2 a base 10, conversione da base 10 a base 2. Codifica con modulo e segno e codifica in complemento a 2. Conversione da complemento a 2 alla base 10. Metodi alternativi per la conversione da base 10 a complemento a 2. Estensione del segno. Somma in complemento a 2 e condizioni di overflow. Codifica dei numeri reali. Notazione scientifica. Standard IEEE-754. Esercizi sulla codifica di numeri interi e reali.
L’architettura del calcolatore
Elementi della macchina di von Neumann. Organizzazione e componenti di un sistema di elaborazione. La memoria centrale. Lettura e scrittura in memoria. La struttura del processore. I registri. Il linguaggio macchina. Il ciclo macchina. Fase di fetch. Esempi di esecuzione di alcune istruzioni in linguaggio macchina. Il clock. Logiche di progettazione della CPU: CISC, RISC. La memoria del calcolatore: caratteristiche, tecnologie costruttive. Memoria RAM. Gerarchie di memoria. Memorie di massa: dischi magnetici, SSD e ottici. La gestione delle periferiche: interfacce di I/O. Sincronizzazione: a controllo di programma, ad interruzione, ad accesso diretto alla memoria.
Programmazione in C
Caratteristiche di un linguaggio di programmazione. L’astrazione: linguaggi di basso e alto livello. Paradigma di programmazione imperativa: strutturata/orientata agli oggetti. Paradigma di programmazione funzionale e dichiarativa. Interpretazione e compilazione. Direttive al compilatore. Sistemi di sviluppo integrati. CLion. Astrazione notazionale in C: identificatori simbolici. Regole di buona scrittura del codice. Astrazione sui dati in C. Tipi di dati elementari: interi, floating point, caratteri. Dichiarazione di variabili. Operatore di assegnamento. Operatore aritmetici. Operazioni di casting. Astrazione procedurale in C. Definizione e chiamata di funzione. La funzione printf e scanf. L’astrazione sul controllo in C. Le istruzioni condizionali IF, ELSE, SWITCH. Operatori relazionali. Le istruzioni iterative WHILE, DO e FOR. Gli operatori di assegnamento composto e di incremento/decremento. Le istruzioni di salto BREAK, CONTINUE, RETURN. I cicli annidati. Le funzioni in C: definizione, invocazione e dichiarazione. Passaggio di valori tra i parametri e gli argomenti: parametri variabili, parametri puntatori. Esempi di definizione ed invocazione di funzioni. Variabili locali, statiche e globali. Scope e durata di memorizzazione. I vettori di variabili: dichiarazione, indicizzazione, inizializzazione. Matrici di variabili: dichiarazione, indicizzazione, inizializzazione. Utilizzo di vettori e matrici per la soluzioni di problemi. Vettori e funzioni. Gli operatori & ed *. Costanti stringa. Variabili stringa: dichiarazione, inizializzazione, acquisizione e visualizzazione. Operazioni su sequenze di interi: stampa, ricerca, inserimento, cancellazione, fusione. Variabili struttura: dichiarazione, inizializzazione. Operatori per variabili strutture: ( . ) e ->. Etichettatura e definizione di un nuovo tipo di dato strutturato. Variabili struttura come argomento di funzioni. Dichiarazioni di variabili struttura annidate. Vettori di variabili struttura. Operazioni su sequenze di variabili struttura: ricerca, stampa, inserimento, cancellazione, ordinamento.