Fondamenti di Informatica (a.a. 2018-19)

Docente:                 Prof. Eliseo Clementini

Corsi di Laurea:   Ing. Industriale (indirizzi Gestionale, Elettrica, Elettronica)

Anno di corso:       II-III

Prerequisiti:          nessuno

CFU:                      6-9

 

Collegamenti culturali e finalità del corso

Il corso è finalizzato all'acquisizione dei concetti fondamentali dell'informatica, senza trascurare gli aspetti sperimentali della disciplina e la sua applicazione immediata. Si inizia con una descrizione del sistema informatico in generale per poi concentrarsi sulle tecniche di programmazione “ad alto livello” con lo scopo di far maturare negli studenti l’abilità a progettare programmi. Il linguaggio di riferimento sarà il Python, un linguaggio orientato agli oggetti di nuova generazione che facilita l’apprendimento agli studenti neofiti mettendoli in condizione di poter utilizzare da subito il linguaggio di programmazione per risolvere problemi reali di interesse pratico.

 

Programma del corso

  1. Introduzione ai sistemi informatici.

    Processi e processori. Problemi, algoritmi e programmi. Linguaggi di programmazione. Architettura del calcolatore. 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.

  2. Progettazione di algoritmi con diagrammi di flusso.

    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. Controllo sui dati di input.

  3. Linguaggio di programmazione Python.

    Costrutti base del Python. Struttura di un programma. Variabili. Tipi semplici e operazioni. Espressioni numeriche e condizionali. Istruzione di assegnazione. Istruzione composta. Selezione binaria. Funzioni standard di ingresso/uscita. Istruzioni cicliche (WHILE, FOR). Costruzione di cicli annidati. Selezione n-aria.

  4. Programmazione con funzioni. 

    Sottoprogrammi. Progettazione top-down. Parametricità. Dichiarazione di funzioni. Variabili locali. Parametri formali e attuali. Ciclo di vita delle variabili. Visibilità delle variabili. Ricorsione. 

  5. Programmazione con tipi composti.

    Vettori e matrici. Liste. Stringhe. File di testo. Tuple. Dizionari.

  6. Programmazione a oggetti.

    Definizione di classi. Attributi e metodi. Ereditarietà.       

  7. Algoritmi fondamentali. 

    Ricerca sequenziale. Ricerca binaria. Ordinamento insertionsort. Tempo di esecuzione. Complessità computazionale.  

  8. Programmazione funzionale. 

    Funzione Lambda. Map. Filter. Reduce.  

  9. Applicazioni grafiche. 

    Grafica vettoriale con Turtle Graphics. Elaborazione immagini con libreria PIL.

 

Testi consigliati

  1. A. Downey, J. Elkner, C. Meyers. Pensare da informatico: Imparare con Python. Green Tea Press. 2003

  2. K.A. Lambert. Programmazione in Python. Apogeo. 2012

  3. E. Clementini. Fondamenti di Informatica: Programmazione strutturata in C++. Carocci Editore. 2006.

  4. Slides delle lezioni

     

    Modalità di esecuzione dell’esame

Durante il corso è prevista una parte pratica in cui gli studenti devono costruire i propri programmi. Almeno una settimana prima dell’appello bisogna inoltre discutere un progetto svolto su un determinato argomento. Il giorno dell’appello è prevista la prova d’esame composta da test da svolgere sul proprio computer portatile. Bisogna portare una chiavetta USB per la consegna degli elaborati. Gli studenti che superano la prova saranno ammessi all’orale. Il punteggio attribuito è di 5 punti al progetto, 15 punti alla prova scritta, e 10 punti all’orale.