Il corso si propone di far acquisire agli studenti una conoscenza di base dei principi dell'informatica. 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. Al termine del corso, avranno inoltre acquisito la capacità di realizzare programmi applicativi scritti nel linguaggio di programmazione Python.
Metodi didattici
Lezioni (ore/anno in aula): 82 Esercitazioni (ore/anno in aula): 0 Attività pratiche (ore/anno in laboratorio): 24
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
Allen B. Downey. Think Python: How to Think Like a Computer Scientist. O'Reilly. https://greenteapress.com/thinkpython/thinkpython.html
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 rappresenta introduzione all'informatica e alla programmazione procedurale, mentre la seconda approfondisce i temi della programmazione orientata agli oggetti, degli algoritmi e delle strutture dati.
Più precisamente, la prima parte include i seguenti argomenti: - 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; dispositivi di memorizzazione e dispositivi di input/output. - 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. - Programmazione procedurale: definizione di funzioni; passaggio di parametri.
La seconda parte del corso tratta i seguenti argomenti: - programmazione orientata agli oggetti: classi ed oggetti; attributi e metodi; ereditarietà e polimorfismo. - Tecniche avanzate di programmazione: eccezioni, iteratori, espressioni generatrici. - Algoritmi: definizione e proprietà; 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. - Alberi: definizioni; rappresentazione di strutture ad albero; alberi di ricerca; heap e code con priorità. - Grafi: definizioni; rappresentazione di strutture a grafo; algoritmi su grafi. - Cenni di teoria della computazione.