Conoscenze

Al termine del corso lo studente avrà acquisito conoscenze in merito agli strumenti necessari per sviluppare programmi in linguaggio C e alle metodologie essenziali per realizzare programmi secondo standard di qualità elevati. Lo studente avrà anche acquisito conoscenze relative al linguaggio C e a tutte le sue componenti. Infine, lo studente avrà acquisito conoscenze di base per comprendere il paradigma di programmazione funzionale.

Modalità di verifica delle conoscenze

Le conoscenze saranno verificate mediante un elaborato scritto a risposte multiple previsto all'inizio di ogni sessione di esame per quanto riguarda la programmazione funzionale. Le conoscenze relative agli strumenti e alle metodologie di sviluppo di programmi in C e al linguaggio C nel suo complesso saranno oggetto di una revisione degli assegnamenti affidati agli studenti durante l'anno che sidovrà svolgeràessere superata prima di accedere alla prova di esame principale.

Capacità

Al termine del corso lo studente sarà in grado di usare un ambiente di sviluppo software che sarà indicato a lezione dai docenti del corso e avrà la capacità di scrivere programmi C perfettamente funzionanti per la soluzione di problemi di complessità medio-alta.

Modalità di verifica delle capacità

Al termine del corso lo studente dovrà scrivere un programma C funzionante che risolve un problema assegnatogli dai docenti durante la prova principale di esame.

Comportamenti

Lo studente acquisirà precisione scientifica nello svolgere gli assegnamenti e nel produrre il codice C corrispondente.

Modalità di verifica dei comportamenti

Realizzazione di un programma funzionante risultato della prova di esame principale.

Prerequisiti per studi successivi

Questo insegnamento è un pre-requisito per tutti gli esami di area informatica seguenti.

Indicazioni metodologiche

Il corso si divide in lezioni in aula e laboratori. Durante le lezioni in aula vengono introdotti i concetti fondamentali del corso e illustrati mediante semplici esempi. Si farà ricorso sia a diapositive proiettate e commentate dal docente che a sessioni interattive di programmazione che il docente mostrerà agli studenti mediante proiezione dello schermo del proprio computer alla classe.

In laboratorio si utilizzeranno strumenti di sviluppo software professionali per la realizzazione di programmi C che risolvano problemi assegnati dai docenti agli studenti durante la classe.

Verranno forniti assegnamenti da svolgersi in classe ed eventualmente completare a casa che saranno poi oggetto di verifica prima di accedere alla prova principale di esame.

Programma

Introduzione generale: livelli di astrazione (hardware, sistemi operativi, applicazioni). Linguaggi di programmazione (sintassi vs. semantica, parser, compilatori, interpreti, algoritmi). Descrizioni BNF.

Elementi base di C: analisi di semplici programmi

Rappresentazioni: numeri senza segno, intervalli di rappresentazione, operazioni con numeri binari puri: addizione, sottrazione, overflow.  Numeri con segno (modulo e segno, complemento a 2). Numeri reali (fissi e in virgola mobile). Errori di rappresentazione. Rappresentazioni non numeriche: caratteri (ASCII, UNICODE).

Linguaggio C: strutture di controllo, funzioni, ricorsione, vettori, puntatori, caratteri e stringhe, I/O formattato, strutture, unioni, manipolazione di bit e enumerazioni, argomenti da linea di comando, elaborazione di file, allocazione dinamica della memoria, strutture dati (liste, pile, code), programmi con file sorgenti multipli.

Introduzione alla programmazione funzionale.

Modalità di esame

Compito a risposte multiple su programmazione funzionale: 10 domande con 4 scelte. Ciascuna domanda vale 0.5 punti se corretta e, -0.2 punti se errata e 0 punti se non risposta. Durata 1 ora. Nessun materiale o strumento tecnologico è permesso allo scritto. Occorrono almeno 2,6 punti per partecipare al compito di programmazione in C. Il superamento della prova vale solo per la stessoa sessione appello in cui si sostiene la prova di programmazione in C.

La prova di programmazione in C si svolge in laboratorio e consiste nella stesura di un programma funzionante che risolve un problema simile a quelli visti nelle lezioni di laboratorio. La durata della prova è di 2 ore e si svolge al computer. Nessun materiale o strumento tecnologico è permesso alla prova. Esiste un sistema automatico di testing che effettua controlli preliminari sulla correttezza del programma prodotto e avvisa il candidato in caso di errori. 

Il compito verrà valutato (in termini di correttezza del programma e qualità del codice prodotto sia in termini di standard di qualità introdotti a lezione che di efficienza della soluzione) solo se il programma supera almeno il 51% dei casi di test forniti nella prova.Se si desidera abbandonare l’esame occorre dirlo esplicitamente per evitare la consegna del codice. La prima volta (e solo la prima volta!) che viene consegnato il codice in C si guadagna un bonus di 2 punti. La prova vale 24 punti e si considera superata con almeno 14 punti. Verrà valutata, oltre la correttezza del programma, anche la qualità del codice prodotto sia in termini di standard di qualità introdotti a lezione che di efficienza della soluzione.

Durante le lezioni di laboratorio verranno dati degli assegnamenti agli studenti da svolgersi durante le lezioni e da completare a casa o da svolgere completamente a casa. La soluzione di almeno 6 assegnamenti è condizione necessaria per poter partecipare alla prova di programmazione in C. La soluzione di tali assegnamenti verrà verificata in itinere mediante una brevissima discussione con i candidati durante le lezioni di laboratorio prima della prova di programmazione. Chi non riesce a superare la prova durante l’anno, dovrà farlo almeno 3 giorni prima della prova di programmazione a cui intende partecipare previo appuntamento con il docente di riferimento del gruppo di laboratorio a cui è assegnato. Tale verifica permette di acquisire da 0 a 3 punti. La verifica si considera superata solo se si acquisisce almeno 1 punto.

Non sono previste prove in itinere. Il prof può richiedere una verifica orale, lo studente non può chiedere l’orale per alzare il voto.