Definizione ed uso del linguaggio C. Sviluppo di algoritmi, anche di elevata complessità nel livello della programmazione, seppure con minore complessità nella struttura delle funzioni.
Comprensione del rapporto tra linguaggio C e suo ambiente di esecuzione, natura del processo di compilazione, link e assemblaggio, dei principi di funzionamento di un processore.
Stefano Berretti. Laura Carnevali, Enrico Vicario, "Fondamenti di Programmazione, linguaggio c, strutture dati e algoritmi elementari, c++," Editrice Esculapio, Bologna.
Il codice C di diversi esempi svolti a lezione è a disposizione sul sito del docente.
Obiettivi Formativi
Fornire le conoscenze di base relative alla struttura di un calcolatore ed alla esecuzione di un programma.
Conoscenza ed uso del linguaggio C. Capacità di realizzare programma di media complessità in linguaggio C. Conoscenza degli algoritmi per la gestione di strutture dati base, algoritmi di ricerca e ordinamento.
Prerequisiti
I requisiti essenziali sono l’interesse, la capacità di ragionamento logico, la attitudine ai processi di conoscenza deduttivi, la capacità di attenzione e applicazione ai problemi. Molte di queste cose si apprendono nello studio della matematica, che è utile nel formare il metodo e fornire strumenti specifici. Chi ha esperienza nella programmazione, tipicamente gli studenti che provengono da istituti tecnici, è inizialmente facilitato. Il corso è comunque disegnato per studenti che non abbiano alcuna precedente conoscenza in materia di informatica.
Metodi Didattici
Prevalentemente lezioni frontali con presentazione alla lavagna. Alcune lezioni finalizzate alla esercitazione e svolte in laboratorio. Alcune lezioni svolte con l’ausilio di un portatile collegato a proiettore per illustrare l’uso di compilatore e ambiente di sviluppo.
L'esame si compone di una prova scritta ed una orale.
La prova scritta consiste in alcuni esercizi di programmazione relativi alla realizzazione di funzioni C che risolvono specifici problemi. Altri esercizi possono comprendere la grammatica e semantica del C. Per accedere alla prova orale, oltre a riportare una complessiva valutazione positiva, il candidato deve realizzare il programma corretto e funzionante di uno degli esercizi della prova scritta. Il programma deve essere autocontenuto e deve poter essere compilato ed eseguito. La prova scritta è svolta su carta. Dopo la conclusione, i testi assegnati nelle prove scritte e le loro soluzioni sono resi disponibili in all’interno della piattaforma Moodle.
La prova orale inizia con la discussione dell'elaborato e della prova scritta, e prosegue con l'approfondimento di tutti i contenuti del corso.
Programma del corso
PARTE I: RAPPRESENTAZIONE DI BASSO LIVELLO
Introduzione intuitiva al linguaggio C; codifica numerica dei tipi; codifica di basso livello delle istruzioni in forma simbolica (assembler MIPS) e numerica (linguaggio macchina MIPS); architettura di un processore Risc (Risc4000); processo di compilazione e assemblaggio.
PARTE II: LINGUAGGIO C
Definizione di un linguaggio: sintassi, grammatica, albero sintattico, BNF, semantica; Linguaggio C: tipi variabili e costanti, Operatori ed espressioni, Puntatori, Array, Istruzioni, Funzioni, dati strutturati.
PARTE III: STRUTTURE DATI ELEMENTARI
Liste: rappresentazione in forma sequenziale, collegata con arrays e indici, collegata con puntatori; Iterazione e ricorsione.
PARTE IV: ALGORITMI ELEMENTARI
Costo di esecuzione e complessità; Algoritmi di ricerca: sequenziale, binaria, a salti; Algoritmi di ordinamento: sequential-sort, bubble-sort, merge-sort, quick-sort. Complessità minima di un problema: il caso dell'ordinamento.