Indice degli argomenti

  • Presentazione del corso

    Obiettivo

    Obiettivo del corso è insegnare i fondamenti della programmazione strutturata utilizzando Python come linguaggio di programmazione. Non è invece un obiettivo di questo corso insegnare la programmazione ad oggetti, che sarà uno dei punti centrali del corso di Programmazione e Algoritmi 2.

    Programma

    Introduzione alla programmazione. Introduzione a Python. Selezione. Iterazione definita. Iterazione indefinita. Funzioni. Liste. Gestione dei file. Eccezioni. Ricorsione. Algoritmi di ordinamento e ricerca. Cenni di complessità computazionale.

    È disponibile anche un programma dettagliato del corso.

    Ricevimento studenti

    Il corso sarà tenuto dal prof. Gianluca Amato. Il prof. Amato, oltre alla lezioni in aula e/o in laboratorio, è a disposizione degli studenti durante il proprio orario di ricevimento, per chiarire dubbi su qualunque aspetto, organizzativo o disciplinare, di questo insegnamento. È possibile recarsi al ricevimento studenti sia a titolo personale che in gruppo. Si rimanda alla pagina del profilo del docente per l'indicazione del giorno e orario del ricevimento studenti. È Inoltre possibile contattare il docente tramite email all'indirizzo: gianluca.amato@unich.it. Sempre per email è possibile fissare un appuntamento con il docente in alternativa all'orario di ricevimento standard.

    Modalità didattica

    Il corso si terrà in presenza. In particolare, il corso di "Programmazione e Algoritmi 1" si svolgerà tramite lezioni frontali. Diversa invece l'organizzazione per il corso di "Laboratorio di Programmazione 1", che si terrà in aula formatica: ogni lezione sarà costituta da una parte di didattica frontale ed una parte di esercitazione autonoma dlelo studente al calcolatore, sotto la guida del docente. Il corso di "Laboratorio di Programmazione 1" è diviso in due canali, a seconda della lettera inziale del cognome dello studente.

    Alcuni studenti con particolari requisiti potranno accedere alle lezioni in streaming e registrate, secondo quanto stabilito dal Senato Accademico dell'Ateneo nelle "Disposizioni sulle modalità di erogazione delle attività didattiche a.a. 2023/2024".


    Gli studenti che hanno diritto ad accedere alle lezioni on-line saranno inseriti automaticamente all'interno del team. Richieste estemporanee non saranno accettate.

  • Materiale didattico

    Il materiale marcato come (approfondimento) potrebbe essere stato trattato a lezione in parte o per nulla, e non fa parte del programma del corso.

  • Lezioni di Laboratorio

  • Esame di "Programmazione e Algoritmi 1"

    Il corso di Programmazione e Algoritmi 1 e quello di Laboratorio di Programmazione 1 sono a tutti gli effetti due insegnamenti separati. Pertanto, si svolgeranno due esami distinti, con modalità completamente diversa tra di loro. Tra questi due esami non c'è nessuna relazione di propedeuticità, potete sostenerli nell'ordine che volete.

    Per il corso di Programmazione e Algoritmi 1, l'esame è molto simile a quello dell'A.A. 2022/23, tranne per il fatto che si usa Python invece di Java. Esso è costituito da una prova scritta/pratica, che si svolgerà presumibilmente in aula informatica, ed una prova orale in parte facoltativa.

    La prova scritta comprende:

    • esercizi in cui si chiede di sviluppare un programma secondo certe specifiche;
    • esercizi in cui si chiede di mostrare la traccia di esecuzione di un programma dato (ovvero, indicare l'evoluzione delle variabili del programma durante la sua esecuzione);
    • esercizi terorici (ad esempio, ma non esclusivamente, sulla complessità computazionale e gli algoritmi studiati studiati durante il corso)

    Chi supera la prova scritta (voto maggiore o uguale a 18), a meno di diversa indicazione del docente, può verbalizzare direttamente il voto conseguito. Tuttavia, in questo modo, il voto massimo verbalizzabile è 26: un voto superiore ottenuto allo scritto sarà comunque verbalizzato come 26. Chi vuole un voto superiore a 26 deve obbligatoriamente sostenere la prova orale.

    La prova orale consiste in domande teoriche o pratiche su tutto il programma del corso. Alla prova orale si accede su richiesta del docente o dello studente che abbia superato la prova scritta. Alla prova orale si parte dal voto dello scritto, che può essere sia aumentato che diminuito.

    Studenti anni accademici precedenti

    Gli studenti degli anni accademici precedenti possono decidere di sostenere l'esame con il linguaggio Python o il linguaggio Java.

    Se l'esame viene sostenuto in Python, è necessario sostenere sia la prova di Programmazione e Algoritmi 1 che quella di Labratorio di Programmazione 1. Al superamento di entrambe le prove, verrà verbalizzato l'esame di Programmazione e Algoritmi 1 da 9 CFU (invece della combinazione 6+3 degli iscritti al nuovo anno accademico). Le due prove possono essere sostenute nell'ordine che si desidera, non c'è nessuna relazione di  propedeuticità tra di esse. Notare che non riuscirete ad iscrivervi formalmente all'esame di "Laboratorio di Programmazione 1", perché non è nel vostro piano di studi, ma non vi preoccupate: inviate semplicemente il progetto tramite FAD prima della scadenza dell'appello che volete sostenere. Le scadenze sono queste:

    • 15/01/2024
    • 05/02/2024
    • 21/02/2024
    • 05/06/2024
    • 03/07/2024
    • 09/09/2024

    Se l'esame viene sostenuto in Java, l'esame consiste nella sola prova scritta/pratica. Fino all'appello di febbraio 2024 continuano a valere gli eventuali punti aggiuntivi dei compiti a casa. È necessario comunicare l'intenzione di sostenere l'esame in Java, aggiungendo una nota quando ci si prenota all'appello.
  • Esame di "Laboratorio di Programmazione 1"

    Il corso di Programmazione e Algoritmi 1 e quello di Laboratorio di Programmazione 1 sono a tutti gli effetti due insegnamenti separati. Pertanto, si svolgeranno due esami distinti, con modalità completamente diversa tra di loro. Tra questi due esami non c'è nessuna relazione di propedeuticità, potete sostenerli nell'ordine che volete.

    L'esame per il corso di laboratorio prevede lo svolgimento di un progetto di programmazione, e la sua discussione con il docente. Il progetto può essere svolto da soli o in gruppo, ma il colloquio sarà individuale. 

    L'obiettivo didattico del progetto è quello di impegnarvi nello sviluppo di un programma leggermento più complesso di quelli con cui è possibile cimentarsi durante le ore di laboratorio. Perché l'obettivo sia centrato, è importante che il programma proviate a scriverlo voi ! Questo non vuol dire fare tutto da soli. Potete ovviamente chiedere aiuto ad un amico più esperto, al docente (durante l'orario di ricevimento non ho nessun problema nell'aiutarvi nello sviluppo del progetto) o anche a ChatGPT e strumenti simili, purché cerchiate di ricorrervi quando siete in difficoltà, e non a priori per scansare tutto i lavoro!

    Obiettivo della discussione del progetto è quello di verificare che, comunque siano andate le cose, alla fine il progetto che avete consegnato avete capito come funziona. L'esame non prevede voto, ma solo una idoneità.

    Gli appelli indicati sul sito per la prenotazione agli esami sono le date entro le quali bisogna inviare il progetto per partecipare all'appello. Successivamente, constatato il numero di progetti che sono stati consegnati, provvederò a inserire su FAD degli opportuni moduli per la prenotazione alle vere prove orali.
  • Elenco dettagliato delle lezioni

    Questo è l'elenco dettagliato delle lezioni (normalmente due ore, se non diversamente specificato). Per ogni lezione sono specificate le parti del libro di testo corrispondenti. Le sezioni denominate "Strumenti" nel libro di testo sono normalmente escluse, a meno di indicazione espressamente contraria.

    Programmazione e Algoritmi 1
    • 25/09 (1 ora): Presentazione dell'insegnamento di Programmazione e Algoritmi 1. Hardware e software. Programmazione in linguaggi a basso ed alto livello. (sezioni 1.1, 1.2, 1.3, argomenti avanzati 1.1)
    • 26/09: Algoritmi. Interagire con Python e l'ambiente di sviluppo Visual Studio Code. (sezioni 1.7, 1.4, 1.5, 1.6)
    • 28/09 (1 ora): Variabili. Tipi di dato intero e float. (sezioni 2.1, 2.2.1, 2.2.2).
      Attenzione
      : il libro suggerisce di utilizzare la convenzione camel case per i nomi delle variabili, ma generalmente in Python è preferita la convenzione snake case. Consultare il notebook del 3 ottobre per maggiori informaziomni.
    • 03/10: Funzioni built-in. Moduli. Convenzioni e stile di programmazione. Il tipo stringa. (sezioni 2.2.3, 2.2.4, 2.2.5, 2.3, 2.4.1, 2.4.2, 2.4.4,
      Attenzione: il libro non mostra come estrarre sottostringhe con le parentesi quadre, ma solo come estrarre singoli caratteri. Consultare il notebook del 3 ottobre per informazioni sull'estrazione di sottostringhe.
    • 05/10: Metodi per operare sulle stringhe. Conversioni di Tipo. Sequenze di escape. Grafica con Python. (sezioni 2.4.3, 2.4.5, 2.5, 2.6)
      Attenzione: il libro all sezione 2.5.3 vi spiega un modo un po' obsolete per formattare numeri e stringhe per l'output. Noi ne parleremo nella lezione del 19 ottobre, usando però un metodo più moderno che è quello delle f-stringhe.
    • 12/10: L'istruzione if. Operatori relazionali. Istruzioni if annidate. Diagrammi di flusso. Esecuzione passo passo del codice. La codifica ASCII/Unicode  (sezioni 3.1, 3.2, 3.3, 3.5)
    • 17/10: La clausola elif. Il tipo bool e gli operatori logici. Testing. (sezioni 3.4, 3.6, 3.7, 3.8, 3.9)
    • 19/10: L'operatore condizionale. Formattazione dell'output: le f-stringhe. Linux e software libero.
    • 24/10: L'istruzione while e l'iterazione indefinita. (sezioni 4.1, 4.2, 4.3)
    • 31/10: Istruzione for. Cicli annidati. (sezioni 4.6, 4.7)
    • 02/11: Manipolazione di stringhe (sezione 4.8)
    • 07/11: Numeri pseduo-casuali e programmi di simulazione. Elaborazione di immagini con la libreria ezgraphics. Funzioni: uso e definizione (sezioni 4.9, 4.10, 5.1 - 5.8)
    • 09/11: Esecuzione passo-passo di programmi con funzioni. Visibilità delle variabili. Documentazione di funzioni. Sviluppo di programmi con funzioni (sezioni 5.1 - 5.8)
    • 14/11: Ancora sulle funzioni. Le liste. (sezioni 6.1, 6.2)
    • 16/11: Esempi sull'uso delle liste. Variabili come riferimenti a oggetti. (sezioni 6.3, 6.4, 6.5)
    • 21/11: Funzioni che modificano le liste sul posto. Tuple. L'algoritmo di ricerca lineare rivisitato. Misura delle prestazioni del codice Python. (sezioni 6.5, 6.6)
    • 23/11: Ricerca binaria. Ordinamento per selezione. (sezioni 12.1 e 12.6)
      Attenzione: il libro mostra una implementazione ricorsiva della ricerca binaria. Noi non abbiamo ancora studiato la ricorsione, per cui abbiamo presentato una implementazione iterativa)
    • 28/11: Complessità dell'ordinamento per selezione. Rappresentazione di tabelle tramite liste di liste. (sezioni  6.7 e 12.3)
    • 30/11: (1 ora) Ancora sulla rappresentazione di tabelle.
    • 07/12: Ancora sulla rappresentazione di tabelle.
    • 12/12: Ricorsione (sezioni 5.10, 11.1, 11.2)
    • 14/12: Efficienza del codice ricorsivo. Uso di funzioni ricorsive ausiliarie (sezione 11.3)
    • 19/12: Efficienza della ricorsione. I file. (sezioni 11.4, 7.1, 7.4)
    • 21/12: Le eccezioni. Parametri opzonali. Passaggio parametri per nome. (sezioni 7.5)
    • 09/01: Ordinamento per fusione. (sezioni 12.4, 12.5)
    • 11/01: Esempio di svolgimento compito scritto.

    Laboratorio di Programmazione 1
    • 02/10: Introduzione all'uso dell'aula informatica. Esercitazione sull'uso di Python.
    • 09/10: Esercitazione su tipi numerici, stringhe e grafica.
    • 16/10: Preferenze in VSCode. Esercitazione sulla istruzione if.
    • 23/10: Input tramite mouse. L'istruzione match. Esercitazione su f-stringhe ed espressione condizionale.
    • 30/10: Esercizi sull'istruzione while (sezione 4.5)
    • 06/11: Esercizi sull'istruzione for
    • 13/11: L'uso del debugger. Esercizi sulle funzioni (esempi completi 5.3)
    • 20/11: Collaudo di funzioni con la libreria PyTest. Esercizi sulle liste.
    • 27/11: Il gioco dell'impiccato.
    • 04/12: Esercizi su tabelle come liste di liste.
    • 11/12: Il gioco Forza4
    • 18/12: Esercizi sulla ricorsione