Programmazione I - Edizione 2015/2016
Informazioni generali del corso
Nome del corso: | Programmazione I [MN1-1140] |
Docente: | Paolo Valente |
Corso di Studio: | Informatica |
Tipologia: | Caratterizzante |
CFU: | 9 |
Periodo Didattico: | Primo Ciclo Semestrale |
Recapiti docente:
Ricevimento studenti: lunedì, ore 16:00 (contattare il docente).
Avvisi
Materiale didattico anni precedenti
Cliccare qui per la pagina
dell'edizione 2014/2015 del corso (nella quale troverete il link
alla pagina dell'edizione ancora precedente e così via).
Obiettivi del corso
L'insegnamento ha per obiettivo l'introduzione dello studente ai fondamenti della programmazione. Come linguaggio di riferimento viene usato il sottoinsieme procedurale del C++, mentre come sistema operativo GNU/Linux.
Nel corso si adotta l'approccio "imparare facendo" (e spero anche "divertendosi"): quasi ogni nuova nozione o dettaglio è subito messo in pratica al calcolatore con esercizi di complessità crescente.
Prerequisiti e mini-corso di introduzione all'uso del PC
L'unico prerequisito del corso di
Programmazione I è essere in grado di effettuare tutte le
operazioni di base di un file system, nonché scrivere e
modificare file di testo. In merito, tutte le conoscenze
necessarie per svolgere questi compiti in ambiente
GNU/Linux vengono fornite nel mini-corso di introduzione
all'uso del PC. Il calendario del corso è in fase
di definizione,
mentre il materiale didattico della prima lezione
di tale corso è qui.
Se si desidera svolgere gli esercizi sul proprio PC, si puo'
utilizzare qualsiasi distribuzione Linux senza problemi. Nel
dubbio, consiglio di scegliere semplicemente la distribuzione che
si preferisce o che da meno problemi (come, ad esempio, la
distribuzione Ubuntu). Anche l'uso di macchine virtuali (ad esempio
VirtualBox) o dell'ambiente Cygwin va bene.
Studenti non frequentanti
Non è obbligatorio seguire le lezioni per poter
sostenere l'esame di questo corso. In particolare, per
gli studenti non frequentanti, si consiglia di seguire
attentamente le indicazioni riportate nella sezioni
"Prerequisiti e mini-corso di introduzione all'uso del PC",
"Materiale didattico" e "Modalità d'esame".
Programma del corso
- Obiettivi e contenuti dell'informatica, algoritmi e programmi.
- Costanti e variabili, tipi di dato primitivi, definizioni e dichiarazioni, espressioni aritmetiche e logiche, istruzioni di assegnamento, operatori, input/output, conversioni di
tipo.
- Concetto di blocco. Strutture di controllo condizionali e iterative. Regole di visibilità e durata delle variabili.
- Tipi di dato strutturati: vettori, matrici, stringhe, struct. Concetto di riferimento e puntatore.
- Funzioni, passaggio dei parametri per valore e per riferimento.
- Memoria dinamica, record di attivazione delle funzioni, gestione memoria stack.
- Gestione dei file di testo e dei file binari.
- Panoramica sui linguaggi di programmazione. Interpreti, compilatori, linker.
Orario delle lezioni
Tutte le lezioni dell'insegnamento di Programmazione I si
sono tenute nel Laboratorio Informatico di Base, al piano terra del
Dipartimento di Matematica, con il
seguente orario. Come
potete notare, causa capienza limitata del laboratorio, il corso
è sdoppiato: gli studenti i cui cognomi iniziano con una lettera
nell'intervallo A-L hanno fatto lezione con me (Paolo Valente),
mentre gli altri con Paolo Burgio. Controllate quindi qual è il
vostro orario corretto, in base al vostro cognome.
Materiale didattico
Tutte le nozioni fornite nel corso sono riportate nelle
seguenti presentazioni sulle lezioni e sulle
esercitazioni. Non è quindi obbligatorio l'utilizzo di alcun
libro di testo. Le presentazioni relative alle lezioni guidano
anche nella fruizione delle presentazioni sulle esercitazioni:
in particolare indicano quali esercizi svolgere man mano che
si procede nella teoria, con l'ovvio sottointeso che, prima di
arrivare a svolgere l'esercizio indicato e contenuto in una
data esercitazione, bisogna aver studiato tutte le slide della
esercitazione fino alla slide relativa all'esercizio
stesso.
In base all'esperienza passata, la quasi totalità degli
studenti, frequentanti e non, è riuscita a studiare con
profitto ed a superare l'esame utilizzando solo le seguenti
presentazioni. In ogni caso, per studenti che si sentono
maggiormente a proprio agio con un libro di testo, che trovano
le slide in qualche modo insufficienti o che vogliono
eventualmente approfondire degli argomenti, si consigliano i
testi riportati nella sezione Testi
consigliati come ulteriore riferimento.
Nota sulla pubblicazione delle presentazioni
Le presentazioni e gli esercizi verranno pubblicati man mano
che procedono le lezioni. Ciascuna presentazione sarà inoltre
tagliata all'ultima slide vista a lezione, e sarà estesa man
mano che nuove slide saranno state spiegate a lezione. Dalle
presentazioni presenti in un dato momento potete quindi
dedurre a che punto siamo arrivati a lezione. Inoltre,
siccome, come detto sopra, le presentazioni sono pubblicate
solo in parte se non sono state viste per intero a lezione, il
consiglio per chi non sta frequentando e vuole essere sicuro
di utilizzare solo materiale definitivo, è di studiare man
mano solo fino alla penultima presentazione correntemente
disponibile.
Lezioni
- Introduzione dell'insegnamento di Programmazione I, pdf
- Problemi, algoritmi, programmi, pdf
- Introduzione al linguaggio C/C++: tipi di dato e
numeri interi, variabili e costanti con nome,
struttura (semplificata) di un programma,
pdf
- Completamento assegnamento, compendio sintassi
C/C++, tipo booleano ed operatori logici, espressioni
aritmetiche e
logiche,
pdf
- Programmazione strutturata, istruzioni
condizionali,
pdf
- Istruzioni cicliche, pdf; versione in bianco e nero di alcuni degli esercizi per casa, ps
- Notazione
posizionale,
pdf
- Funzioni,
pdf
- Visibilità e tempo di vita, pdf
- Tipi primitivi (I parte): compendio booleani, tipo
carattere, conversioni esplicite,
pdf
- Tipi primitivi (II parte): tipi enum, float e double; conversioni di tipo,
pdf
- Riferimenti e passaggio dei parametri per
riferimento,
pdf
- Ingegneria del codice, pdf
- Array, pdf
- Stream, file ed input/output
formattato, pdf
- Stringhe, struct e matrici statiche, pdf
- Array dinamici e puntatori, pdf
- Input/output non
formattato, pdf
- Compendio C/C++, pdf
- Algoritmi e programmi, traduttori e compilatori, ambienti di sviluppo, pdf
- Gestione della memoria, pdf
- Introduzione alle liste, pdf
Esercitazioni
- Introduzione ad ingresso e uscita, compilazione, pdf
- Completamento ingresso e uscita, variabili e costanti
intere, cartella
- Tipo booleano, operatori relazionali e logici, espressioni logiche, istruzioni di scelta semplice, cartella
- Istruzioni di scelta multipla, overflow, cartella
- Istruzioni cicliche, notazione
posizionale, cartella
- Funzioni, cartella
- Visibilità, tipi di dato primitivi e
conversioni, cartella
- Riferimenti, array, I/O formattato, cartella
- Stringhe, struct e
matrici, cartella
- Array dinamici, IO non formattato, cartella
Modalità d'esame
- L'esame si compone di due prove:
- Una prova
scritta (a volte chiamata anche test) con
maggioranza di domande a scelta multipla e alcune
domande aperte
- Non si può utilizzare materiale didattico,
appunti o altri manuali
- Al termine del tempo previsto, saranno ritirati gli
elaborati degli studenti, ed avverrà una correzione
pubblica.
- Dopo la correzione pubblica, lo studente potrà
decidere se farsi registrare il voto o meno. In
particolare, per non farsi registrare il voto della
prova scritta, basterà andare semplicemente via.
Nel caso di mancata registrazione, l'ultima prova
scritta superata rimane valida per gli appelli
successivi (per accedere alla prova di
programmazione, come spiegato sotto), per la durata
di un anno accademico. Nel caso invece lo studente
si faccia registrare il voto, il nuovo voto
sostituisce il precedente.
- Si può ritentare la prova scritta tutte le volte
che si vuole, senza alcun vincolo di alcun tipo, o
alcun obbligo di saltare appelli.
- Una prova di programmazione, spesso
chiamata prova pratica per maggiore
chiarezza, da svolgersi su calcolatore.
- Si può accedere alla prova pratica solo se
si è superata almeno una prova scritta nell'arco
accademico in corso (un anno accademico N/(N+1) va
dal primo ottobre dell'anno solare N, al primo
aprile dell'anno solare N+2).
- Si può ritentare la prova pratica tutte le volte
che si vuole, senza alcun vincolo di alcun tipo, o
alcun obbligo di saltare appelli.
- La prova consiste nella scrittura di un programma o
frammento di codice che risponda alle specifiche riportate
nella traccia fornita all'atto della prova stessa.
- Si può utilizzare materiale didattico, appunti o
manuali. Data la possibilità che non ci si possa
connettere ad Internet durante la prova, si
consiglia di portare con sé tutto il materiale
didattico che si ritiene opportuno.
- Durante la prova lo studente avrà modo di
scrivere, compilare e provare il proprio elaborato nel tempo a
disposizione. Entro tale tempo lo studente deve informare il
docente della sua eventuale intenzione di abbandonare la
prova. Se non abbandona, il suo elaborato sarà preso in
consegna dal docente, ma lo studente avrà comunque ancora la
possibilità di decidere di non consegnare dopo la correzione
pubblica, come di seguito specificato.
- Al
termine del tempo previsto avverrà una correzione
pubblica. Ogni algoritmo equivalente a quello mostrato nella
correzione è valido per superare la prova. Ovviamente l'esito
della prova in termini di punti dipenderà dall'aderenza alle
specifiche date nella traccia, dagli errori introdotti e, in
misura minore, dalla efficienza/inefficienza in termini di
quantità di codice scritto o numeri di passi effettuati
dall'algoritmo realizzato dallo studente.
- Dopo la
correzione pubblica, lo studente, ovviamente purché non abbia
precedentemente abbandonato, può decidere se consegnare o
meno. Nel caso di mancata consegna, la prova scritta rimane
valida per gli appelli successivi. Nel caso invece lo studente
consegni, questo conclude l'esame.
- Se i vincoli di tempo lo permettono, l'elaborato
di ciascuno degli studenti che hanno consegnato
viene corretto immediatamente, in presenza dello
studente stesso. Se i vincoli di tempo non
permettono una correzione immediata, gli studenti
che hanno consegnato saranno convocati per la
correzione in un secondo momento.
- Per ciascuno studente che ha consegnato, l'esito
della prova sarà comunicato contestualmente alla
correzione dell'elaborato dello studente, e, in
base all'esito della prova pratica e della prova
scritta, sarà stabilito l'esito dell'intero
esame. Nel caso lo studente non abbia superato
l'esame, oppure rifiuti il voto proposto,
sia la prova scritta che quella di programmazione
saranno invalidate, e pertanto dovranno essere sostenute di
nuovo.
- Quest'anno potrà accadere che la prova di
programmazione sia svolta nel laboratorio LINFA (ex aula FA2F,
ora Laboratorio P2.6) del
Dipartimento
di Ingegneria Enzo Ferrari, perlomeno per i primi appelli,
a causa dell'insufficienza del numero di PC disponibili in
altri laboratori. Sottolineo che il laboratorio LINFA è
situato ad Ingegneria, e non nell'edificio di
Matematica del nostro dipartimento di Scienze Fisiche,
Informatiche e Matematiche. Se, per la prova pratica a cui
volete partecipare, è effettivamente indicato tale
laboratorio come luogo della prova, e se non vi siete mai
stati, vi consiglio vivamente di assicurarvi di aver capito
dov'è, facendo eventualmente un sopralluogo, prima
della mattina stessa della prova. Indipendentemente da quale
sia il laboratorio prescelto, la prova verrà svolta su
uno dei PC di tale laboratorio. Potrebbe tuttavia capitare, se
il numero di partecipanti alla prova è maggiore del
numero di PC disponibili, che sia concesso l'uso del proprio
portatile a qualche studente. Può essere quindi una
buona idea portare eventualmente con sé il proprio
portatile, se lo si ha.
- Sempre a causa del fatto che il numero di PC è
inferiore al numero di studenti che possono iscriversi alla
prova di programmazione, la prova di programmazione è
sdoppiata. Sarà cioè svolta in due date distinte
e per due gruppi distinti di studenti. Il primo gruppo
è formato dagli studenti il cui cognome inizia con una
lettera nell'intervallo A-N, mentre il secondo gruppo è
formato dagli studenti il cui cognome inizia con una lettera
nell'intervallo O-Z. Controllare quindi bene il proprio gruppo
di appartenenza per decidere a quale prova di programmazione
iscriversi.
Tipicamente, negli ultimi appelli il numero
di potenziali partecipanti alla prova di programmazione
scende, per cui probabilmente non sarà necessario lo
sdoppiamento della prova stessa in tali appelli.
- Sarà obbligatorio utilizzare, come
sistema operativo, la distribuzione GNU/Linux indicata
dal docente. Per gli studenti non frequentanti è fortemente
consigliato di assicurarsi di aver familiarizzato un minimo
con l'ambiente da utilizzare durante l'esame. Si consiglia
vivamente di assicurarsi di essere in grado di editare un file
sorgente, compilarlo ed eseguirlo.
- Per chi non fosse
pratico dell'ambiente GNU/Linux, può essere utile consultare
il materiale della prima lezione
del mini corso di Introduzione all'uso del PC, o qualsiasi
altro tutorial introduttivo sull'uso del sistema operativo
Linux.
- Si ricorda che:
- nel caso di superamento della prova di programmazione, e di
insoddisfazione rispetto al voto proposto è possibile
sostenere un orale facoltativo (che potrà
migliorare ma anche peggiorare il voto acquisito dalle prove
scritta e di programmazione)
- è possibile ripetere la prova scritta negli appelli
successivi tenendo presente che il voto della prova scritta
precedente rimane valido fino alla consegna della nuova prova
scritta e comunque non oltre l'anno accademico in corso
- è possibile ripetere la prova di programmazione negli
appelli successivi tenendo presente che il voto della prova
scritta precedente rimane valido fino alla consegna della nuova
prova di programmazione e comunque non oltre l'anno accademico
in corso; sulla prova di programmazione potrebbero essere
aggiunti dei vincoli ulteriori, a causa della limitata capienza
del laboratorio base (saranno comunicati se e quando decisi)
- Ci si iscrive su esse3. In particolare ci si può iscrivere
alla prova scritta, all'appello vero e proprio, o ad
entrambi. L'iscrizione all'appello vero e proprio implica
l'iscrizione alla prova pratica. Quindi: 1) se non si è ancora mai
superata la prova scritta o se si intende solo rifare la prova
scritta ci si può iscrivere solo alla prova scritta, 2) per potersi
iscrivere direttamente all'appello vero e proprio bisogna aver
superato la prova scritta in uno degli appelli precedenti dello
stesso anno accademico. Se si rientra nel caso 2) e si vuole anche
provare a ripetere la prova scritta, ci si iscrive sia alla prova
scritta che all'appello vero e proprio. L'iscrizione a ciascuna
delle due prove è aperta fino a tre giorni prima della prova
stessa.
Nel caso ci si sia immatricolati in anni precedenti a quello
in corso, e si desideri sostenere l'esame secondo le regole del
vecchio esame di Programmazione (ossia sostanzialmente utilizzando
il linguaggio C anziché il C++), occorre comunicare la cosa al
docente via e-mail.
Attenzione, nel caso non pervenga alcuna segnalazione
in merito, non saranno preparate tracce alternative, per cui non
sarà di fatto possibile sostenere l'esame in base alle vecchie
regole.
NB: iscriversi per poi cambiare idea e non presentarsi non comporta nessun problema, mentre, al
contrario iscrizioni pervenute in ritardo non saranno accettate.
Prove d'esame
- Mini scritti
- Traccia e soluzione mini-scritto 24 Ottobre 2016, cartella
- Tracce e soluzioni mini-prova d'esame 25 Novembre 2015, cartella
- Primo appello invernale:
- Secondo appello invernale:
- Terzo appello invernale:
- Primo appello estivo:
- Secondo appello estivo:
- Appello autunnale:
Testi consigliati
- Bruce Eckel
Thinking in C++, 2nd Edition, Volume 1
http://www.mindview.net/Books/TICPP/ThinkingInCPP2e.html
Siti per il download gratuito:
http://www.mindview.net/Books/DownloadSites
- Testo chiaro e completo per apprendere il linguaggio, e per acquisire dimistichezza con il lessico della programmazione (ed in generale dell'Informatica) in lingua Inglese.
- Andrea Domenici, Graziano Frosini
Introduzione alla programmazione ed elementi di strutture dati con il Linguaggio C++
Franco Angeli
ISBN 88-464-3173-1
- Più sintetico e formale del precedente, ma molto chiaro e conciso. Anche questo molto appropriato per incominciare.
- Bjarne Stroustrup
C++. Linguaggio, libreria standard, principi di programmazione
Pearson Education Italia
- Scritto dall'autore stesso del linguaggio C++, non è di facile lettura come i precedenti, e soprattutto presuppone la conoscenza del linguaggio C o del C++ stesso. E' segnalato in questo elenco quale testo di approfondimento e riferimento sul C++ (con alta probabilità tra i migliori disponibili).