FONDAMENTI DI INFORMATICA M - Z
Anno accademico 2023/2024 - Docente: SALVATORE LONGOBARDIRisultati di apprendimento attesi
Gli obiettivi formativi del corso, declinati secondo i descrittori di Dublino, sono i seguenti:
Conoscenza e comprensione: lo studente conoscerà i fondamenti dell'informatica come scienza che studia gli algoritmi, i principi del funzionamento e l'organizzazione di calcolatori, sistemi informativi e reti di calcolatori, e i fondamenti dei linguaggi di programmazione.
Capacità di applicare conoscenza e comprensione: lo studente sarà in grado di comprendere l'organizzazione e la logica del funzionamento dei moderni sistemi informativi, di sviluppare algoritmi per la soluzione di problemi di media complessità e di codificarli in linguaggio C.
Autonomia di giudizio: lo studente saprà valutare sia l'adeguatezza di strumenti informatici in ambito professionale, che le strutture dati e gli approcci al loro trattamento per la soluzione di problemi di elaborazione dati.
Abilità comunicative: lo studente sarà in grado di dialogare con specialisti informatici sull'organizzazione di un moderno sistema informativo, e descrivere il procedimento risolutivo di problemi di elaborazione di dati.
Capacità di apprendimento: lo studente sarà in grado di apprendere metodologie avanzate e nuovi linguaggi di programmazione, applicando con flessibilità i concetti di base forniti nel corso.
Modalità di svolgimento dell'insegnamento
Lezioni frontali alternate a esercitazioni al calcolatore da parte del docente. Il corso prevede anche esercitazioni pratiche svolte dagli studenti.
Qualora l'insegnamento venisse impartito in modalità mista o a distanza potranno essere introdotte le necessarie variazioni rispetto a quanto dichiarato in precedenza, al fine di rispettare il programma previsto e riportato nel syllabus.
Prerequisiti richiesti
Frequenza lezioni
La frequenza è obbligatoria.
Contenuti del corso
Gli asterischi (*) indicano le competenze minime.
Rappresentazione dell'informazione: Sistemi di numerazione e algoritmi di conversione. Aritmetica intera e in virgola mobile. (*)
Struttura di un elaboratore: La struttura di un elaboratore: memoria centrale, unità centrale, funzionamento elementare dell'elaboratore. (*)
Sistema Operativo: Traduzione ed esecuzione di programmi. Ambiente di Programmazione. Compilatori vs. interpreti. Sistema Operativo. (*)
Algoritmi e Programmi: Elaborazione automatica dell'informazione. Algoritmi e programmi. Linguaggi di programmazione. Progettazione di un programma. (*)
Reti di Calcolatori e Internet: Reti di calcolatori. Reti locali. Reti geografiche. Internet e le più diffuse applicazioni di rete. (*)
Il linguaggio di programmazione "C": Sintassi e semantica. Controllo: Assegnazione. Strutture di controllo. Tipi di dato in C: tipi semplici (int, char, float, double) e strutturati (array e stringhe, strutture). Il tipo puntatore. Le funzioni. Campo d'azione degli identificatori. Dichiarazioni e campo d'azione degli identificatori. Variabili locali, globali e statiche. Tecniche di legame dei parametri. La ricorsione. I file: file di testo e file binari. Primitive di accesso ai file. (*)
Algoritmi di ricerca: Algoritmi di ricerca: ricerca sequenziale e binaria. (*)
Allocazione dinamica della memoria. (*)
Gestione di documenti di testo. (*)
Progettazione e gestione di fogli di calcolo. (*)
Introduzione alla progettazione e gestione di basi di dati. (*)
Testi di riferimento
- A. Bellini, A. Guidi, "Linguaggio C - guida alla programmazione", dalla 4a Ed in poi (vanno bene le edizioni 4a, 5a, 6a), McGraw-Hill
- Dispense del docente.
Programmazione del corso
Argomenti | Riferimenti testi | |
---|---|---|
1 | Rappresentazione dell'Informazione. Sistema numerico binario. Sistema esadecimale, sistema ottale. Conversione tra sistemi numerici. Rappresentazione dei numeri interi, reali. Codice ASCII. | - Dispense del Docente - Libro di testo: Appendice D |
2 | Architettura e funzionamento elementare del calcolatore. Esecuzione delle istruzioni. Interrupt. Algebra di Boole. | - Dispense del Docente - Libro di testo: Capitolo 1 |
3 | Sistema operativo. Politiche di gestione della CPU, della memoria centrale e di massa. | - Dispense del Docente - Libro di testo: Capitolo 2 |
4 | Algoritmi e programmi. Linguaggi di Programmazione.• Traduzione ed esecuzione dei programmi • Linker • Notazione grafica per la rappresentazione degli algoritmi: Diagrammi di flusso. | - Dispense del Docente - Libro di testo: Capitoli 3 e 4 |
5 | Linguaggio C: Tipi di dato. Identificatori. Variabili. Classi di memorizzazione. Costanti. Operatori. Strutture di Controllo.Istruzioni di selezione, iterazione, salto,espressione, blocco. Preprocessore, include, define. | - Dispense del Docente - Libro di testo: Capitoli 5, 6, 7, 8, 9, 23 |
6 | •Array •Puntatori •Puntatori ad array •Stringhe •Strutture •Array di strutture • Lettura e scrittura di caratteri e stringhe •I/O formattato •File di testo • Allocazione dinamica della memoria •Puntatori a strutture | - Dispense del Docente - Libro di testo: Capitoli 10, 13, 14, 16 |
7 | Funzioni •Istruzione return • Passaggio di Parametri •Ricorsione •Variabili locali, regole di visibilità e tempo di vita. | - Dispense del Docente - Libro di testo: Capitoli 11, 15, 17, 19, 20 |
8 | Algoritmi di ricerca | - Dispense del Docente - |
9 | Gestione di documenti di testo. | - Dispense del Docente - |
10 | Fogli di calcolo | - Dispense del Docente - |
11 | Introduzione alle basi di dati. | - Dispense del Docente - |
12 | Esercizi sugli argomenti del corso | - Dispense del Docente - |
Verifica dell'apprendimento
Modalità di verifica dell'apprendimento
L'esame per il superamento del corso consta di due parti:
- Prova pratica al calcolatore: implementazione di un programma in C, fogli di calcolo e base di dati
- Prova orale: discussione della prova pratica, verifica della conoscenza dei contenuti del corso
La verifica dell'apprendimento potrà essere effettuata anche per via telematica, qualora le condizioni lo dovessero richiedere.
Esempi di domande e/o esercizi frequenti
La prova pratica al calcolatore consiste nella realizzazione di un programma in C in grado di gestire dati inseriti dagli utenti o memorizzati su file. Le conoscenze minime richieste per poterla superare con valutazione sufficiente sono le seguenti:
- Definizione e utilizzo di strutture complesse (es. array di strutture che contengono altre strutture o altri array)
- Definizione e utilizzo di funzioni che ricevono parametri (tipi primitivi, strutture e array) per valore o per indirizzo
- Allocazione dinamica
La prova potrà includere esercizi opzionali riguardanti:
- La creazione di una base di dati e l'esecuzione di semplici query
- Progettazione e gestione di fogli di calcolo
Di seguito una lista (non esaustiva) di possibili domande teoriche.
- Convertire da binario a decimale il numero 101101
- Convertire da decimale a binario il numero 58
- Convertire da ottale a decimale il numero 375
- Convertire da esadecimale a decimale il numero 8FD4
- Cosa sono il campionamento e la quantizzazione?
- Quali sono vantaggi e svantaggi delle rappresentazioni digitali e analogiche?
- Quali sono i componenti di un diagramma di flusso?
- Qual è la differenza tra linguaggio macchina, linguaggio assembly e linguaggio di programmazione?
- Quali sono le differenze tra traduttori e interpreti, e i relativi vantaggi e svantaggi?
- Cos'è una macchina di Turing e quale risultato fondamentale dimostra?
- Quali sono gli operatori più comuni nell'algebra di Boole?
- Calcolare la tabella di verità dell'espressione (a AND b) OR (NOT c)
- Quali sono i bus nell'architettura di Von Neumann?
- In cosa consiste il ciclo della CPU?
- Quali sono i registri principali di un processore?
- Come funziona un'architettura a pipeline?
- Quali sono le caratteristiche delle memorie?
- Cosa si intende per gerarchia di memoria?
- Quali sono i principi di località e cosa dimostrano?
- Cos'è una configurazione RAID e quali sono le più note?
- Quali sono i compiti di un sistema operativo?
- In quali stati può trovarsi un processo?
- Come si gestisce il multitasking?
- Cos'è lo swapping e quali sono i suoi vantaggi e svantaggi?
- Cos'è la paginazione?
- A cosa servono i driver e quale problema risolvono?
- Come possiamo classificare le reti di calcolatori?
- Cosa si intende per CSMA/CD?
- Qual è la differenza tra un hub e uno switch?
- Qual è la differenza tra uno switch e un router?
- Di cosa si occupa il protocollo IP e quali vantaggi e svantaggi ha?
- Che struttura hanno gli indirizzi IP?
- Di cosa si occupa il protocollo TCP?
- Che cos'è il DNS e quale problema risolve?
- Qual è la differenza tra crittografia simmetrica e asimmetrica?