Seguici su
Cerca

INFORMATICA I

Anno accademico 2022/2023 - 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

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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

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 understanding3) 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.

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

Nessun prerequisito.

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

  1. Introduzione alla programmazione
    1. Problemi ed Algoritmi.  Variabili, Espressioni ed Assegnazioni.
    2. Diagrammi di flusso, Notazione lineare strutturata, Teorema di Böhm-Jacopini.
    3. Codifica dell'informazione: numeri interi ed a virgola mobile, caratteri, stringhe, immagini e suoni (cenni).
  2. Linguaggi di programmazione
    1. Linguaggi di programmazione: macchina, assembly e di alto livello.
    2. Problema della traduzione : compilazione ed interpretazione.
    3. Installazione dell'ambiente di sviluppo per il linguaggio Python.  Primo programma: Editing, Running, Debugging.
  3. Costrutti del linguaggio Python
    1. Sintassi di base, Tipi di dato, Operatori predefiniti, Gestione dell’I/O.
    2. Numeri e funzioni matematiche.
    3. Controllo del flusso: costrutti di selezione ed iterativi.
    4. Funzioni.
  4. Strutture dati predefinite in Python
    1. Stringhe.
    2. Liste,  Tuple.
    3. Insiemi,  Dizionari.
  5. Argomenti avanzati
    1. Algoritmi notevoli: Ricerca, Ordinamento, Fusione. Cenni di complessità computazionale.
    2. Funzioni ricorsive.
    3. Moduli. Cenni alle librerie matematiche NumPy e SciPy ed alla libreria grafica PlotPy.  

Testi di riferimento

(1) A.Downey,  Think Python, 2nd Ed., Grean Tea Press  (disponibile online).
(2) C.Horstmann - R.Necaise,  Concetti di Informatica e fondamenti di Python, 2nd. Ed., Maggioli Editore.
(3) M.Lutz,  Learning Python, 4th Ed., O'Reilly  (disponibile online).
(4) D.Pine,  Introduction to Python for Science and Engineering, SMTEBooks - CRC Press  (disponibile online).

Relativamente allo svolgimento del corso, il testo (2) è adottato.

Si tenga presente che tutti i testi sopraindicati sono comunque idonei al conseguimento degli obiettivi dell'apprendimento, considerando che:

 - il libro (2) è consigliato ai principianti in quanto introduttivo alla programmazione e con una grande quantità di esercizi presenti in esso;
 - il libro (3) è di livello avanzato ed è consigliato a chi è già nota la programmazione.

Programmazione del corso

 ArgomentiRiferimenti testi
1Introduzione alla programmazione e codifica dell'informazione2
2Ambiente di sviluppo Python1, 2 ,3, 4
3Costrutti del linguaggio Python1, 2, 3, 4
4Strutture dati predefinite in Python1, 2, 3, 4
5Algoritmi notevoli (ricerca, ordinamento, fusione)2
6Ricorsione2
7Librerie NumPy, SciPy, PlotPy4

Verifica dell'apprendimento

Modalità di verifica dell'apprendimento

L’esame consiste nella verifica degli obiettivi preposti per il corso e cioè:

  1. la capacità di descrivere ed implementare semplici procedimenti algoritmici,
  2. la conoscenza dettagliata del linguaggio di programmazione Python,
  3. 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 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.

   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?