Il corso si propone di far acquisire agli studenti una conoscenza di base dei principi dell'informatica. Al termine del corso, gli studenti saranno in grado di comprendere il funzionamento di un calcolatore elettronico e delle componenti hardware e software che costituiscono i sistemi informatici. Gli studenti saranno anche in grado di formulare soluzioni a semplici problemi computazionali tramite la progettazione di algoritmi e strutture dati e avranno inoltre acquisito la capacità di realizzare programmi applicativi scritti nel linguaggio di programmazione Python.
Prerequisiti
NESSUNO
Metodi didattici
Lezioni (ore/anno in aula): 82 Esercitazioni (ore/anno in aula): 0 Attività pratiche (ore/anno in laboratorio): 25
Verifica Apprendimento
L'esame si svolge in laboratorio ed è suddiviso in due sezioni, una per ciascuna parte del corso. Le sezioni sono tra loro indipendenti e ciascuna comprende domande ed esercizi sugli argomenti del corso oltre ad esercizi di programmazione.
Testi
J. Glenn Brookshear, Dennis Brylow. Informatica. Una panoramica generale. 13 Edizione. PEARSON. Allen B. Downey. Think Python: How to Think Like a Computer Scientist. O'Reilly. https://allendowney.github.io/ThinkPython/ Bradley N. Miller, David L. Ranum. Problem Solving With Algorithims and Data Structures Using Python. Franklin Beedle & Assoc. https://runestone.academy/runestone/books/published/pythonds/index.html
Contenuti
Il corso si divide in due parti: la prima parte presenta una introduzione all'informatica e alla programmazione procedurale, mentre la seconda approfondisce i temi della programmazione orientata agli oggetti, degli algoritmi e delle principali strutture dati utilizzate in Python. Più precisamente, la prima parte include i seguenti argomenti: - architettura dei calcolatori: dispositivi di memorizzazione e dispositivi di input/output; - rappresentazione dell'informazione: rappresentazione di numeri interi e frazionari, rappresentazione di numeri negativi; rappresentazioni in virgola fissa e mobile. Codifica dell'informazione testuale e multimediale. - architettura degli elaboratori: architettura di Von Neumann; linguaggio macchina; ciclo di esecuzione delle istruzioni; - architetture dei Sistemi Operativi: le componenti principali di un sistema operativo, il concetto di processo, multiprogrammazione e multitasking dei sistemi operativi e l’amministrazione dei processi; la fase di avvio di un sistema operativo; - reti di calcolatori ed Internet: gli elementi fondamentali delle reti, i protocolli e l’unione di più reti, la comunicazione tra processi, cenni sul World Wide Web e la sicurezza delle comunicazioni; - sistemi di basi di dati: il modello relazionale e le operazioni sulle relazioni; - algoritmi: il concetto di algoritmo e la sua rappresentazione, le strutture iterative e ricorsive; - programmi e linguaggi di programmazione: sintassi e semantica dei linguaggi; compilatori ed interpreti. - il linguaggio di programmazione Python: variabili ed espressioni; strutture di controllo; libreria standard; - tipi di dato composto: stringhe, liste, tuple, dizionari ed insiemi. La seconda parte del corso tratta i seguenti argomenti: - programmazione procedurale: definizione di funzioni; passaggio di parametri; - programmazione orientata agli oggetti: classi ed oggetti; attributi e metodi; ereditarietà e polimorfismo; - tecniche avanzate di programmazione: eccezioni, iteratori; - algoritmi: analisi della loro correttezza e complessità; - algoritmi ricorsivi e programmazione dinamica; - algoritmi di ricerca: ricerca lineare e binaria; hash tables; - algoritmi di ordinamento: algoritmi elementari; algoritmi ricorsivi; stabilità degli algoritmi; - strutture dati lineari: liste, stack e code; - le principali librerie in Python: tipo di dato complesso (array e data frame) e operazione algebriche sui dati; - la gestione dell’informazione tramite data frame: ricerca, estrazione e manipolazione; - strumenti grafici per la visualizzazione dell’informazioni: tipi di grafici per la visualizzazione di dati tecnico/scientifici.