Schema della sezione

  • Attenzione

    Come avrete probabilmente saputo, dall'a.a. 2023/2024 il linguaggio usato per il corso di Programmazione e Algoritmi 1 è cambiato in Python, e non  più Java. Per tutto l'a.a. 2023/24, gli studenti degli anni accademici 2022/23 e precedenti potranno scegliere se svolgere l'esame usando Java o Python come linguaggio. Tutte le comunicazioni ulteriori avverranno sul sito dell'a.a. 2023/24.

    Obiettivo

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

    Programma del corso

    • Introduzione alla programmazione
      • Hardware e Software
      • Linguaggi di programmazione, interpreti e compilatori
      • Il bytecode Java e la Java Virtual Machine
      • Programmazione strutturata ed orientata agli oggetti
      • Testing e debugging
      • Riutilizzo del software
    • Primi passi con Java.
      • Un semplice programma Java
      • L'ambiente di sviluppo Visual Studio Code
      • Variabili e tipi di dato numerici
      • Espressioni aritmetiche
      • Assegnamento
      • Rappresentazione binaria di dati numerici
      • Casting e promozione di valori numerici
      • Input e output
      • Il tipo stringa
      • Costanti
      • Stile di programmazione
    • Istruzioni ed operatori condizionali.
      • L'istruzione if-then-else
      • L'operatore ternario
      • Il tipo booleano
      • Cenni di logica delle proposizioni
      • Espressioni booleane
      • Uguaglianza in Java
      • L'istruzione e l'operatore switch
    • Iterazione definita.
      • Iterazione definita in Java: istruzione for
      • Esempi di programmi che usano l'iterazione definita
      • Istruzioni break e continue
      • Uso del debugger in Visual Studio Code
    • Iterazione indefinita
      • Istruzioni while e do-while
      • Esempi di programmi che usano l'iterazione indefinita
      • Scrivere cicli senza bug
      • L'istruzione for rivista
    • Sottoprogrammi e metodi statici
      • Sottoprogrammi e metodi statici
      • Passaggio di parametri
      • Metodi che restituiscono un risultato
    • Vettori
      • I vettori
      • Ricerca lineare e ricerca binaria
      • Ordinamento di un vettore: selection sort
      • Vettori multidimensionali
      • Cenni di complessità computazionale asintotica
    • Ricorsione.
      • Programmi ricorsivi
      • La pila dei record di attivazione
      • Ricerca binaria ricorsiva e merge sort
    • Oggetti e classi
      • Le classi come meccanismo di aggregazione di dati (record)
      • Array di oggetti

    Ricevimento studenti

    Il corso è tenuto dal prof. Gianluca Amato. Si rimanda alla pagina del profilo per informazioni su come contattare il docente e sugli orari e modalità di ricevimento.

    Materiale didattico

    Modalità didattica

    Il corso si terrà in presenza. Alcuni studenti con particolari requisiti potranno accedere alle lezioni in streaming e registrate, secondo le regole previste dalla "Modalità di erogazione della didattica A.A. 2022/23"

  • Qui trovate l'elenco delle lezioni già svolte, con il corrispondente PDF della lavagna. Si noti che questi PDF non sono adatti ad essere utilizzati come materiale didattico principale del corso, perché mancano delle spiegazioni e dei commenti che collegano una scritta con un'altra. Dopo la sigla WS (abbreviazione di Walter Savitch) trovate le sezioni del libro di testo che corrispondono alla lezione. La sigla IE (abbreviazione di Irv Englander) indica invece le pagine delle slide tratte dal testo di Irv Englander.

    • 27/9/2022. Presentazione del corso di laurea. Presentazione dell'insegnamento di Programmazione e Algoritmi 1. L'hardware del calcolatore. WS 1.1.1  (lavagna)
    • 28/9/2022. Il software. Interpreti e compilatori. Il linguaggio Java. Il primo programma in Java. WS 1.1.2, 1.1.3, 1.1.4, 1.2.3, 1.2.4 (lavagna)
    • 03/10/2022. LABORATORIO. Introduzione a Linux e all'ambiente operativo dell'aula informatica.
    • 04/10/2022. Algoritmi, collaudo, bug e debugging. L'ambiente di sviluppo: JDK, Visual Studio Code, Git. Commenti e indentazione. Dichiarazione di variabili. I tipi interi e in virgola mobile. WS 1.3.2, 1.3.3, 2.1.1, 2.1.2, 2.1.4, 2.1.5, 2.1.6, 2.4.2, 2.4.3 (lavagna)
      • Si consiglia anche la lettura della sezione 2.4.1 (nomi significativi per le variabili) sebbene non trattata esplicitamente durante la lezione.
    • 05/10/2022. I tipi boolean e char. Gli identificatori. Letterali. Espressioni. Promozioni e conversioni di tipo con il cast. Altre istruzioni di assegnamento. Istruzioni di auto-incremento e auto-decremento.  Il tipo stringa. WS 2.1.3, 2.1.7,2.1.9, 2.1.10, 2.1.11, 2.1.12, 2.1.13, 2.1.14, 2.2.1, 2.2.2, 2.2.3, 2.2.4 (lavagna)
      • Si consiglia anche la lettura delle sezioni 2.1.8 (constanti con nome), 2.2.5 (caratteri di escape) e 2.4.4 (linee guida per l'uso di costanti con nome) sebbene non trattate esplicitamente a lezione.
    • 11/10/2022. Ancora sulla classe String. Il Progetto 2.8.3 del libro di testo. Revisitazione delle operazioni di input/output. L'istruzione if-then-else. WS 2.3.1, 2.3.2, 3.1.1 (lavagna)
    • 12/10/2022. Ancora sull'istruzione if-then-else. Esempio di programma che calcola massimo e minimo di due numeri. Espressioni booelani, operatori di confronto ed operatori logici.  Istruzioni if annidate. WS 3.1.2, 3.1.3, 3.2.1 (lavagna)
    • 17/10/2022. LABORATORIO. Esercitazione su Visual Studio Code, dichiarazione di variabili, assegnamento e selezione.
    • 18/10/2022. If-then-else multi ramo. Confronto tra stringhe. L'operatore condizionale. Il sistema di numerazione binario. WS 3.1.4, 3.1.5, 3.1.6. IE da 3-1 fino 3-29 (lavagna)
      • Si consiglia anche la lettura delle sezioni 3.2.2 (regole di precedenza), e 3.2.3 (input e output di valori boolean) sebbene non trattate esplicitamente a lezione.
    • 19/10/2022. Rappresentazione in modulo e segno e in complemento a due. Overflow. Rappresentazione dei caratteri: codice ASCII e Unicode. IE da 4-1 a 4-15. IE da 5-1 a 5-30. WS 2.2.6. IE (lavagna)
    • 24/10/2022. LABORATORIO. Esercitazioni con i costrutti di assegnamento e selezioni. Il comando switch. WS 3.3.
    • 25/10/2022. Rappresentazione di stringhe e sequenze di escape. Sistema di numerazione ottale ed esadecimale. Numeri frazionari in base 2 e problemi di rappresentazione dei tipi double e float. WS 2.2.5. IE da 3-30 a 3-40 (lavagna)
    • 25/10/2022. Iterazione definita e l'istruzione for. WS 4.1.3, 4.1.4, 4.2.1, 4.2.2, 4.2.4 (ma attenzione, il libro fa prima l'iterazione indefinita e poi quella definita: nel leggere il libro, meglio seguire l'ordine seguito lì)
    • 02/11/2022. Cicli for annidati. L'iterazione indefinita e l'istruzione while (WS 4.1, 4.1.1)
    • 07/11/2022. LABORATORIO. Esercitazione con iterazione definita (e indefinita)
    • 08/11/2022. Ancora su iterazione definita. L'istruzione do-while. WS 4.1.2, 4.2.3 (lavagna)
      • Si consiglia anche la lettura della sezione 4.2.5 (Cicli difettosi)
    • 09/11/2022. Metodi statici. WS 5.1, 5.1.1, 5.1.2, 5.1.3, 5.1.5.(lavagna)
      • Si consiglia anche la lettura delle sezioni 5.1.4 (blocchi) e 5.1.6 (ancora sull'istruzione return) sebbene non trattate esplicitamente a lezione.
    • 14/11/2022. LABORATORIO. Realizzazione di chatbot per Telegram. Esercizi.
    • 15/11/2022. La classe Math. Pila dei record di attivazione. Il debugger. Gli array. WS 5.2, 5.3, 6.1, 6.1.1, 6.1.1, 6.1.3, 6.1.4.
      • Si consiglia anche la lettura della sezione 5.4 (Come  scrivere  i  metodi) e tutte le sue sottosezioni, sebbene non trattate esplicitamente durante la lezione.
    • 16/11/2022. Ancora sugli array. I tipi riferimento. WS 6.1.5, 6.1.7, 6.2.1, 6.2.2, 6.2.4, 6.2.5 (lavagna)
    • 21/11/2022. LABORATORIO. Collaudo dei metodi. Esercizi.
    • 22/11/2022. ESERCITAZIONE. Metodi che modificano gli array sul posto.
    • 23/11/2022. Algoritmi di ricerca lineare e binaria. Ordinamento per selezione. WS 6.3, 6.3.1, 6.3.2, 6.3.3.
    • 2022/11/28. LABORATORIO. Metodi statici, array e test.
    • 29/11/2022. Complessità computazionale: analisi della complessità di un algorimto; caso pessimo ottimo e medio; complessità asintotica. (lavagna)
    • 30/11/2022. Complessità computazionale: analisi complessità della ricerca binaria  del selection sort; complessità minima di un problema. (lavagna)
    • 05/12/2022. LABORATORIO. Un programma completo: l'impiccato.
    • 06/12/2022. Costanti e variabili statiche (o globali). Array multi-dimensionali. WS 2.1.8, 6.4, 6.4.1, 6.4.2 (lavagna)
    • 07/12/2022. Array multidimensionali e array di array. WS 6.4.3, 6.4.4. (lavagna)
    • 12/12/2022. LABORATORIO. Esercizi su array multi-dimensionali e Forza 4.
    • 13/12/2022. Valutazione a corto circuito delle espresisoni booleane. Overloading dei metodi. Ricorsione. WS 3.2.2, 9.3.1, 7.1, 7.1.1, 7.1.2, 7.1.3, 7.1.4, 7.1.5. (lavagna)
    • 14/12/2022. Progettazione di metodi ricorsivi. Ricerca binaria (ricorsiva) e merge sort. WS 7.2.1, 7.2.2. (lavagna)
    • 19/12/2022. Progettazione del metodo principale di un programma: il gioco del tris.
    • 20/12/2022. Ripasso di complessità computazionale. Complessità computazionale del Merge Sort e relazioni di ricorrenza (lavagna)
    • 21/12/2022. Introduzione alla classi Java come metodo di aggregazione dei dati (record). WS 8, 8.1, 8.1.1, 8.1.2 (lavagna)
    • 09/01/2023. LABORATORIO. Metodi ricorsivi. Oggetti.
    • 10/01/2023. Array di oggetti. Parametri della riga di comando. WS 6.2.3 (lavagna)
    • 11/01/2023. Svolgimento del compito di prova.

  • L'esame è costituito da una prova scritta/pratica, che si svolgerà possibilmente 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à degli algoritmi o sulla rappresentazione binaria dei dati).

    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.
  • Con cadenza circa di una volta ogni due settimane, saranno assegnati dei compiti per casa. Chi consegna con successo il 90% dei compiti per casa ha diritto a 2 punti aggiuntivi sul voto dell'esame scritto. Un compito si considera consegnato con successo se viene valutato dal sistema automatico con un voto almeno pari al voto per la sufficienza indicato nella descrizione dello stesso. I punti aggiuntivi sono validi per tutte le sessioni d'esame del 2023.

    • Sscadenza 23/10/2022 30/10/2022; voto minimo per passare il compito: 0, ma bisogna consegnarlo; voto massimo: 3.

    • Scadenza 12/11/2022, solo per chi non è riuscito a consegnare il "Compito 1" entro la data prevista. Come sempre il compito è valutato da 0 a 3 punti. Anche un voto nullo è sufficiente per "passare" il compito, ma è necessario che la consegna sia effettuata in maniera corretta.

    • Scadenza: 12/11/2022, voto minimo per la sufficienza: 4, voto massimo: 10.

    • Scadenza: 12/11/2022, voto minimo per la sufficienza: 4, voto massimo: 10. Versione alternativa del "Compito 2" con i test corretti. Da utilizzare solo se si è accettato il "Compito 2" prima delle correzioni effettuate all'esercizio 3.
    • Scadenza: 3/12/2022, voto minimo per la sufficienza: 4, voto massimo: 10.
    • Scadenza: 17/12/2022 compreso, voto minimo per la sufficienza: 4, voto massimo: 10.
    • Scadenza: 14/1/2022 compreso, voto minimo per la sufficienza: 4, voto massimo: 10.