Fondamenti di informatica (10CFU - Ingegneria Elettronica)

Docente: Leonardo Querzoni

Orario:

Mar. e Gio. ore 10:15-11:45 aula 52 (via del Castro Laurenziano)
Mer. ore 10:15-13:30 aula 15 (Laboratorio Didattico, Via Tiburtina 205)
Ricevimento studenti su appuntamento.

Avvisi

ATTENZIONE: dato l'esiguo numero di studenti che devono superare l'esame, i prossimi appelli verranno aperti solo su richiesta degli stessi. Pertanto, gli studenti interessati sono invitati a contattare il docente via e-mail o telefono.

Tutti gli studenti che non hanno fatto il passaggio all'ordinamento DM270, possono fare riferimento a me come docente per il corso di Fondamenti di Informatica. Il corso è spento ma verranno regolarmente indetti gli appelli fino ad esaurimento degli studenti.

4/6/2009 - Per esercitarsi sulla programmazione in C in vista degli esami è possibile fare riferimento sia agli esercizi proposti dal testo Deitel & Deitel alla fine di ogni capitolo, sia agli esercizi proposti agli appelli dello scorso anno dal precedente docente (Fabiano Sarracco). Tali esercizi, completi di soluzioni sono disponibili su questa pagina. ATTENZIONE ! Alcuni di questi esercizi sono proposti con una modalità leggermente diversa da quella con cui vi sono state proposte le esercitazioni di quest'anno!

Appelli

16/6/2009 - Testo, Soluzioni.
14/7/2009 - Testo, Soluzioni.
11/9/2009 9:30 - Testo, Soluzioni.
20/11/2009 16:00 - Testo, Soluzioni.
13/1/2010 15:00 - Testo, Soluzioni.
10/2/2010 15:00 - Testo, Soluzioni.
23/4/2010 15:45 - Testo, Soluzioni.
12/7/2010 10:15 - Testo, Soluzioni.
13/9/2010 10:15 - Testo, Soluzioni.
14/2/2011 9:30.
4/3/2011 10:15 - Laboratorio Didattico di Via Tiburtina 205, aula 16.
6/5/2011 14:00 - Laboratorio Didattico di Via Tiburtina 205, aula 15.
13/6/2011 10:15 - Laboratorio Didattico di Via Tiburtina 205, aula 16.
15/7/2011 10:15 - Laboratorio Didattico di Via Tiburtina 205, aula 15.
13/9/2011 14:30 - Laboratorio Didattico di Via Tiburtina 205, aula 15.
8/11/2011 14:30 - Laboratorio Didattico di Via Tiburtina 205, aula 15.
13/1/2012 9:30 - Laboratorio Didattico di Via Tiburtina 205, aula 15.
23/2/2012 10:00 - Laboratorio Didattico di Via Tiburtina 205, aula 15.
18/4/2012 8:30 - Laboratorio Didattico di Via Tiburtina 205, aula 15.
15/6/2012 15:00 - Laboratorio Didattico di Via Tiburtina 205, aula 15.
6/7/2012 9:30 - Laboratorio Didattico di Via Tiburtina 205, aula 15.
25/9/2012 9:30 - Laboratorio Didattico di Via Tiburtina 205, aula 15.
7/11/2012 9:30 - Laboratorio Didattico di Via Tiburtina 205, aula 15.
25/1/2013 10:30 - Via Ariosto 25, stanza B208. Prenotazioni su Infostud.
Futuri appelli verranno aperti solo su richiesta. Gli studenti interessati sono pregati di contattare via e-mail il docente con sufficiente anticipo rispetto alle date di inizio delle sessioni d'esame.

Programma del corso:

Conoscenze generali di informatica.
Introduzione all'informatica. Concetto di algoritmo, origini del calcolatore, storia dei calcolatori elettronici, legge di Moore.
La rappresentazione dell'informazione. Codifica dei numeri interi, sistema di numerazione posizionale, rappresentazione in base p, conversione fra basi, notazione modulo e segno, complemento a due, somma e sottrazione in complemento a due. Rappresentazione a virgola fissa. Codifica dei numeri reali in virgola mobile, Standard IEEE.754, limitazioni della rappresentazione dei numeri reali, somma e differenza in virgola mobile, codifica dei caratteri, ASCII, algebra di Boole, espressioni booleane.
L'architettura di von Neumann. L'architettura di von Neumann (generalizzata), la memoria centrale (MM), l'unità di elaborazione (CPU), il bus di sistema, codifica delle istruzioni, il ciclo Fetch-Decode-Execute, rappresentazione di un programma in forma binaria.
Sistemi Operativi. Origini dei sistemi operativi, struttura a strati di un sistema operativo, funzioni del sistema operativo, gestione dei processi, definizione di processo, stati di un processo, context switch, interruzioni interne, interruzioni esterne, esecuzione in modo S e modo U, politiche di esecuzione dei processi, sincronizzazione fra processi. Gestione della memoria centrale, rilocazione statica e dinamica, processo di compilazione ed esecuzione del codice, linker e loader, paginazione, segmentazione, memoria virtuale, accesso in memoria modo S e modo U, driver hardware e software, memorie di massa, nastri, dischi magnetici, dischi ottici, memorie flash, il file system, struttura ad albero, organizzazione dei file.
Algoritmi. Analisi dell'efficienza di algoritmi, complessità computazionale, modello di macchina, modello di costo, complessità asintotica, notazione O, Ω e Θ, algoritmi di ricerca sequenziale e binaria. Algoritmi di ordinamento: bubble-sort, selection-sort, merge-sort.
Sistemi distribuiti e reti di calcolatori. Mezzi di trasmissione dati, modulazione, topologie delle reti di calcolatori, scambio di messaggi fra calcolatori, lo stack ISO-OSI, ethernet. I protocolli di Internet, TCP/IP, paradigma client-server, telnet e ftp, il protocollo HTTP, la posta elettronica, i socket.
Programmazione in linguaggio C.
Linguaggi di programmazione ad alto livello. Algoritmo, pseudocodice, la macchina astratta del (nucleo del) C, variabili, identificatori simbolici, parole chiave, standard input e standard output, esecuzione di programmi C su macchine reali, compilazione, ambiente IDE Dev-CPP.
Struttura sintattica di un programma C. Istruzione di assegnamento, istruzioni di ingresso/uscita, istruzioni composte, condizioni, strutture iterative (while, do...while, for). Parte dichiarativa, dichiarazione di variabili, dichiarazione di costanti, direttive del preprocessore, istruzioni printf e scanf con relative specifiche di conversione.
Tipo di dato. Tipi semplici predefiniti del C, tipo int, tipi float e double, tipo char, valutazione delle espressioni booleane. Tipi di dato strutturati (struct, union), array di variabili, stringhe, comando typedef per la ridefinizione di tipo, tipi enumerati (enum), costanti, puntatori, aritmetica dei puntatori, operatori aritmetici, operatori logici, operatori di incremento/decremento.
Funzioni. Il concetto di sottoprogramma, definizione delle funzioni, parametri formali, passaggio di parametri per valore e per riferimento, i blocchi, visibilità (scope) degli identificatori, ciclo di vita delle variabili, passaggio di parametri di tipo struct e array, le variabili statiche.
La Ricorsione. Programmazione ricorsiva, formulazione in termini ricorsivi di problemi ed algoritmi, esecuzione di sottoprogrammi ricorsivi, attivazione di funzioni, record di attivazione, la gestione a stack della memoria.
Strutture dati dinamiche. allocazione e cancellazione della memoria: malloc, calloc e free, stack e heap, rischi della gestione dinamica della memoria, tipi di dati dinamici, struttura dati lista, dichiarazione lista dinamica, operazioni su liste, pile, code, alberi binari.
Gestione dei File in C. Apertura di un file in C, tabella dei file aperti, lettura e scrittura formattata su file (fprintf,fscanf), lettura e scrittura di caratteri e righe su file, chiusura di un file, gestione degli errori e fine file, lettura e scrittura di dati binari su file (fread,fwrite), accesso diretto a file.

Modalità d'esame:

L'esame si svolgerà con una prova al calcolatore, in cui lo studente dovrà:

  1. svolgere 3 esercizi di programmazione in C, di tipologia simile a quelli affrontati durante le esercitazioni (max. 15 punti);
  2. rispondere a domande di tipo vero/falso su tutto il programma d'esame (max. 15 punti).

L'esame non prevede una prova orale, ma solo una discussione del compito. Durante la discussione i docenti si riservano la possibilità di approfondire eventuali punti non chiari del compito eventualmente rivolgendo allo studente ulteriori domande.

Note:

  • Lo studente ha facoltà di rifiutare il voto ottenuto e ripetere la prova.
  • Lo studente deve presentarsi sempre munito di un documento di riconoscimento valido, pena l'impossibilità di sostenere la prova o verbalizzare il voto.
Testo e materiale del corso:

Testo ufficiale del corso:
    S. Ceri, D. Mandrioli, L. Sbattella
    Informatica: arte e mestiere
    Ed. McGraw-Hill

Testi complementari:
    H. M. Deitel, P. J. Deitel
    C - Corso completo di programmazione
    Ed. Apogeo

Materiale supplementare:
    1 - Evoluzione dei sistemi di elaborazione
    2 - Codifica di informazioni numeriche

Materiale esercitazioni:
    - Per esercitarsi a casa potete scaricare ed installare il programma DevC++ (per Windows)

    - Esercitazione 1 (18/3/09): Testo, Soluzioni (1 2 3 4 5 6 Supp.)
    - Esercitazione 2 (25/3/09): Testo, Soluzioni (1a 1b 2 3a 3b 4 5)
    - Esercitazione 3 (8/4/09): Testo, Soluzioni (1a 1b 3a 3b 4a 4b 5 Supp.)
    - Esercitazione 4-5 (22-29/4/09): Testo, Soluzioni (1 2)
    - Esercitazione 6 (6/5/09): Testo, Soluzioni (1 2 3 4)
    - Esercitazione 7 (13/5/09): Testo, Soluzioni (1 2)
    - Esercitazione 8 (20/5/09): Testo, Soluzioni (1 2 3)
    - Prova simulata di esame (27/5/09): Testo, Soluzioni