Programmazione e Algoritmi 1 + Laboratorio (2023/24)
Section outline
-
Attenzione!
Questa pagina non sarà più aggiornata. Per informazioni relative ai prossimi appelli e modalità d'esame del corso di Programmazione e Algoritmi 1 consultare la pagina web del corso dell'a.a. 2024/25.
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".
- team per Programmazione e Algoritmi 1
- team per Laboratorio di Programmazione A-L
- team per Laboratorio di Programmazione M-Z
Gli studenti che hanno diritto ad accedere alle lezioni on-line saranno inseriti automaticamente all'interno del team. Richieste estemporanee non saranno accettate. -
Il materiale marcato come (approfondimento) potrebbe essere stato trattato a lezione in parte o per nulla, e non fa parte del programma del corso.
-
Il libro di testo è pensato per essere letto e studiato, quanto meno nelle parti che vengono trattate in questo corso e che saranno evidenziate nell'elenco dettagliato delle lezioni, più sotto in questa stessa pagina. Il libro, molto probabilmente, sarà utilizzato anche per il corso di "Programmazione e Algoritmi 2". Leggere, studiare e capire il libro di testo è essenziale per trarre profitto da questo corso: slide e materiale di altro tipo che verranno distribuiti nel corso dell'anno vanno intesi come ausilio e integrazione al libro di testo, e non come sostituti.
-
La documentazione on-line è a solo scopo di riferimento e va consultata quando necessario. Ci si aspetta che lo studente sappia ricercare un argomento di suo interesse nella documentazione on-line.
-
Trovate qui dentro tutti i notebook, i programmi d'esempio e le soluzioni degli esercizi assegnati in laboratorio. La cartella verrà continuamente aggiornata durante il corso dell'anno. Per poter utilizzare i notebook (file .ipynb) è necessario che abbiate un programma per leggerli: va bene Visual Studio Code con l'estensione Jupyter. Tutti i file contengono una data nel formato anno-mese-giorno, in modo che l'ordine alfabetico coincida con l'ordine di svolgimento delle lezioni.
-
Modified 25/09/23, 17:40
-
Modified 26/09/23, 20:24
-
Modified 2/10/23, 18:34
-
Modified 26/09/23, 10:12
-
Uploaded 23/11/23, 19:46
-
Uploaded 29/11/23, 17:45
-
Uploaded 13/01/24, 20:08
-
-
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. -
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.
-
Opened: Thursday, 7 December 2023, 12:00 AM
-
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
- 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)