Invito all'onestà

L'idea di dare un progetto da fare a casa, con calma e per gruppi, porta con sé l'idea che il progetto lo facciate voi. Non dovete farvi “aiutare” (fastidioso eufemismo per il fare scrivere il proprio progetto da altri). La cosa viene inevitabilmente fuori al momento dell'esame, dato che vi viene richiesto di descrivere il comportamento del programma e di scrivere qualche breve frammento di codice. Non è divertente né per me né per voi.

Nuovo! Ammissioni all'appello del 14 febbraio.

Nuovo! Progetto per l'appello del 14 febbraio.

Programma

Per informazioni/chiarimenti, dopo avere letto alcune indicazioni di base potete scrivere al docente (Sebastiano Vigna).

Testi consigliati

Letture avanzate

Video

Programma

Il programma è composto dagli argomenti spiegati a lezione.

Per riferimento, sul King gli argomenti corrispondono approssimativamente ai primi 14 capitoli (esclusa l'istruzione goto), più i paragrafi 14.1, 14.2, 15.1-15.3, 16.1-16.3, 17.1-17.4, 20.1, 20.2, 22.1-22.5, 22.8, 23.2, 23.3, 23.5, 23.6, 24.1, 26.2 (fino a "Pseudo-Random Sequence Generation Function" incluse), 26.3.

Modalità d'esame

Ci sono due modalità di svolgimento dell'esame: per chi ha partecipato ai due compitini e ha ottenuto almeno 15 in ciascuno e 18 in media è possibile partecipare all'appello automatizzato del 20 gennaio. Altrimenti, è necessario partecipare a un appello qualunque (il primo è il 21 gennaio) presentando un progetto e sottoponendosi a un esame orale.

L'appello automatizzato consiste in una serie di esercizi che vanno svolti nell'aula informatizzata. Un server fornisce diversi esercizi possibili che vanno risolti tramite programmazione. Lo stesso server permette di sottoporre soluzioni. Il voto dell'esame dipende da quello dei compitini e dagli esercizi svolti.

Gli appelli normali richiedono invece la sottoposizione della soluzione di un progetto, la sua discussione e un esame orale. Il tema del progetto è specifico all'appello, e viene pubblicato circa due settimane prima. Il progetto viene valutato in maniera automatica su dieci casi di input, e deve funzionare correttamente su almeno sei. Dato che la correzione è automatica, è essenziale che il programma stampi esattamente quanto richiesto.

Progetto

  1. Circa 15 giorni prima della data fissata per ciascun appello, il testo del progetto viene pubblicato su questa pagina.
  2. Il progetto consiste nella scrittura di un programma C, il cui codice (sorgente) deve essere inviato per posta elettronica entro una data prefissata. Il programma può essere sviluppato in gruppi di al massimo tre persone.

Colloquio

  1. I colloqui vengono effettuati alla data dell'appello.
  2. Vengono ammessi al colloquio solo gli studenti che hanno inviato in tempo utile il progetto e il cui progetto è stato considerato corretto.
  3. Il colloquio verte sul progetto e sui contenuti del corso.

Esempi

Durante le lezioni sono stati spiegati e commentati alcuni programmi esemplificativi, che potete scaricare e modificare.

Temi di laboratorio

Durante lo svolgimento del laboratorio vengono proposti dei temi da risolvere. Potete scaricarli e provare a svolgerli autonomamente. Sono anche disponibili i temi (simili) degli anni accademici 2000-2001, 2001-2002, 2002-2003, 2003-2004, 2004-2005, 2005-2006, 2006-2007, 2008-2009, 2009-2010, 2010-2011 e 2011-2012.

Ambiente di laboratorio

L'ambiente utilizzato in laboratorio è una versione di Linux. È possibile riprodurre a casa propria un ambiente di lavoro molto simile utilizzando una versione personalizzata live di Ubuntu (la personalizzazione consiste nel fatto che è stato aggiunto il compilatore C con la relativa documentazione e il debugger ddd). L'ambiente parte direttamente da CD e non necessita di alcuna operazione di installazione sul computer (eccetto, ovviamente, per il fatto che il computer deve avere il boot da CD abilitato). Potete scaricare l'immagine ISO del CD e masterizzarlo. Si tratta di software libero, e quindi potete copiarlo, distribuirlo e modificarlo liberamente.

Se avete problemi con il boot (cioè il CD non parte nonostante fosse nel lettore quando il computer è stato riavviato) dovete ritoccare la configurazione del vostro BIOS in maniera che il boot da CD sia abilitato. Se non sapete come fare, trovate un amico/parente in grado di aiutarvi.

I due svantaggi fondamentali del CD live sono la lentezza (i supporti ottici sono molto più lenti di quelli magnetici o a stato solido) e il fatto che dovete sempre ricordarvi di salvare su qualche supporto separato i risultati del vostro lavoro, dato che tutto quello che fate viene memorizzato in RAM, e quindi non in maniera permanente.

Per ovviare al problema della lentezza potete provare a utilizzare UNetbootin, che vi permette di trasferire l'immagine ISO su una chiavetta USB ed eseguire Linux da lì. C'è sempre il problema della non persistenza dei dati, ma il funzionamento da chiavetta è molto più veloce.

Se il CD live funziona correttamente, potete anche utilizzarlo per installare Ubuntu su una partizione del vostro disco rigido. Questa operazione però richiede la creazione di una partizione vuota—un'operazione delicata e con effetti collaterali potenzialmente disastrosi. Una soluzione più flessibile è data dalla virtualizzazione—la creazione di una macchina virtuale all'interno del vostro computer.

Per creare una macchina virtuale, scaricate VirtualBox, il nuovo software gratuito di virtualizzazione della Oracle e seguite le istruzioni riportate nel (corposo) manuale per creare una macchina virtuale dedicata a Linux. Potrete a questo punto utilizzare il CD live per installare Ubuntu nella macchina virtuale (se sapete come fare, potete addirittura effettuare l'installazione utilizzando l'immagine ISO che avete scaricato come CD virtuale).

Se utilizzate un CD standard di Ubuntu per l'installazione, potete aggiungere quel che manca (avendo una connessione di rete funzionante) tramite i comandi

sudo apt-get update
sudo apt-get -y install gcc gcc-doc binutils-doc make manpages-dev libc6-dev ddd

Compilatori

Uno dei migliori compilatori esistenti per il C è quello creato all'interno del progetto GNU. Il compilatore è distribuito con qualunque versione di Linux, ed è quello utilizzato in laboratorio. Alternativamente, potete installare la versione per Windows dell'ambiente GNU, o l'ambiente all-in-one realizzato dall'Università del Colorado.

Se avete un Macintosh, la Apple mette a disposizione gratuitamente XCode, un ambiente di sviluppo che comprende anche il compilatore GNU. Non avete quindi bisogno di installare Ubuntu.

In ogni caso, se cercate utility, compilatori e così via per Windows o per Macintosh, ricerche in grande con motori come Google possono dare buoni risultati.

Editor

L'editor utilizzato a lezione è gedit; è semplice da usare ma sufficientemente potente da poter essere utilizzato per la programmazione. Se utilizzate una distribuzione di Linux basata su KDE, potete utilizzare kate. Per il Macintosh esiste TextWrangler.

Facendo qualche ricerca in rete è possibile trovare editor per qualunque sistema. Se utilizzate un ambiente di sviluppo integrato, naturalmente, l'editor è contenuto nel sistema. Eclipse è un ambiente di sviluppo integrato estremamente sofisticato che consiglio caldamente.