Nuova ricerca

Costantino GRANA

Professore Ordinario
Dipartimento di Ingegneria "Enzo Ferrari"

Insegnamento: Fondamenti di Informatica

Ingegneria Informatica (MO) (Offerta formativa 2023)

Obiettivi formativi

Imparare a formalizzare e risolvere problemi concreti e a descriverli in modo comprensibile ad un calcolatore elettronico. Apprendere le basi del linguaggio di programmazione C.

Prerequisiti

Nessuno

Programma del corso

Introduzione e rappresentazione dell'informazione (1 CFU)
-------------------------------------------------
La rappresentazione dell'informazione: sistema posizionale, base 2, numeri interi e frazionari.
Le basi 8 e 16, somma e sottrazione di numeri binari, rappresentazioni dei numeri negativi, overflow e underflow.
Standard IEEE 754, rappresentazione del testo, UNICODE.

Architettura, linguaggio macchina e assembly (1 CFU)
--------------------------------------------
Architettura di un elaboratore: macchina di Von Neumann, il processore didattico ADE8.
Il concetto di variabile, gestire più dati, il concetto di vettore, indirizzamento di dati.

Costrutti elementari del C (3 CFU)
--------------------------
Dall'assembly al C: struttura del programma C, il concetto di tipo di dato, i tipi interi e in virgola mobile, definizione di variabili, identificatori, inizializzazione, variabili di sola lettura.
Le funzioni, la funzione main, l'assegnamento.
Associatività a sinistra e a destra, tipi delle espressioni.
Il goto e le label, l'istruzione if.
Programmazione di alto livello. I costrutti do-while e for.
I puntatori. L'allocazione di memoria: malloc, free e realloc.

Costrutti più avanzati e utilizzo di più file sorgenti (2 CFU)
------------------------------------------------------
Allocare più di un dato: gli array. Accedere agli elementi di un array con i puntatori e l'operatore parentesi quadre.
Il preprocessore del C.
Le strutture in C: direttiva struct. Definire strutture e definire variabili di tipo struttura. Accesso ai membri di una struttura e passaggio di una struttura ad una funzione.
Definire nuovi tipi: la direttiva typedef.

Programmazione utilizzando librerie e I/O (2 CFU)
-----------------------------------------
La libreria standard. Accenno agli header math.h e string.h. Il concetto di file come astrazione dell'hardware sottostante. La libreria stdio.h.

Metodi didattici

Lezione in aula e programmazione al calcolatore in laboratorio.

Testi di riferimento

Tullio Facchinetti, Cristiana Larizza, Alessandro Rubini
Programmare in C
Maggioli Editore

Costantino Grana, Marco Manfredi
Esercizi di Programmazione in Linguaggio C: 80 problemi e soluzioni commentate

Verifica dell'apprendimento

Per ogni appello sono previste due prove: prova di teoria e prova di programmazione.
La prova di teoria dura 1 ora e consiste in un test a crocette. Non si può utilizzare alcun materiale didattico, né la calcolatrice. Ci sono 20 domande, ognuna con 4 possibili risposte delle quali una sola corretta. Ogni risposta corretta dà 1,65 punti, ogni risposta errata toglie 0,55 punti. Le risposte non date non modificano il punteggio. Il voto viene calcolato arrotondando all’intero più vicino, con 0,5 per eccesso.
Se il test si svolge in presenza, le risposte devono obbligatoriamente essere caricate sul sito Internet
indicato sulla prova entro il termine specificato durante l’esame. Se il test è svolto online, le risposte vengono automaticamente acquisite dal sistema e non serve fare altro.
La prova di programmazione dura 2 ore. È consentito portare con sé e utilizzare un solo libro di testo (no libro di esercizi, no fotocopie, no appunti, no fogli sfusi, no fogli rilegati da spirali o altro). Le reference fornite a lezione saranno sul sito dell'esame. Non sarà consentito alcun accesso a siti Internet. Ogni tentativo di accedere al sistema di sottomissione durante l'orario delle prove dall'esterno, verrà considerato un tentativo di copia e come tale sanzionato.
Iscrivetevi alla prova di teoria e a quella di programmazione se intendete sostenere una o entrambe le prove. Non aspettate di sapere il risultato dello prova di teoria prima di iscrivervi a quella di programmazione. Le scadenze per iscriversi sono tassative, quindi se non siete iscritti alla prova, non la potete sostenere. Non ci sono eccezioni per nessuna ragione. Questo significa che se il giorno dell'esame non siete nella lista, non sarete aggiunti. Verificate bene di esservi iscritti all'esame giusto e alla prova corretta.
Presentatevi circa 15 minuti prima dell'inizio della prova con il tesserino universitario. Dopo l'inizio della prova, non sarà più possibile accedere. Chi non avrà con sé il tesserino universitario non sosterrà la prova. Non è possibile uscire dall'aula (quando in presenza) prima del termine della prova per alcuna ragione,
neppure se si è terminato il compito in anticipo.
In caso di prove a distanza bisogna collegarsi al sistema di videoconferenza con un cellulare posizionato orizzontalmente (attivate la rotazione) e lateralmente in modo che inquadri la postazione di lavoro (tastiera, mani, busto e lo schermo). Non è importante che si veda bene il contenuto dello schermo, perché quello deve essere condiviso con il sistema di condivisione schermo del sito https://olj.ing.unimore.it
Entrambe le prove vengono valutate con un punteggio massimo di 33. La sufficienza, come da standard universitari, si raggiunge con un voto maggiore o uguale a 18.
L’esame scritto deve essere superato (voto >=18) per poter accedere alla prova di programmazione.
Il voto finale sarà la media pesata (arrotondata all’intero più vicino, 0,5 per eccesso) dei voti delle due prove, dove lo scritto pesa 1 e il laboratorio pesa 2. La lode si ottiene se il voto finale dopo l’arrotondamento è 31 o più.
La prova scritta, una volta superata rimane valida fino all’inizio del nuovo corso a Settembre dell’anno successivo all’inizio del corso. Pertanto chi supera la prova scritta al primo appello, può sostenere il laboratorio molte volte. Chi supera la prova scritta all’ultimo appello (quello di Settembre) ha una sola possibilità per sostenere il laboratorio.

Risultati attesi

Conoscenza e capacità di comprensione
-------------------------------------
Tramite le lezioni in aula lo studente apprende i fondamenti dell'informatica e in particolare della programmazione imperativa e sequenziale e acquisisce la capacità di comprendere programmi scritti in linguaggio C.

Capacità di applicare conoscenza e comprensione
-----------------------------------------------
Tramite le esercitazioni pratiche al computer, lo studente è in grado di definire algoritmi sequenziali e di sviluppare e verificare programmi utilizzando il linguaggio di programmazione C.

Autonomia di giudizio
---------------------
Tramite la prova a quiz lo studente impara ad analizzare rapidamente una parte di programma informatico valutando quello che effettivamente serve per far funzionare un algoritmo. La prova di laboratorio lascia completa libertà di scegliere la soluzione che più si ritiene idonea per rispondere ai requisiti dei problemi proposti, consentendo di maturare una autonomia di scelta della soluzione più opportuna.

Abilità comunicative
--------------------
Il corso e le verifiche a quiz richiedono di sviluppare una notevole attenzione al rigore nel linguaggio nel riferirsi a specifici elementi dei programmi.

Capacità di apprendimento
-------------------------
Le attività descritte consentono allo studente di acquisire gli strumenti metodologici per proseguire gli studi e per potere provvedere autonomamente al proprio aggiornamento.