====== Programmazione I e laboratorio - Corso A ====== Docente: **//Corso A: [[http://www.di.unipi.it/~barbuti/|Roberto Barbuti]]//** Docenti laboratorio: **// [[http://www.di.unipi.it/~bacciu|Davide Bacciu]], [[https://www.lucaoneto.com|Luca Oneto]]//** Supporto alla didattica laboratorio: TBD. Lezioni Programmazione I - Corso A: ^ Giorno ^ Ora ^ Aula ^ | Lunedì | 9-11 | E | | Mercoledì | 11-13 | E | | Giovedì | 16-18 | E | **Pagina ufficiale del corso (appunti delle lezioni, materiale didattico, avvisi, esercitazioni, ecc.) [[ http://pages.di.unipi.it/barbuti/PRLA2018.htm/| qui]] ** ===== Laboratorio di Programmazione C (A.A. 2019/20) ===== ==== MODALITA' SVOLGIMENTO PROVA GIUGNO-SETTEMBRE 2020 ==== A seguito dell'emergenza COVID-19, la prova pratica verrà svolta in forma virtuale, attraverso il gruppo TEAMS ufficiale del corso di Programmazione e Laboratorio (codice del Team: at1bosb). La prova sarà svolta individualmente dai singoli candidati, ai quali verrà richiesta la risoluzione di un problema di programmazione in C similmente a quanto fatto negli esercizi del corso. La risoluzione del problema dovrà essere sviluppata dal vivo dal candidato e le scelte implementative commentate con il docente. La funzionalità della soluzione potrà essere testata su test-case secondo prassi seguita durante il corso. ==== Comunicazioni ==== **(27/04/2020) PROVA PRATICA APPELLO STRAORDINARIO** La prova pratica per l'appello straordinario della sessione primaverile è fissata per il Mercoledì 06 Maggio h. 9.30. La prova verrà svolta in forma virtuale, attraverso il gruppo TEAMS ufficiale del corso di Programmazione e Laboratorio (codice del Team: at1bosb). La prova sarà svolta individualmente dai singoli candidati, ai quali verrà richiesta la risoluzione di un problema di programmazione in C similmente a quanto fatto negli esercizi del corso. La risoluzione del problema dovrà essere sviluppata dal vivo dal candidato e le scelte implementative commentate con il docente. La funzionalità della soluzione verrà testata su test-case secondo prassi seguita durante il corso. **(13/11/2019) SPOSTAMENTO LEZIONE** La lezione del Gruppo A3 di Mercoledì 27 Novembre ore 14:00 - 16:00 è spostata al giorno Venerdì 29 Novembre ore 14:00 - 16:00 aula M. ==== Organizzazione e Lezioni ==== **Programma** * struttura di un programma e compilazione * elementi del linguaggio: tipi di dato primitivi e definiti dall'utente, espressioni * input/output * operatori di controllo del flusso * memoria: algebra dei puntatori ed allocazione dinamica * strutture dati: array, struct e liste * ricorsione **Suddivisione in gruppi con assegnazione slot in laboratorio** ^ Corso ^ Gruppo ^ Studenti ^ Docente ^ Aula ^ Orario ^ | A | A1 | Da AA a DE | Luca Oneto | H | Martedì 11:00 - 13:00 | | A | A2 | Da DI a MI | Luca Oneto | H | Mercoledì 14:00 - 16:00 | | A | A3 | Da MO a ZZ | Davide Bacciu | M | Mercoledì 14:00 - 16:00 | **Calendario lezioni** ^ Lezione ^ Gruppo ^ Data ^ Aula ^ Argomento ^ | 1 | A1 | 17/09/19 11-13 | H | Introduzione a UNIX e alla Shell Introduzione a UNIX e alla Shell ({{:informatica:prl:lab1_introunix.pdf| slides}} - {{:informatica:prl:rubrica.zip| rubrica per esercitazione}})| | ::: | A2 | 18/09/19 14-16 | H | ::: | | ::: | A3 | 18/09/19 14-16 | M | ::: | | 2 | A1 | 24/09/19 11-13 | H | Introduzione alla Programmazione in C ({{:informatica:prl:lab2_introc.pdf| slides}}, {{:informatica:prl:esercizioaggiuntivo.pdf| Esercizio aggiuntivo}})| | ::: | A2 | 25/09/19 14-16 | H | ::: | | ::: | A3 | 25/09/19 14-16 | M | ::: | | 3 | A1 | 01/10/19 11-13 | H | Variabili, Tipi Primitivi, e Costrutti Condizionali ({{:informatica:prl:lab3_varif.pdf| slides}})| | ::: | A2 | 02/10/19 14-16 | H | ::: | | ::: | A3 | 02/10/19 14-16 | M | ::: | | 4 | A2 | 07/10/19 14-16 | H | Costrutti Iterativi e array ({{:informatica:prl:lab4_cicli.pdf| slides}}) | | ::: | A1 | 08/10/19 11-13 | H | ::: | | ::: | A3 | 09/10/19 14-16 | M | ::: | | 5 | A1 | 15/10/19 11-13 | H | Funzioni, Stack e Visibilit‡ delle Variabili in C ({{:informatica:prl:lab5_fun.pdf| slides}}) | | ::: | A2 | 16/10/19 14-16 | H | ::: | | ::: | A3 | 16/10/19 14-16 | M | ::: | | 6 | A1 | 22/10/19 11-13 | H | Puntatori e Aritmetica dei Puntatori ({{:informatica:prl:lect6-punt.pdf | slides}}) | | ::: | A2 | 23/10/19 14-16 | H | ::: | | ::: | A3 | 23/10/19 14-16 | M | ::: | | 7 | A1 | 29/10/19 11-13 | H | Tipi di dato utente ({{ :informatica:prl:lab7_tipiut.pdf | slide}})| | ::: | A2 | 30/10/19 14-16 | H | ::: | | ::: | A3 | 30/10/19 14-16 | M | ::: | | 8 | A1 | 12/11/19 11-13 | H | Liste concatenate e allocazione dinamica ({{ :informatica:prl:lect8-slides.pdf |slide}})| | ::: | A2 | 13/11/19 14-16 | H | ::: | | ::: | A3 | 13/11/19 14-16 | M | ::: | | 9 | A1 | 19/11/19 11-13 | H | Debugging ({{ :informatica:prl:lect9_test_only.pdf |slide}})| | ::: | A2 | 19/11/19 11-13 | H | ::: | | ::: | A3 | 25/11/18 14-16 | H | ::: | | 10 | A1 | 26/11/19 11-13 | H | Programmazione ricorsiva ({{ :informatica:prl:lezione10_ricorsione.pdf | slide}})| | ::: | A2 | 27/11/19 14-16 | H | ::: | | ::: | A3 | 29/11/19 14-16 | M | ::: | | 11 | A3 | 04/12/19 14-16 | M | Esercitazione prova finale ({{ :informatica:prl:bozza.zip | bozzaSoluzioneEs1}},{{ :informatica:prl:bozzaes2.zip | bozzaSoluzioneEs2}}) | ==== Materiale Didattico ==== **Macchina Virtuale Linux** E' stata predisposta una macchina virtuale Ubuntu per coloro che volessero svolgere le esercitazioni di laboratorio sul proprio PC/MAC senza installare Linux in una partizione del disco. Un tutorial che ne descrive l'installazione passo-passo può essere scaricato {{:informatica:prl:tutorialvm.pdf| qui}}. Il tutorial contiene un link per scaricare la macchina virtuale già configurata per le esigenze del laboratorio. Se riscontrate problemi nell'utilizzo della macchina virtuale su sistemi Windows provvedete ad attivare le opzioni di virtualizzazione. A tal fine accedete al BIOS della macchina: il sistema cambia a seconda dell'hardware ma tipicamente richiede la pressione di un tasto funzione, esc, canc, etc, all'avvio della macchina. Nel menù del BIOS cercate l'opzione //Virtualization Technology// (tipicamente si trova in //Advanced (Chipset) Settings//, vedi {{:informatica:prl:virtual.gif?linkonly| screenshot}}) e abilitatela selezionando //enabled//. Salvate e riavviate: a questo punto la macchina virtuale dovrebbe essere utilizzabile senza problemi. **Materiali online** Buona parte dei contenuti del Laboratorio sono trattati in questa {{:informatica:prl:dispensa.pdf| dispensa}}. Per il corso sono di particolare interesse i Capitoli 1-7. Link utili * [[http://www.cs.cf.ac.uk/Dave/C/|Programming in C]] * [[http://www.cs.swarthmore.edu/~newhall/unixhelp/c_codestyle.html|Convenzioni e buone pratiche di programmazione in C]] **Libri di Riferimento** Dennis M. Ritchie, Brian W. Kernighan Il linguaggio C Principi di programmazione e manuale di riferimento Pearson Italia ISBN: 9788871922003 Al Kelley, Ira Pohl C. Didattica e programmazione Pearson Italia ISBN: 8871922190 Il seguente è un libro di riferimento per l'utilizzo di Linux da terminale. Gli argomenti del corso sono trattati nella Parte 1. Essendo pubblicato sotto licenza Creative Commons, può essere [[http://linuxcommand.org/tlcl.php|scaricato gratuitamente]]. William Shotts The Linux Command Line No Starch Press ISBN: 9781593273897