Conoscenza e capacità di comprensione (knowledge and understanding): l'obiettivo primario del corso è l’acquisizione da parte degli studenti della “filosofia” della programmazione strutturata, e la conoscenza dettagliata della sintassi e della semantica del linguaggio di programmazione C. Il corso rivolge una particolare attenzione allo sviluppo di codice ben scritto e ben strutturato utilizzando le tecniche di base per lo sviluppo del software.
Capacità di applicare conoscenza e comprensione (applying knowledge and understanding): si intende fornire gli strumenti per conseguire le seguenti abilità pratiche e professionali:
Tradurre in codice idee algoritmiche;
Progettare, descrivere ed implementare programmi in C;
Saper usare gli strumenti per debug di programmi C;
Comprendere ed analizzare codice C di terze parti anche in termini di efficienza;
Orientarsi nella documentazione delle librerie.
Autonomia di giudizio (making judgements): attraverso l'esame di numerosi esempi di codice e una consistente componente pratica che prevede lo svolgimento di esercizi all'elaboratore, il discente sarà in grado di analizzare problemi e progettare e implementare le relative soluzioni software.
Abilità comunicative (communication skills): lo studente acquisirà le necessarie abilità comunicative nell'impiego del linguaggio verbale/tecnico nell'ambito della programmazione degli elaboratori.
Capacità di apprendimento (learning skills): il corso intende fornire al discente le necessarie metodologie teoriche e pratiche da mettere in campo in contesti professionali e, in particolare, la capacità di formulare algoritmi ad-hoc per la risoluzione di nuovi problemi e la possibilità di acquisire facilmente ed in breve tempo un altro linguaggio di programmazione.
DATE D'ESAME
Tutte le date di esame sono pubblicate nel sito www.dmi.unict.it
PROVE IN ITINERE
Sono previste prove in itinere. Il superamento di tutte le prove in itinere equivale al superamento della prova teorica (1).
PROVE DI FINE CORSO
1. Prova teorica. Si tratta di un test a risposta multipla composto da 20 domande atto a verificare la comprensione degli elementi di base della programmazione e delle principali caratteristiche del linguaggio C. Al test non è assegnato un voto in trentesimi. Il compito riceverà esito “ammesso” al raggiungimento di 15 risposte corrette o “non ammesso” altrimenti.
2. Prova pratica di laboratorio. Si tratta di un piccolo progetto da svolgere in aula al calcolatore. La prova è giudicata insufficiente se il codice prodotto presenta errori di compilazione, runtime o se non produce un output compatibile con le consegne del compito. Verrà assegnato un voto in trentesimi al compito.
3. Prova orale: una discussione sulla prova svolta al calcolatore, domande sugli argomenti teorici inseriti nel programma. La prova permette di incrementare o decrementare il voto ottenuto alla prova 2) (di norma al massimo 3 punti). Qualora la prova 3) mettesse in luce evidenti lacune, lo studente può essere rimandato, con l’obbligo di ripetere le tre prove.
La verifica dell’apprendimento potrà essere effettuata anche per via telematica, qualora le condizioni lo dovessero richiedere
Lezioni frontali ed esposizione di schemi ed algoritmi.
Frequenza e superamento del test finale dei corsi zero di informatica.
La frequenza delle lezioni non è obbligatoria ma è fortemente consigliata.
Introduzione alla programmazione
Problemi; Algoritmi; Diagrammi di flusso.
Tipi di informazione e loro rappresentazione digitale: booleani, interi, float, stringhe, dati multimediali. Standard IEEE.
Cenni al modello di calcolo di von Neumann: memoria+unità di elaborazione.
Variabili; Espressioni; Assegnazioni.
Linguaggi di programmazione: macchina, assembly e di alto livello.
Problema della traduzione: compilazione ed interpretazione.
Notazione lineare strutturata. Teorema di Böhm-Jacopini.
Il linguaggio C
Installazione del compilatore;
Primo programma: Editing, Compiling, Running, Debugging.
Costrutti del linguaggio.
Tipi di dato; Operatori predefiniti; Conversioni di tipo.
Gestione dell’I/O di base: stdin, stdout, stderr.
Esecuzione dei comandi come valutazione di espressioni.
Controllo del flusso:
if-then-else;
switch;
while;
do-while;
for;
break, continue;
Primi esempi di funzioni su dati atomici, funzioni produttive e non produttive,
scope delle variabili.
Gestione esplicita della memoria: motivazioni, tecniche e funzioni di base.
Puntatori: motivazioni e gestione. Operatori di indirizzo e di dereferenziazione.
Aritmetica dei puntatori. Puntatori e array. Puntatori come parametro di funzione. Allocazione dinamica della memoria. Il modificatore const.
Gli array in C: introduzione e esercizi su creazione, gestione, accesso, modifica, e controllo degli elementi di un array. Array multidimensionali.
Le stringhe in C: introduzione e esercizi su creazione, gestione, accesso, modifica, e controllo degli elementi di una stringa.
Generazione di numeri pseudo-casuali in C.
Le funzioni su dati non atomici e modalità di passaggio dei parametri ad una funzione. Funzioni inline. Gestione delle chiamate mediante stack delle attivazioni. Composizione di funzioni.
La ricorsione: per esempi; Record di attivazione; Stack della ricorsione.
I Record (struct), le union e le enum.
Argomenti alla funzione main.
I File
Funzioni sui file: fopen, fclose, fseek, ftell, fread, fwrite
Prime strutture dati
Implementazione di un insieme tramite array ordinato e array non ordinato.
Pile e code. Descrizione formale e implementazioni.
Liste concatenate: semplici, doppie. Descrizione formale e implementazioni.
Algoritmi di ordinamento e ricerca
(definizione formale e esempi di implementazioni con array e liste)
Selection Sort, Insertion sort e Bubble Sort
Ricerca sequenziale e ricerca dicotomica
Il linguaggio C Fondamenti e tecniche di programmazione • 9/Ed. Paul J. Deitel - Harvey M. Deitel. ISBN: 9788891906236
Autore | Titolo | Editore | Anno | ISBN |
---|---|---|---|---|
Paul J. Deitel - Harvey M. Deitel | Il linguaggio C Fondamenti e tecniche di programmazione | Pearson | 2022 | 9788891906236 |
Argomenti | Riferimenti testi | |
---|---|---|
1 | Introduzione alla programmazione | libro di testo, eventuale materiale fornito dal docente |
2 | Il linguaggio C | libro di testo, eventuale materiale fornito dal docente |
3 | Costrutti del linguaggio C | libro di testo, eventuale materiale fornito dal docente |
4 | Gestione dei file in C | libro di testo, eventuale materiale fornito dal docente |
5 | Prime strutture dati | libro di testo, eventuale materiale fornito dal docente |
6 | Algoritmi di ordinamento e di ricerca | libro di testo, eventuale materiale fornito dal docente |
L’esame consiste nella verifica degli obiettivi preposti per il corso e cioè:
la capacità di descrivere ed implementare semplici procedimenti algoritmici.
la conoscenza del linguaggio di programmazione C
la capacità di progettare e scrivere in codice programmi in maniera efficiente
A tal fine l’esame è composto da tre prove atte a verificare i precedenti punti e si intenderà superato quando tutte e tre le prove saranno valutate sufficientemente:
Prova teorica: un test a risposta multipla atto a verificare la comprensione degli elementi di base della programmazione e delle principali caratteristiche del linguaggio C. Tale test si dovrà svolgere con strumenti informatici in modo da dare immediato feedback allo studente e permettergli di accedere alla prova pratica di laboratorio.
Prova pratica di laboratorio: una serie di esercizi o un piccolo progetto che lo studente dovrà svolgere in autonomia sul calcolatore in aula.
Orale: una discussione sulla prova svolta al calcolatore, domande sugli argomenti teorici inseriti nel programma.
Le prove 1), 2) e 3) sono sequenziali, pertanto, possono accedere alla prova 2) tutti coloro che abbiano superato la prova 1), e possono accedere alla prova 3) tutti coloro che abbiano superato la prova 2). Le tre prove possono essere superate in appelli o sessioni differenti; la sufficienza conseguita nelle prove 1) e 2) sarà considerata valida per tutto l’A.A. (fino al mese di dicembre successivo alla erogazione del corso). Il non superamento della prova 2) comporta la ripetizione della prova 1). Non viene assegnato alcun voto alla prova 1), mentre alla prova 2) viene assegnato un voto in trentesimi. La prova 3) permette di incrementare o decrementare il voto ottenuto alla prova 2) (di norma al massimo 3 punti). Qualora la prova 3) mettesse in luce evidenti lacune, lo studente può essere rimandato, con l’obbligo di ripetere le tre prove. Le prove 1) e 2) si terranno nelle date ufficiali degli appelli, mentre la prova 3) si tiene in una data successiva a quella dell’appello ufficiale.
La votazione è espressa in trentesimi secondo il seguente schema:
Voto 29-30 e lode
Lo studente ha una conoscenza approfondita dei concetti fondamentali e delle principali tecniche di programmazione. Riesce prontamente ad analizzare i problemi di programmazione, individuando gli algoritmi e le tecniche di programmazione più idonee alla risoluzione del problema considerato in maniera autonoma e con spirito critico. Ha ottime capacità comunicative e proprietà di linguaggio.
Voto 26-28
Lo studente ha una buona conoscenza dei concetti fondamentali e delle principali tecniche di programmazione. Riesce ad analizzare i problemi di programmazione, individuando degli algoritmi e tecniche di programmazione idonee alla risoluzione del problema considerato. Ha buone capacità comunicative e proprietà di linguaggio.
Voto 22-25
Lo studente ha una discreta conoscenza dei concetti fondamentali e delle principali tecniche di programmazione. Riesce ad analizzare i problemi di programmazione, seppure non sempre in maniera esaustiva, individuando degli algoritmi e tecniche di programmazione idonee alla risoluzione del problema considerato. Ha discrete capacità comunicative e proprietà di linguaggio.
Voto 18-21
Lo studente ha la minima conoscenza dei concetti fondamentali e delle principali tecniche di programmazione. Ha una modesta capacità di analizzare i problemi di programmazione e di individuare degli algoritmi e tecniche di programmazione idonee alla risoluzione del problema considerato. Ha sufficienti capacità comunicative, seppure non sempre una appropriata proprietà di linguaggio.
Esame non superato
Lo studente non possiede la conoscenza minima richiesta dei contenuti principali dell’insegnamento. La capacità di utilizzare il linguaggio specifico è scarsissima o nulla e non è in grado di applicare autonomamente le conoscenze acquisite.
Esempi di domande per la prova orale:
Gestione della memoria in C (tipi di memoria e costrutti per accedervi). Tipi di allocazione
Tipi di dato: a cosa servono, differenze tra i tipi, memoria occupata. Conversioni di tipo
Variabili e loro visibilità. Costanti. Direttiva #define.
Gestione dell'input/output in C.
Gestione dei file in C.
Programmazione strutturata, principali strutture di controllo e loro usi.
Utilità e definizione degli array. Considerazioni sulla rappresentazione degli array in memoria. Indicizzazione di array. Relazione con i puntatori.
Utilità e definizione dei puntatori. Sintassi e principali vantaggi rispetto alle variabili non puntatore. Usi di puntatori per il passaggio di parametri a funzione per riferimento.
Stringhe: definizione e loro utilità. Principali operazioni su stringhe.