Dettagli sull'Insegnamento per l'A.A. 2019/2020
Nome:
Fondamenti Di Informatica / Fundamentals of Informatics
Informazioni
Crediti:
: Laurea in Ingegneria dell'Informazione 9 CFU (b)
Erogazione:
Laurea in Ingegneria dell'Informazione 1st anno curriculum Automatica Compulsory
Laurea in Ingegneria dell'Informazione 1st anno curriculum Telecomunicazioni Compulsory
Laurea in Ingegneria dell'Informazione 1st anno curriculum Elettronica Compulsory
Laurea in Ingegneria dell'Informazione 1st anno curriculum Comune Compulsory
Laurea in Ingegneria dell'Informazione 1st anno curriculum Informatica Compulsory
Lingua:
Italiano
Prerequisiti
Non ci sono prerequisiti informatici obbligatori.
Obiettivi
L’obiettivo principale del corso è prendere confidenza con il "pensiero algoritmico", attraverso un processo di astrazione e modellazione di problemi a cui trovare soluzioni procedurali. Centrale è lo studio e lo sviluppo di algoritmi e il ragionare sulle loro proprietà, tra cui correttezza, efficienza, ottimalità. Il corso quindi si propone di presentare i concetti di base relativi all’elaborazione automatica dell’informazione. Tali concetti sono sia analizzati da un punto di vista teorico che presentati in pratica. Scopo del corso è anche l’apprendimento di un linguaggio di programamazione per la realizzazione degli algoritmi. Il linguaggio utilizzato è il Python.
Sillabo
- 1. Architettura dei sistemi informatici.
Processi e processori. Problemi, algoritmi e programmi. Linguaggi di programmazione. Architettura del calcolatore. Modello di von Neumann. Sistemi numerici posizionali a base fissa. Conversioni di base. Rappresentazione di numeri negativi in modulo e segno e in complemento a due. Rappresentazione di numeri reali in virgola mobile normalizzata. Codice ASCII. Algebra di Boole e principali funzioni logiche. Ambiente di programmazione Dev-C++.
- 2. Elementi di programmazione.
Sviluppo di algoritmi. Concetto di variabile. Operazioni elementari: lettura, scrittura, assegnazione e confronto. Diagrammi di flusso. Pseudo-codice. Struttura di controllo se-allora-altrimenti. Cicli con pre-condizione e post-condizione. Strutture di controllo finché-esegui e esegui-finché. Progettazione di algoritmi con cicli. Controllo sui dati di input. Traduzione in C++. Costrutti base del C++. Struttura di un programma. Parte dichiarazioni e parte istruzioni. Dichiarazione di variabili. Classificazione dei tipi. Tipi semplici, rappresentazione interna e operazioni. Espressioni numeriche e condizionali. Istruzione di assegnazione. Istruzione composta. Selezione binaria. Funzioni standard di ingresso/uscita. Istruzioni cicliche (WHILE, DO-WHILE, FOR). Costruzione di cicli annidati. Selezione n-aria.
- 3. Programmazione con tipi strutturati.
Tipo array: definizione e rappresentazione in memoria. Dichiarazioni di tipo con typedef. Programmi su vettori. Array bidimensionali. Programmi su matrici. Tipo string. Tipo struct. Tipo file. Primitive per la gestione sequenziale dei files.
- 4. Programmazione con funzioni.
Sottoprogrammi. Progettazione top-down. Parametricità. Dichiarazione di funzioni. Variabili globali. Variabili locali. Parametri formali e attuali. Passaggio di parametri per riferimento e per valore. Uso della memoria. Ciclo di vita delle variabili. Visibilità delle variabili. Mascheramento di variabili. Ricorsione.
- 5. Efficienza dei programmi.
La funzione t(n). Modello di costo. Calcolo della t(n) per programmi iterativi. Caso migliore, caso peggiore, e caso medio. Complessità computazionale. Notazione asintotica , , . Delimitazioni alla complessità di un problema. Calcolo della t(n) per programmi ricorsivi. Soluzione dell’equazione di ricorrenza per il fattoriale e per i numeri di Fibonacci.
- 6. Algoritmi fondamentali.
Ricerca sequenziale. Ricerca binaria. Inserimento e cancellazione in un array ordinato. SelectionSort. InsertionSort. Bubblesort. Mergesort. Quicksort: analisi della complessità nel caso migliore e nel caso peggiore.
- 7. Programmazione con puntatori.
Gestione statica e gestione dinamica della memoria. Tipo puntatore. Operazioni con puntatori: assegnazione, new, delete, riferimento, dereferenziazione. Costante null. Uso dei puntatori. Creazione dinamica di array. Similitudine tra array e puntatori. Creazione dinamica di matrici. Strutture collegate in memoria dinamica. Liste collegate con puntatori. Programmi su liste collegate.
Descrittori di Dublino
Alla fine del corso, lo studente dovrebbe
- delle basi di informatica e dei linguaggi di programmazione
- nello sviluppo di semplici programmi in linguaggi imperativi
- di semplici e mediamente complessi programmi
- delle nozioni base di informatica
- in ambienti di programmazione e sistemi informatici più complessi
Testi di riferimento
- E. Clementini, Fondamenti di informatica: Programmazione strutturata in C++ , Carocci Editore. 2006.
Modalità d'esame
Prova scritta e orale.
Aggiornamenti alla pagina del corso
Le informazioni sulle editioni passate di questo corso sono disponibili per i seguenti anni accademici:
Per leggere le informazioni correnti sul corso, se ancora erogato, consulta il catalogo corsi di ateneo.
Ultimo aggiornamento delle informazioni sul corso: 26 ottobre 2018, 10:55