====== Programmazione I ====== ===== FAQ ===== ==== Che linguaggio si studia? ==== Su scelta del dipartimento, si studia il linguaggio di programmazione Go. Questa è una scelta abbastanza unica tra gli atenei italiani ma generalmente apprezzata dagli studenti, vista la modernità ed eleganza di Go rispetto ad altri linguaggi come C/C++. Nelle ultime lezioni viene trattato un po' di C, richiesto eventualmente all'orale. ==== Che editor posso usare all'esame di laboratorio? ==== Qualsiasi, anche gli IDE vanno bene. Consigliamo di usare l'editor con il quale si è più affini. Per lo svolgimento dell'esame a distanza: attenzione a scegliere consapevolmente il sistema operativo da utilizzare, l'esame è pensato per lo svolgimento su GNU/Linux, saranno quindi necessarie conoscenze personali nel caso in cui si voglia utilizzare un SO differente. (Si può notare la differenza nella gestione degli input o output da file esterni o nell'utilizzo di comandi di EOF). Per chi volesse utilizzare Windows una buona soluzione potrebbe essere [[https://docs.microsoft.com/en-us/windows/wsl/install-win10|WSL]]. ==== Dove posso trovare altri esercizi dove esercitarmi? ==== Il prof. Santini di Programmazione II, ha messo a disposizione una [[https://github.com/mapio/labprog|repository]] su GitHub con moltissimi esercizi per Programmazione I. ==== Come è strutturato l’esame? ==== L’esame è composto da una prova di programmazione individuale in laboratorio (la prova contiene un esercizio di filtro: gli studenti che non superino il filtro non saranno poi valutati) e una prova scritta. A chi supera entrambe le prove viene proposto un voto (ottenuto come media dei voti delle due prove). Gl i studenti con voto proposto compreso fra 21 e 27, possono decidere se verbalizzare il voto proposto o rifiutarlo, sostenendo di nuovo l’esame in uno degli appelli successivi. Gli studenti con voto proposto inferiore a 21 devono sostenere un esame orale per verificare le loro competenze. Gli studenti con voto superiore a 27 possono verbalizzare il voto proposto oppure sostenere un esame orale (finalizzato a migliorare il voto). Le varie parti da cui l’esame è composto vanno necessariamente sostenute nello stesso appello, e in particolare chi pur avendone la possibilità decide di non presentarsi alle verbalizzazioni dovrà sostenere nuovamente l’esame. ==== Qual è il materiale a disposizione per studiare? ==== I docenti consigliano i libri: * Ivo Balbaert: Programmare in go. Pearson, ISBN 8891909661. * Alan A. Donovan, Brian W. Kernighan: The Go Programming Language, Addison-Wesley. ==== Esempi di domande ==== Alcuni esempi di domande/esercizi che possono essere chieste all'orale(parte che ha sostituito/sostituisce lo scritto post laboratorio durante la pandemia COVID) sono: * Scrivere una funzione che data una slice di stringhe, restituisce una stringa che contiene tutte le stringhe separate da una virgola * Scrivere un programma che stampa una X fatta di asterischi di dimensione/lunghezza passata come argomento da riga di comando * Scrivere una funzione che data una slice di interi e un intero x voglio determinare se x è la mediana * Definisci un tipo data e scrivi una funzione che dato un anno genera una data a caso in quell'anno Per l'esame orale con Ceselli la suddivisione nei giorni viene fatta in ordine di voto. I voti più bassi all'inizio i più alti dopo. È difficile prevedere le domande proprio a causa della suddivisione, più è alto il voto di partenza più saranno complessi i quesiti. Per quanto riguarda gli esami già effettuati: * voti sotto il 21: viene presentato un codice ed è chiesto allo studente di analizzarlo, dare il nome alle funzioni e dire cosa fanno. A volte sono presenti errori e vanno corretti. Per chi si posiziona in alto in questa fascia può essere richiesta la modifica del codice o la creazione di nuovo codice da zero. * seguiranno nuove informazioni nei giorni successivi Le domande prettamente teoriche per ora sono da escludere, capitano però richieste di funzionamento di alcune funzioni o accenni al funzionamento a basso livello in base agli interventi effettuati sul codice.