FONDAMENTI DI INFORMATICA M - Z

Anno accademico 2023/2024 - Docente: SALVATORE LONGOBARDI

Risultati 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 ne di rispettare il programma previsto e riportato nel syllabus.

Prerequisiti richiesti

Nessuno

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

 ArgomentiRiferimenti testi
1Rappresentazione 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
2Architettura e funzionamento elementare del calcolatore. Esecuzione delle istruzioni. Interrupt. Algebra di Boole.- Dispense del Docente - Libro di testo: Capitolo 1
3Sistema operativo. Politiche di gestione della CPU, della memoria centrale e di massa.- Dispense del Docente - Libro di testo: Capitolo 2
4Algoritmi 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
5Linguaggio 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
7Funzioni •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
8Algoritmi di ricerca - Dispense del Docente - 
9Gestione di documenti di testo.- Dispense del Docente - 
10Fogli di calcolo- Dispense del Docente - 
11Introduzione alle basi di dati.- Dispense del Docente - 
12Esercizi 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?