Obiettivi formativi
L'obiettivo del corso è quello di fornire le conoscenze teoriche e pratiche fondamentali per la programmazione C:
- Conoscenza della rappresentazione di basso livello delle informazioni, dell'architettura di base dei processori e del processo di compilazione.
- Conoscenza della sintassi e della semantica del linguaggio C per lo sviluppo di programmi strutturati.
- Conoscenza delle strutture dati elementari e dei paradigmi di programmazione iterativa e ricorsiva.
- Conoscenza dei principali algoritmi elementari di ricerca e ordinamento e dei metodi per la valutazione della complessità computazionale.
Al termine del corso lo studente conoscerà i fondamenti dell'architettura dei calcolatori, le tecniche di programmazione in linguaggio C, e algoritmi elementari di ricerca e ordinamento, e sarà in grado di comprendere ed applicare tali metodi per risolvere problemi concreti tramite la scrittura di programmi corretti e funzionanti.
Con riferimento ai Descrittori di Dublino:
Conoscenza e Comprensione
cc7 - La conoscenza dei fondamenti dell'informatica e dell'approccio algoritmico alla risoluzione dei problemi.
cc8 - Conoscenza dell’architettura di un calcolatore e di un sistema operativo.
cc9 - Conoscenza di metodologie e strumenti per la programmazione procedurale ed a oggetti.
Capacità di Applicare Conoscenza e Comprensione
ca7 - La capacità di tradurre in semplici codici informatici problemi informativi o numerici.
Autonomia di Giudizio
ag1 - Maturare la capacità di analizzare autonomamente il campo sotto studio, applicando i metodi e le conoscenze acquisiti durante il percorso formativo.
ag4 - Valutare criticamente i risultati ottenuti, applicando l’autonomia di giudizio per la stesura di elaborati e per il superamento delle prove d'esame.
Capacità di Comunicazione
ac1 - Sviluppare la capacità di comunicare in modo chiaro e strutturato, sia in forma scritta che orale, i risultati delle proprie attività, con un alto livello di rigore tecnico.
Capacità di Apprendimento
ap3 - Apprendere in modo guidato nella preparazione degli esami orali, nella redazione di elaborati analitici o progettuali, e nelle relazioni delle attività svolte.
Acquisire le conoscenze di base per la programmazione object oriented e uso di design pattern di base.
Gli studenti saranno in grado di programmare secondo le tecniche object oriented in C++, avranno una conoscenza di base di meccanismi di analisi e programmazione object oriented. Verranno acquisite conoscenze relativi a pattern di progettazione del software.
Con riferimento ai Descrittori di Dublino:
Conoscenza e Comprensione
cc9 - Conoscenza di metodologie e strumenti per la programmazione procedurale ed a oggetti.
Capacità di Applicare Conoscenza e Comprensione
ca7 - La capacità di tradurre in semplici codici informatici problemi informativi o numerici.
ca8 - Capacità di progetto di semplici architetture software per la soluzione di problemi.
Autonomia di Giudizio
ag1 - Maturare la capacità di analizzare autonomamente il campo sotto studio, applicando i metodi e le conoscenze acquisiti durante il percorso formativo.
ag4 - Valutare criticamente i risultati ottenuti, applicando l’autonomia di giudizio per la stesura di elaborati e per il superamento delle prove d'esame.
Capacità di Comunicazione
ac1 - Sviluppare la capacità di comunicare in modo chiaro e strutturato, sia in forma scritta che orale, i risultati delle proprie attività, con un alto livello di rigore tecnico.
Capacità di Apprendimento
ap3 - Apprendere in modo guidato nella preparazione degli esami orali, nella redazione di elaborati analitici o progettuali, e nelle relazioni delle attività svolte.
Programma
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, principi di funzionamento di un processore.
Programmazione object oriented, C++, basi di ingegneria del software
Modalità d'esame
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.
Durante il corso sono svolte anche due prove in itinere che, se superate, sostituiscono la prova scritta: la prima si svolge a metà/fine Novembre, la seconda ad inizio Gennaio.
L'esame è volto ad accertare le competenze teoriche e pratiche acquisite sugli argomenti del corso:
1. CONOSCENZA E COMPRENSIONE
1.1 Conoscenza e comprensione dei concetti di base dell'informatica e delle principali funzionalità di un sistema informatico di base.
1.2 Conoscenza e comprensione dei metodi generali di studio di un linguaggio di programmazione, dell'approccio algoritmico alla risoluzione dei problemi, e dei metodi generali di ragionamento nella progettazione di strutture dati e algoritmi.
1.3 Conoscenza e comprensione del linguaggio c.
1.4 Conoscenza e comprensione della struttura e dei principi di funzionamento di un calcolatore, del rapporto tra il linguaggio c e il suo ambiente di esecuzione, e del processo di compilazione, assemblaggio e collegamento.
1.5 Capacità avanzata nella progettazione e nello sviluppo in linguaggio c di strutture dati e algoritmi.
1.6 Capacità di formalizzare il problema della complessità di un algoritmo.
1.7 Capacità di formalizzare il concetto di correttezza di un algoritmo.
1.8 Capacità di sviluppare, effettuare il debug ed applicare algoritmi di base a casi di interesse ingegneristico per risolvere problemi informativi o numerici.
2. CAPACITA' DI APPLICARE CONOSCENZA E COMPRENSIONE
2.1 Capacità di applicare le conoscenze acquisite allo scopo di risolvere problemi di programmazione c.
2.2 Capacità di applicare le conoscenze acquisite allo scopo di risolvere quesiti elementari sulla rappresentazione di basso livello.
3. AUTONOMIA DI GIUDIZIO
3.1 Capacità di verificare il proprio grado di apprendimento e comprensione dei concetti esposti durante il corso.
3.2 Capacità di valutare soluzioni a problemi di programmazione c.
4. ABILITA' COMUNICATIVE
4.1 Capacità di esprimere le proprie conoscenze in modo corretto e logico.
4.2 Capacità di presentare le proprie conoscenze con un linguaggio tecnico appropriato.
5. CAPACITA' DI APPRENDIMENTO
5.1 Capacità di provvedere autonomamente allo studio di nuovi linguaggi di programmazione.
Tabella docimologica di valutazione
Insufficiente
Valutazione negativa dovuta a gravi errori concettuali, comprensione frammentaria o nulla degli argomenti trattati, incapacità di applicare le conoscenze, gravi lacune e mancanza di autonomia.
18–22
Valutazione sufficiente o più che sufficiente dovuta a conoscenza elementare degli argomenti, presenza di alcuni errori, capacità di affrontare solo compiti semplici o guidati, livello base di autonomia.
23–25
Valutazione discreta dovuta a comprensione soddisfacente degli argomenti, capacità di applicare correttamente le conoscenze a contesti noti e di affrontare gli esercizi in modo autonomo con qualche imprecisione, con un soddisfacente livello di autonomia e competenza operativa.
26–28
Valutazione buona o molto buona, dovuta a solida comprensione teorica della disciplina, capacità di collegare concetti, risolvere problemi e proporre analisi critiche, di svolgere compiti complessi in modo autonomo, preciso ed efficace, con un buon livello di autonomia e competenza operativa.
29–30 e Lode
Valutazione eccellente o ottima, dovuta a conoscenze complete, approfondite e ben strutturate, capacità di operare in modo autonomo e flessibile, anche in contesti complessi o nuovi, di utilizzare il linguaggio disciplinare in modo appropriato, preciso e articolato, di evidenziare capacità critiche, originalità e rigore nell’esposizione e nell’applicazione.
La Lode è attribuita a elaborati o prestazioni che si distinguono per brillantezza e originalità, anche al di là delle aspettative curricolari.
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.
Durante il corso sono svolte anche due prove in itinere che, se superate, sostituiscono la prova scritta: la prima si svolge a metà/fine novembre, la seconda ad inizio gennaio.
L'esame è volto ad accertare le competenze teoriche e pratiche acquisite sugli argomenti del corso:
1. CONOSCENZA E COMPRENSIONE
1.1 Conoscenza e comprensione dei concetti di base dell'informatica e delle principali funzionalità di un sistema informatico di base.
1.2 Conoscenza e comprensione dei metodi generali di studio di un linguaggio di programmazione, dell'approccio algoritmico alla risoluzione dei problemi, e dei metodi generali di ragionamento nella progettazione di strutture dati e algoritmi.
1.3 Conoscenza e comprensione del linguaggio c.
1.4 Conoscenza e comprensione della struttura e dei principi di funzionamento di un calcolatore, del rapporto tra il linguaggio c e il suo ambiente di esecuzione, e del processo di compilazione, assemblaggio e collegamento.
1.5 Capacità avanzata nella progettazione e nello sviluppo in linguaggio c di strutture dati e algoritmi.
1.6 Capacità di formalizzare il problema della complessità di un algoritmo.
1.7 Capacità di formalizzare il concetto di correttezza di un algoritmo.
1.8 Capacità di sviluppare, effettuare il debug ed applicare algoritmi di base a casi di interesse ingegneristico per risolvere problemi informativi o numerici.
2. CAPACITA' DI APPLICARE CONOSCENZA E COMPRENSIONE
2.1 Capacità di applicare le conoscenze acquisite allo scopo di risolvere problemi di programmazione c.
2.2 Capacità di applicare le conoscenze acquisite allo scopo di risolvere quesiti elementari sulla rappresentazione di basso livello.
3. AUTONOMIA DI GIUDIZIO
3.1 Capacità di verificare il proprio grado di apprendimento e comprensione dei concetti esposti durante il corso.
3.2 Capacità di valutare soluzioni a problemi di programmazione c.
4. ABILITA' COMUNICATIVE
4.1 Capacità di esprimere le proprie conoscenze in modo corretto e logico.
4.2 Capacità di presentare le proprie conoscenze con un linguaggio tecnico appropriato.
5. CAPACITA' DI APPRENDIMENTO
5.1 Capacità di provvedere autonomamente allo studio di nuovi linguaggi di programmazione.
La modalità per la verifica dell'apprendimento medianti le quali si verifica:
- la conoscenza dei costrutti base del linguaggio C++
- la conoscenza dei concetti di base della programmazione object oriented
- la capacità di disegnare classi e metodi
- la capacità di applicare design pattern di base alla progettazione di classi
consiste in:
Esame scritto ed orale:
L'esame scritto consiste di una serie di 3-4 domande su gli aspetti teorici di tutti gli argomenti del corso e di 2-4 domande relative a brevi problemi di programmazione. L'esame orale consiste di domande relative agli argomenti del compito scritto e su argomenti correlati.
E' prevista una prova intermedia per la valutazione della conoscenza del C++, che può sostituire in caso di valutazione positiva le domande di teoria del compito.
Tabella docimologica di valutazione
Insufficiente
Valutazione negativa dovuta a gravi errori concettuali, comprensione frammentaria o nulla degli argomenti trattati, incapacità di applicare le conoscenze, gravi lacune e mancanza di autonomia.
18–22
Valutazione sufficiente o più che sufficiente dovuta a conoscenza elementare degli argomenti, presenza di alcuni errori, capacità di affrontare solo compiti semplici o guidati, livello base di autonomia.
23–25
Valutazione discreta dovuta a comprensione soddisfacente degli argomenti, capacità di applicare correttamente le conoscenze a contesti noti e di affrontare gli esercizi in modo autonomo con qualche imprecisione, con un soddisfacente livello di autonomia e competenza operativa.
26–28
Valutazione buona o molto buona, dovuta a solida comprensione teorica della disciplina, capacità di collegare concetti, risolvere problemi e proporre analisi critiche, di svolgere compiti complessi in modo autonomo, preciso ed efficace, con un buon livello di autonomia e competenza operativa.
29–30 e Lode
Valutazione eccellente o ottima, dovuta a conoscenze complete, approfondite e ben strutturate, capacità di operare in modo autonomo e flessibile, anche in contesti complessi o nuovi, di utilizzare il linguaggio disciplinare in modo appropriato, preciso e articolato, di evidenziare capacità critiche, originalità e rigore nell’esposizione e nell’applicazione.
La Lode è attribuita a elaborati o prestazioni che si distinguono per brillantezza e originalità, anche al di là delle aspettative curricolari.
Testi di riferimento
Stefano Berretti, Laura Carnevali, Enrico Vicario, "Fondamenti di Programmazione, linguaggio c, strutture dati e algoritmi elementari, c++," Editrice Esculapio, Bologna, edizione giugno 2018. Il codice C di diversi esempi svolti a lezione è a disposizione alla pagina del corso su moodle. Controlla la bibliografia su onesearch (https://onesearch.unifi.it/). Per aiuto contatta la tua biblioteca (https://unifi.libanswers.com/).
Stefano Berretti, Laura Carnevali, Enrico Vicario, "Fondamenti di Programmazione, linguaggio c, strutture dati e algoritmi elementari, c++," Editrice Esculapio, Bologna, edizione giugno 2018. Il codice C di diversi esempi svolti a lezione è a disposizione alla pagina del corso su moodle.
M. Bertini, "Programmazione object-oriented in C++. Design pattern e introduzione alle buone pratiche di programmazione", Editrice Esculapio
E. Vicario, "Fondamenti di programmazione. Linguaggio C, strutture dati, algoritmi elementari, C++", Editrice Esculapio
D.S. Malik, "Programmazione in C++", Apogeo
L.J. Aguilar, "Fondamenti di programmazione in C++", McGraw-Hill
B. Eckel, "Thinking in C++", disponibile gratuitamente (in versione HTML) su: http://www.mindview.net/Books/DownloadSites
Gamma, Helm, Johnson, Vlissides, "Design patterns", Pearson Education
Materiale (lucidi e link aggiuntivi) presente sul sito web del corso (http://www.micc.unifi.it/bertini/).
Codice insegnamento B024279