Corso di Programmazione I (Edizione 3)

ATTENZIONE: questa pagina contiene solo le informazioni generali del corso. Per il relativo materiale ed informazioni dettagliate, fate riferimento al sito ufficiale su piattaforma ARIEL .

Descrizione generale del corso di Programmazione

Il corso di Programmazione è un corso di 12 crediti finalizzato all'insegnamento della programmazione degli elaboratori. Non richiede alcuna conoscenza pregressa.

Obiettivi:

Metodi:

Materiale:

Obiettivi didattici (dall'edizione 18/19 di P. Boldi)

Il corso ha come scopo che lo studente acquisisca una serie di conoscenze, abilità e competenze, le principali delle quali sono:

Nella valutazione intendiamo avvalerci dei seguenti indicatori (* significa che questo indicatore sarà valutato principalmente durante la prova di laboratorio):

Contenuti dettagliati del corso

Il programma di dettaglio del corso verrà pubblicato durante l'anno:

  1. Introduzione al corso; Che cos'è l'informatica; Il calcolatore come macchina programmabile; Hardware, Programmi e Linguaggi di programmazione (esempi in diversi contesti)
  2. La macchina di von Neumann; struttura di memoria e CPU; un esempio di CPU con relativo linguaggio assembly; fetch-decode-execute; linguaggi di programmazione e calcolatilità (esempio delle macchine RAM); il concetto di traduttore, compilatore ed interprete

Di seguito vengono riportati gli argomenti trattati nell' edizione 18/19 del corso (prof. Boldi). [TWG] = The Way to Go.

  1. Ciclo di vita del software. Strumenti per la programmazione. Storia di go. Il primo programma in go [TWG4]. Il go tool. Compilazione. Esecuzione. Formattazione. Documentazione [TWG3]
  2. Discussione degli aspetti lessicali e sintattici. Commenti [TWG4]. Struttura generale di un programma go: programma, pacchetti, sorgenti. La libreria standard. [TWG4]
  3. Variabili: nome, tipo, valore, scope. Tipi. Classificazione dei tipi (tipi di base, tipi composti, interfacce). Dichiarazione, assegnamenti e assegnamenti multipli, short-assignment [TWG4]
  4. I/O di base: fmt.Println, fmt.Print, fmt.Scan. Tipi di base numerici (int, float64). Espressioni numeriche. Conversioni. Variabili inutilizzate e blank variable [TWG4]
  5. Selezione binaria (if). Il tipo bool e gli operatori booleani. Esercizi [TWG5]
  6. Ancora sull'if: variabili locali all'if (locali ai blocchi; locali al costrutto). Esempi
  7. Il ciclo (for): versione unaria, ternaria, zeraria. Esercizi [TWG5]
  8. Esercizi con i cicli semplici. Istruzioni break e continue [TWG5]
  9. Rappresentazione dell'informazione. Notazione posizionale. Rappresentazione degli interi negativi. Range di rappresentazione, overflow. Tipi interi a lunghezza fissa [Dispense, TWG4]
  10. Esercizi con i cicli annidati.
  11. Cenni alla rappresentazione dei reali: virgola fissa e mobile (standard IEEE 754). Cenni al tipo complex. I caratteri (ASCII, Unicode, UTF-8). Tipo rune [Dispense, TWG4, TWG5]
  12. Tipo string: differenze fra raw e utf-8. Funzione len. Quarta forma del ciclo for (range).
  13. Selezione multiaria (switch) [TWG5]
  14. Funzioni: parametri, segnatura argomenti. Passaggio per valore. Valori restituiti. Valori restituiti con nome. [TWG6]
  15. Esercizi. Pacchetto strconv e pacchetto strings [TWG]
  16. Puntatori: operatori * e &. La funzione new [TWG4]
  17. Type: alias e definizioni. Struct. Esercizi con puntatori e struct.
  18. Array e slice. Inizializzatori. Applicazione dei for range. Funzione append [TWG7]
  19. Esercizi. Subslicing. fmt.Printf. Argomenti da riga di comando.
  20. Generazione numeri pseudo-casuali. Pacchetto math. Esercizi
  21. Mappe. Applicazione dei for range. Conversione di string a []rune. Esercizi [TWG8]
  22. Ricorsione. Stack di esecuzione [TWG6]
  23. Esercizi sulla ricorsione
  24. Grafica con il pacchetto github.com/holizz/terrapin. Esempio semplice. Frattali e curva di Koch
  25. Pacchetti e struttura. Visibilità. Documentare un pacchetto [TWG9 (cenni)]
  26. Esempio: un pacchetto per le liste concatenate semplici di stringhe
  27. Argomenti avanzati: metodi e interfacce (cenni) [TWG10, TWG11]
  28. I/O avanzato. File, istruzione defer [TWG6, TWG12]
  29. Esercitazione: lettura di un file di testo con formato prestabilito, espressioni regolari, gestione degli errori di I/O e di parsing...
  30. Testing unitario e funzionale (E2E) [TWG13]
  31. Tipi funzione. L'esempio dell'integrazione numerica (metodo dei trapezoidi e metodo Monte-Carlo) [TWG6]
  32. Il linguaggio C. Il gcc. Differenze sintattiche: punto-e-virgola, parentesi nelle strutture di controllo, dichiarazioni di variabili, tipi e funzioni. Differenze nelle strutture di controllo del flusso (switch, while, do-while). Uso di istruzioni semplici nelle strutture di controllo. Inclusione vs. importazione.
  33. Assenza di stringhe, slice, mappe; uso dei char[] per le stringhe. Tipi elementari e dipendenza dal compilatore; uso di tipi specifici (stdint.h, bool.h). Cast impliciti. Definizione di macro. Funzioni di libreria. Parametri da riga di comando
  34. Puntatori, aritmetica dei puntatori. Gestione della memoria: malloc, free

Informazioni e Ricevimento

I momenti di ricevimento studenti (e in generale i colloqui informativi sul corso) vengono organizzati su appuntamento, nell'ufficio del docente (via Celoria 18, terzo piano). Per fissare un appuntamento, inviare una e-mail al docente e attendere una risposta di conferma.