MATEMATICA E INFORMATICAMatematicaAnno accademico 2023/2024
1008048 - INFORMATICA I
Docente: Gianluca CINCOTTI
Risultati di apprendimento attesi
Descrizione generale sintetica
Il corso presenta i fondamenti di programmazione degli elaboratori adottando Python come linguaggio di riferimento.
Sono presentati i concetti base della programmazione imperativa senza tralasciare l'impiego di librerie specifiche per il calcolo scientifico. In particolare il discente è condotto verso l'acquisizione degli strumenti concettuali classici della programmazione strutturata mediante la descrizione e l'utilizzo delle strutture predefinite per l'elaborazione dei dati, la codifica di algoritmi notevoli e l'impiego della tecnica della ricorsione. Durante tutto il corso si farà uso di un ambiente di sviluppo professionale per il linguaggio Python.
Obiettivi formativi generali dell'insegnamento in termini di risultati di apprendimento attesi
- Conoscenza e capacità di comprensione (knowledge and understanding): l'obiettivo primario del corso è individuato nell’acquisizione da parte degli studenti della “filosofia” della programmazione strutturata, oltre che nella conoscenza dettagliata della sintassi e della semantica del linguaggio di programmazione Python.
Il corso rivolge una particolare attenzione allo sviluppo di codice ben scritto e ben strutturato utilizzando le tecniche di base per lo sviluppo di software nel paradigma imperativo.
- Capacità di applicare conoscenza e comprensione (applying knowledge and understanding): si intende fornire gli strumenti per conseguire le seguenti abilità pratiche e professionali:
- Analizzare problemi computazionali e tradurre in codice idee algoritmiche per la loro risoluzione;
- Progettare, descrivere, implementare e debuggare programmi in Python con tools professionali;
- Utilizzare strutture dati predefinite per la gestione dei dati nel calcolo scientifico;
- Comprendere semplici algoritmi ricorsivi;
- Utilizzare librerie specifiche per il calcolo scientifico;
- Leggere, comprendere ed analizzare codice Python di terze parti anche in termini di efficienza;
- Orientarsi nella documentazione delle librerie.
- Autonomia di giudizio (making judgements): attraverso l'esame di numerosi esempi di codice ed una consistente componente pratica che prevede lo svolgimento di esercizi all'elaboratore, il discente sarà in grado, sia in forma autonoma che in forma cooperativa, di analizzare problemi e progettare ed implementare le relative soluzioni software.
- Abilità comunicative (communication skills): lo studente acquisirà le necessarie abilità comunicative e di appropriatezza espressiva nell'impiego del linguaggio verbale tecnico nell'ambito della programmazione degli elaboratori.
- Capacità di apprendimento (learning skills): il corso intende fornire al discente le necessarie metodologie teoriche e pratiche da mettere in campo in contesti professionali e, in particolare, la capacità di formulare ed implementare algoritmi ad-hoc per la risoluzione di nuovi problemi computazionali oltre alla possibilità di acquisire facilmente ed in breve tempo altri linguaggi di programmazione.
Modalità di svolgimento dell'insegnamento
Informatica 1 - 6 CFU - 47 ore totali di cui:
- 35 ore di lezioni frontali,
- 12 ore di esercitazioni.
Le lezioni frontali sono tenute in aula con l'ausilio del videoproiettore.
Tutto il materiale presentato (slide e frammenti di codice) è messo a disposizione degli studenti nel portale Studium.
Le slide non intendono sostituire i testi di riferimento ma rappresentano una guida puntuale agli argomenti del corso.
Al fine di perseguire gli obiettivi formativi del corso esposti nei descrittori 2) Applying knowledge and understanding e 3) Making judgements:
- molte lezioni saranno svolte in modalità interattiva docente-discenti;
- sono previste delle esercitazioni pratiche in aula atte a familiarizzare i discenti con la stesura di codice Python;
- saranno discussi alcuni casi di studio nell'ambito della progettazione di software di piccole dimensioni.
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.
La verifica dell'apprendimento può essere effettuata anche on-line, qualora le condizioni lo richiedano.
NOTA BENE: Informazioni per studenti con disabilità e/o DSA
A garanzia di pari opportunità e nel rispetto delle leggi vigenti, gli
studenti interessati possono chiedere un colloquio personale in modo da
programmare eventuali misure compensative e/o dispensative, in base agli
obiettivi didattici ed alle specifiche esigenze. E' possibile rivolgersi anche al docente referente CInAP (Centro per
l’integrazione Attiva e Partecipata - Servizi per le Disabilità e/o DSA) del nostro Dipartimento, prof. Filippo Stanco
Prerequisiti richiesti
Frequenza lezioni
Le lezioni frontali sono erogate in modalità fortemente interattiva docente-discenti pertanto la frequenza è consigliata. Il calendario delle lezioni è pubblicato in www.dmi.unict.it
Contenuti del corso
- Introduzione alla programmazione
- Problemi ed Algoritmi. Variabili, Espressioni ed Assegnazioni.
- Diagrammi di flusso, Notazione lineare strutturata, Teorema di Böhm-Jacopini.
- Codifica dell'informazione: numeri interi ed a virgola mobile, caratteri, stringhe, immagini e suoni (cenni).
- Linguaggi di programmazione
- Linguaggi di programmazione: macchina, assembly e di alto livello.
- Problema della traduzione : compilazione ed interpretazione.
- Installazione dell'ambiente di sviluppo per il linguaggio Python. Primo programma: Editing, Running, Debugging.
- Costrutti del linguaggio Python
- Sintassi di base, Tipi di dato, Operatori predefiniti, Gestione dell’I/O.
- Numeri e funzioni matematiche.
- Controllo del flusso: costrutti di selezione ed iterativi.
- Funzioni.
- Strutture dati predefinite in Python
- Stringhe.
- Liste, Tuple.
- Insiemi, Dizionari.
- Argomenti avanzati
- Algoritmi notevoli: Ricerca, Ordinamento, Fusione. Cenni di complessità computazionale.
- Funzioni ricorsive.
- Moduli. Cenni alle librerie matematiche NumPy e SciPy ed alla libreria grafica PlotPy.
Testi di riferimento
C.Horstmann - R.Necaise, Concetti di Informatica e fondamenti di Python, 2nd. Ed., Maggioli Editore.
Autore | Titolo | Editore | Anno | ISBN |
C.Horstmann - R.Necaise | Concetti di Informatica e fondamenti di Python | Maggioli Editore | 2023 | 8891663979 |
Programmazione del corso
| Argomenti | Riferimenti testi |
1 | Introduzione alla programmazione e codifica dell'informazione | 2 |
2 | Ambiente di sviluppo Python | 1, 2 ,3, 4 |
3 | Costrutti del linguaggio Python | 1, 2, 3, 4 |
4 | Strutture dati predefinite in Python | 1, 2, 3, 4 |
5 | Algoritmi notevoli (ricerca, ordinamento, fusione) | 2 |
6 | Ricorsione | 2 |
7 | Librerie NumPy, SciPy, PlotPy | 4 |
Verifica dell'apprendimento
Modalità di verifica dell'apprendimento
L’esame consiste nella verifica degli obiettivi preposti per il corso e cioè:
- la capacità di descrivere ed implementare semplici procedimenti algoritmici,
- la conoscenza dettagliata del linguaggio di programmazione Python,
- la capacità di applicare il paradigma imperativo allo sviluppo di software per il calcolo scientifico.
L'esame è composto da due prove indipendenti atte a verificare gli obiettivi dell'apprendimento e si intende superato quando tutte e due le prove saranno valutate sufficientemente:
(1) prova scritta (due esercizi di codifica, verifica gli obiettivi (a) e (b)),
(2) prova orale (discussione di un progetto software assegnato, verifica gli obiettivi (a), (b) e (c)).
La prova (1) consiste in un compito scritto assegnato in aula che comprende due semplici esercizi di stesura di codice Python. Il tempo assegnato per tale prova è un'ora. La valutazione di tale prova V1 è espressa in trentesimi.
La prova (2) consiste in un colloquio orale durante il quale sarà discusso un progetto software presentato dal discente. Il progetto può essere svolto da un gruppo di studenti (da uno a tre) e deve essere concordato con largo anticipo con il docente. Al momento del colloquio il discente dovrà presentare il codice Python, il manuale utente e la documentazione progettuale. Nel caso di gruppi di studenti la valutazione deve avvenire contemporaneamente. La durata media del colloquio è mezz'ora. La valutazione V2 di tale prova è espressa in trentesimi.
La valutazione complessiva dell'esame è data, in generale, dalla media di V1 e V2.
La prova (1) è da considerarsi propedeutica alla (2). Le due prove possono essere superate in momenti differenti, pertanto ad ogni appello gli studenti potranno sostenere una o entrambe le prove. La sufficienza conseguita in una certa prova sarà considerata valida per tutto l’anno solare (fino a Dicembre successivo al corso di riferimento).
Per accedere alla prova (1) lo studente deve risultare prenotato nel portale studenti, la prova (2) non necessita di prenotazione.
Per l'attribuzione del voto si seguiranno di norma i seguenti criteri:
- non approvato: lo studente è carente nel ragionamento logico (a).
- 18-23: lo studente dimostra capacità minime di ragionamento logico (a) e di conoscenza tecnica (b), con una modesta capacità espositiva.
- 24-27: lo studente dimostra buone capacità di ragionamento logico (a) e di conoscenza tecnica (b) e (c), e colloquia agevolmente.
- 28-30 e lode: lo studente dimostra ottime capacità di ragionamento logico (a) e di conoscenza tecnica (b) e (c), ed interagisce in modo appropriato e con acuto senso critico.
La verifica degli obiettivi dell'apprendimento potrà essere effettuata anche per via telematica, qualora le condizioni lo dovessero richiedere.
Esempi di domande e/o esercizi frequenti
Alcune tipiche questioni per la prova scritta (1) sono le seguenti:
- Descrivere l'algoritmo InsertionSort.
- Eseguire una ricerca all'interno di una lista senza utilizzare funzioni predefinite.
- Implementare una matrice ed eseguire una certa operazione in una colonna di essa.
Alcune tipiche domande per la prova orale (2) sono le seguenti:
- Quali strutture dati sono state utilizzate nel progetto?
- Qual è l'algoritmo numerico più importante presente nel progetto?
- Qual è l'algoritmo computazionalmente meno efficiente presente nel progetto?
English version