Fondamenti di Informatica
Anno accademico 2024/2025 - Docente: ALESSANDRO DI NUOVORisultati di apprendimento attesi
Obiettivi formativi del corso secondo i descrittori di Dublino:
Conoscenza e comprensione: Lo studente acquisirà una solida base di conoscenze sull'informatica come disciplina che analizza algoritmi, principi di funzionamento e organizzazione dei calcolatori, sistemi informativi e reti di computer, nonché le basi dei linguaggi di programmazione e dei fogli di calcolo.
Capacità di applicare conoscenza e comprensione: Lo studente sarà capace di comprendere la struttura e la logica di funzionamento dei moderni sistemi informativi, le metodologie statistiche, al calcolo delle probabilità, di progettare algoritmi per risolvere problemi di media complessità e di implementare questi algoritmi in linguaggio C e/o con fogli di calcolo elettronico.
Autonomia di giudizio: Lo studente svilupperà la capacità di valutare l'idoneità degli strumenti informatici nell'ambito professionale e di scegliere strutture dati e metodologie adeguate per risolvere problemi di elaborazione dati.
Abilità comunicative: Lo studente saprà interfacciarsi con esperti informatici riguardo l'organizzazione di sistemi informativi moderni e sarà in grado di descrivere dettagliatamente le soluzioni adottate per problemi di elaborazione dati.
Capacità di apprendimento: Lo studente avrà le competenze per apprendere metodologie avanzate e nuovi linguaggi di programmazione, applicando con flessibilità i concetti di base acquisiti 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
Contenuti del corso
Competenze minime:
- Rappresentazione dell'informazione: Sistemi di numerazione e algoritmi di conversione. Aritmetica intera e in virgola mobile.
- Struttura di un elaboratore: Struttura di un elaboratore, memoria centrale, unità centrale e 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 e strutture di controllo. Tipi di dato in C: tipi semplici (int, char, float, double) e strutturati (array, 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 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
Materiale didattico
- Slide del docente
- Dispense del docente
- Libri di testo suggeriti per approfondimenti e migliore comprensione
Possibili libri di testo sulla parte teorica:
- Informatica arte e mestiere ( S. Ceri, D. Mandrioli, L. Sbattella - McGrawHill )
- Introduzione ai sistemi informatici ( D. Sciuto, G. Buonanno, L. Mari, 4^ Edizione - McGrawHill )
- Fondamenti di informatica per ingegneri civili, ambientali e gestionali (Massimiliano Salfi, McGraw-Hill )
Possibili libri di testo sul linguaggio C:
- Il linguaggio C. Fondamenti e tecniche di programmazione ( Paul J. Deitel, Harvey M. Deitel )
- Il linguaggio C. Principi di programmazione e manuale di riferimento ( Brian W. Kernighan, Dennis M. Ritchie )
Programmazione del corso
Argomenti | Riferimenti testi | |
---|---|---|
1 | Introduzione all’informatica | dispense docente; testi consigliati |
2 | La rappresentazione delle informazioni | dispense docente; testi consigliati |
3 | Algebra Booleana | dispense docente; testi consigliati |
4 | Architettura dei calcolatori | dispense docente; testi consigliati |
5 | Sistema Operativo e applicativi software | dispense docente; testi consigliati |
6 | Reti di calcolatori ed Internet | dispense docente; testi consigliati |
7 | Algoritmi e strutture dati | dispense docente; testi consigliati |
8 | Il linguaggio di programmazione C/C++ | dispense docente; testi consigliati |
9 | I fogli di calcolo per metodologie statistiche e calcolo delle probabilità. | dispense docente; testi consigliati |
Verifica dell'apprendimento
Modalità di verifica dell'apprendimento
L'esame di profitto include due parti:
- Prova scritta o pratica al calcolatore: domande a risposta multipla/aperta; fogli di calcolo e base di dati, implementazione di un programma in C.
- Prova orale: verifica della prova pratica e 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 consiste nella realizzazione di un programma in grado di gestire dati (inseriti dagli utenti o gia' memorizzati su file). La prova potrà includere inoltre esercizi 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 - scritto a risposta multipla o aperta.
- 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?