FONDAMENTI DI INFORMATICA F - O

Anno accademico 2022/2023 - Docente: SIMONE PALAZZO

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, esercitazioni.

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

Nessuno

Frequenza lezioni

E' fortemente consigliata la partecipazione delle lezioni.

Contenuti del corso

Introduzione: Algoritmi e Programmi

Elaborazione automatica dell'informazione. Algoritmi e programmi. Un linguaggio di programmazione. Il progetto di un programma. La programmazione strutturata. Diagrammi di flusso e pseudocodice.

Rappresentazione dell'informazione

Sistemi di codifica. Sistemi di numerazione e algoritmi di conversione. Aritmetica intera e in virgola mobile. Rappresentazione di dati multimediali.

Architettura di un sistema di elaborazione

La struttura di un elaboratore: memoria centrale, unità centrale, funzionamento elementare dell'elaboratore (ciclo macchina). Dispositivi periferici e memorie di massa. Classificazione dei sistemi di elaborazione.

Reti di Calcolatori e Internet
Generalità sulle reti di calcolatori. Reti locali. Reti geografiche. I protocolli di rete. Cenni su Internet e sulle più diffuse applicazioni di rete.

Software di base e Sistemi Operativi

Traduzione ed esecuzione di programmi. Ambiente di Programmazione. Compilatori vs. interpreti. Architettura e funzionalità del Sistema Operativo. Gestione dei processi. Gestione della memoria. Gestione del file system.

Il linguaggio di programmazione C: sintassi e semantica

Istruzioni di 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.

Algoritmi di ordinamento e ricerca

Ricerca sequenziale e binaria. Algoritmi di ordinamento.

Allocazione dinamica

Strutture dati dinamiche. Allocazione dinamica della memoria.

Testi di riferimento

  1. Fondamenti di Informatica per Ingegneria Industriale, a cura di: Daniela Giordano, Salvatore Cavalieri e Concetto Spampinato. McGraw-Hill.

  2. Linguaggio C - 5a ed. - Guida alla programmazione con elementi di Objective-C, a cura di Bellini, Guidi.

Programmazione del corso

 ArgomentiRiferimenti testi
1Codifica dell'informazione
2Introduzione al C
3Variabili
4Algoritmi
5Operatori ed espressioni
6Casting ed istruzioni condizionali
7Linguaggi di programmazione
8Computabilità e algebra di Boole
9Switch
10CPU e memorie
11Istruzioni iterative
12Sistemi operativi
13Array
14Matrici e stringhe
15Reti di calcolatori
16Struct
17Puntatori
18Vettori e puntatori; puntatori a vettori e a struct
19Funzioni; passaggio di parametri per valore
20Passaggio di parametri per indirizzo
21Allocazione dinamica
22Ricorsione e file

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
  • Prova orale: discussione della prova pratica, esercizio di conversioni di base, domande di teoria

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 scritta 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

La prova potrà includere esercizi opzionali riguardanti:

  • Allocazione dinamica
  • Lettura e scrittura su file
  • Ricorsione
  • Ordinamento

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?
ENGLISH VERSION