| INFORMATICA |
|||
| NEWS | |||
![]() |
(07/03/2012) Il secondo appello invernale (da recuperare) è fissato per il giorno lunedì 19 Marzo, ore 10:00, aula 9 nuovi edifici. Per iscriversi mandate una email con il consueto formato il giovedì precedente (15 Marzo). La verbalizzazione si farà nel pomeriggio del giorno stesso. | ||
![]() |
(24/02/2012) Questa mattina mi sono svegliato con la febbre alta, e non sono in grado di venire all'esame. Ho telefonato in presidenza e segreteria studenti per farvi avvisare, ma non mi hanno risposto. Mi dispiace per l'inconveniente. Se vedete il sito, per favore avvisate gli altri studenti. L'esame sarà rinviato a data da fissare. Tenete d'occhio il sito nei prossimi giorni. | ||
![]() |
(24/01/2012) I due
appelli invernali si terranno nei giorni Lunedì 13/2 e
Venerdì 24/2, in entrambi i casi alle 9:00 in Aula B6
(dovrebbero essere nel nuovissimo edificio della didattica, ma
controllate per sicurezza). Ricordo che ciascuno studente può
sostenere uno solo dei due appelli (nel momento che si riceve il foglio del compito, è obbligatorio consegnare). La verbalizzazione avverrà nel mio ufficio, stanza D1-12, in data e orario da stabilire in base al numero dei compiti consegnati. Molto probabilmente sarà nel pomeriggio del giorno stesso dell'esame. Per l'iscrizione all'esame, inviatemi una mail con Nome e Cognome seguiti da data e nome dell'esame, nei giorni 8/2 e 20/2, rispettivamente. Ricordo che questa è l'ultima occasione per sostenere l'esame di Informatica con me, visto che non terrò il corso in questo anno accademico. |
||
![]() |
(22/09/2011) Trovate i voti del secondo appello autunnale qui. | ||
![]() |
(14/09/2011) Trovate i voti del primo appello autunnale qui. | ||
![]() |
(01/09/2011) Gli studenti che dovessero verbalizzare un esame da 5 crediti sono esonerati dallo studio dell'ultimo capitolo affrontato (sull'overloading degli operatori). Tali studenti devono indicare che l'esame è da 5 crediti in cima alla prima pagina del compito, in modo che io ne possa tenere conto in fase di correzione (non considerando gli esercizi e le parti di esercizi relativi a quell'argomento). | ||
![]() |
(25/08/2011) I due appelli autunnali si terrano nei giorni 13/09 e 20/09 alle 10:00 in Aula 1 PP2. Le rispettive verbalizzazioni saranno nei giorni 16/09 e 23/09, sempre alle 10:00 nel mio ufficio. Per iscriversi a ciascun appello mandatemi una email con oggetto del tipo "Primo/Secondo Appello Informatica Nome COGNOME" nei giorni 10-11/09 e 17-18/09 rispettivamente. |
||
![]() |
(20/07/2011) Trovate i voti del secondo appello estivo qui. | ||
![]() |
(07/07/2011) Trovate i voti del primo appello qui. Tutti i compiti saranno visibili nei giorni di verbalizzazione. Il voto potrà cambiare, ma solo per correggere mie sviste (non ci sarà un orale). Ricordo che chi partecipa ad appelli successivi automaticamente rinuncia al voto ottenuto. Il voto ottenuto può essere verbalizzato in qualunque data di verbalizzazione entro l'anno accademico (oltre non posso garantire). |
||
![]() |
(30/06/2011) Ho
dimenticato di menzionare l'iscrizione all'esame. Vi prego di mandarmi
una mail con oggetto (così non devo aprire la mail) del tipo "Primo/Secondo Appello Informatica Nome COGNOME" nei giorni 04/07 e 15/07 rispettivamente (per favore, non scrivete prima). L'iscrizione mi serve solo per stampare un numero sufficiente di compiti e comunque preparerò alcune copie in più |
||
![]() |
(28/06/2011) Per un
impegno lavorativo sopraggiunto adesso, devo posticipare il secondo
appello al 19/07 e la relativa verbalizzazione al 21 (stessi luoghi ed orari) |
||
![]() |
(28/06/2011) I due appelli estivi sono fissati per il 07/07, 10:00-12:00, Aula 3 PP2, e il 14/07, 10:00-12:00, Aula 7 PP2. Le verbalizzazioni saranno rispettivamente nei giorni 12/07 e 19/07, sempre alle 10:00 nel mio ufficio. |
||
![]() |
(24/06/2011)
Tentativamente, i due appelli estivi si terrano nei giorni 08/07 e
15/07. Devo verificare la disponibilità di aule per il luogo ed orario esatti. |
||
![]() |
(01/06/2011) Non ci sarà lezione nei giorni 15/06 e 16/06. | ||
![]() |
(16/03/2011) Alcuni
studenti mi hanno chiesto se era possibile evitare la lezione il
Mercoledì. Ho ricontrollato la disponibilità delle aule con proiettore funzionante e come ricordavo non esistono purtroppo alternative. |
||
![]() |
(11/03/2011) Il
proiettore in Aula 8 PP1 non funziona e l'università non dispone
di fondi per ripararlo al momento. Per questo motivo le lezioni si terranno d'ora in poi Mercoledì 11:30-13:00 in Aula 3 PP2, e Giovedì 11:30-13:00 in Aula 7 PP2. Il ricevimento sarà Mercoledì e Giovedì dopo lezione nel mio ufficio, ma solo avvertendomi in classe o per email il giorno prima. Ho verificato che il proiettore funziona nelle due suddette aule. Il cambio nei giorni ed orari è dovuto alla mancanza di aule disponibili con proiettore (funzionante). Mi scuso per il disagio di oggi e per il cambio di orario, che comunque non dipendono dalla mia volontà. |
||
![]() |
Ricordo che non ci sarà lezione il giorno 18/03/2011. | ||
![]() |
Alcuni studenti mi
hanno segnalato difficoltà con l'istallazione del compilatore,
per motivi legati al sistema operativo (troppo nuovo). Su gentile segnalazione di uno studente, due link alternativi che potrebbero essere utili sono: http://www.bloodshed.net/dev/devcpp.html http://download.html.it/software/getit/1903/bloodshed-dev-c/ |
||
![]() |
Mi è stato
segnalato che la nuova versione del libro non contiene il CD con il
codice. Questo non costituisce un serio problema. Infatti varianti del codice saranno rese disponibile su questo sito. Inoltre il codice sul CD è uguale a quello sul libro: quindi basta copiarlo se necessario. |
||
![]() |
Le lezioni inizieranno in modo regolare martedì 01/03/2011. | ||
INFORMAZIONI GENERALI |
|||
![]() |
Obiettivi del corso: imparare le basi della programmazione, utilizzando il C++ come linguaggio di riferimento. | ||
![]() |
Periodo di svolgimento del corso: primo anno, secondo semestre, 28/02/2011-25/06/2011. | ||
![]() |
Lezioni: aula 8 PP1, martedì 14:00-15:30, venerdì 9:45-11:15. | ||
![]() |
Ricevimento: a
fine lezione o venerdì 11:30-12:30 nel mio ufficio (nuovi
edifici, blocco D, primo piano, stanza D1-12). Nei giorni in cui non c'è lezione il ricevimento è su appuntamento via email. |
||
![]() |
Testi: C++ Fondamenti di Programmazione, Harvey M. Deitel e Paul. J. Deitel. Apogeo. | ||
![]() |
Modalità d'esame: esame
scritto e discussione del compito in fase di verbalizzazione. Due
appelli nel periodo 27/06/2011-23/07/2011, due appelli nel periodo 29/08/2011-24/09/2011, uno a scelta di due appelli nella sessione invernale (date ancora non disponibili, tendenzialmente Gennaio-Febbraio 2012, verificare sul sito della Facoltà) |
||
![]() |
Modalità di frequenza: facoltativa ma fortemente consigliata. | ||
![]() |
Modalità d'erogazione: frontale. | ||
![]() |
Voti: sono disponibili qui le proposte di voto (non ancora verbalizzate) di tutti i corsi che insegno. | ||
PROGRAMMA E SLIDES |
|||
![]() |
Compilatore: Alcuni
suggerimenti su come installare ed utilizzare un compilatore C++
(indicazioni di massima, alcuni dettagli possono cambiare nel tempo). |
||
![]() |
Introduzione: Cenni
su architetture, sistemi operativi, linguaggi di programmazione,
programmazione strutturata e ad oggetti. Utilizzo dell'I/O, variabili, operatori aritmetici. |
||
![]() |
Strutture di Controllo: Algoritmi,
strutture di controllo, diagrammi di flusso. Istruzioni if, if/else,
while. Operatori di assegnazione e incremento. Istruzioni for, switch, do/while, break, continue. Operatori logici. |
||
![]() |
Funzioni: Progettazione top-down e funzioni. Librerie, prototipi ed header. Visibilità. Ricorsione ed iterazione. Passaggio Parametri. Overloading di funzioni. |
||
![]() |
Array: Dichiarazione, inizializzazione, utilizzo. Array come parametri. Ordinamento e ricerca. Array multi-dimensionali. | ||
![]() |
Puntatori: Dichiarazione, inizializzazione, utilizzo. Operatori e aritmetica dei puntatori. Puntatori a funzione. Caratteri e stringhe. | ||
![]() |
Classi 1: Programmazione ad oggetti. Struct. Dichiarazione ed utilizzo di classi. Specificatori di accesso. Costruttori e distruttori. Visibilità. | ||
![]() |
Classi 2: Oggetti e metodi const. Composizione di classi. Funzioni e classi friend. Overloading di operatori. | ||
|
ESEMPI DI PROGRAMMI |
|||
| Vi prego di segnalarmi eventuali errori/problemi. | |||
![]() |
CAPITOLO 1: welcome.cpp, welcome2.cpp, operatoriAritmetici, operatoriAritmetici2, operatoriAritmetici3, operatoriRelazionali, operatoriRelazionali2 | ||
| Esercizio 1: Scambiare il valore di due variabili intere senza utilizzare una variabile d'appoggio | |||
![]() |
CAPITOLO 2: CicloContatore.cpp, CicloContatore2.cpp, CicloContatore3.cpp, OperatoriIncremento.cpp, CicloFor.cpp, CicloFor2.cpp, CicloFor3_ritardo.cpp, DoWhile.cpp, Break.cpp, Continue.cpp, Switch.cpp, CaratteriASCII.cpp, OperatoriLogici.cpp, OperatoriLogici2.cpp, OperatoriLogici3.cpp, SommaQuadrati.cpp, SommaQuadrati2.cpp, InteresseComposto.cpp, InteresseComposto2.cpp, InteresseComposto3.cpp |
||
![]() |
CAPITOLO 3: Funzioni1.cpp, Funzioni2_prototipo.cpp, Funzioni3_LibreriaMatematica.cpp, Funzioni4_massimo.cpp, Funzioni5_rand.cpp, Funzioni5_rand2.cpp, Funzioni5_rand3.cpp, Funzioni5_rand4.cpp, Funzioni5_rand5.cpp, Funzioni6_enum.cpp, Funzioni7_visibilita.cpp, Funzioni8_ricorsione.cpp, Funzioni8_ricorsione2.cpp, Funzioni8_ricorsione3.cpp, Funzioni8_ricorsione4.cpp, Funzioni9_noArgomenti.cpp, Funzioni10_inline.cpp, Funzioni11_passRiferimento.cpp, Funzioni11_passRiferimento2.cpp, Funzioni12_argomentiDef.cpp, Funzioni13_overloading.cpp, Funzioni13_overloading2.cpp, Funzioni13_overloading3.cpp, Funzioni14_unaryRes.cpp, Funzioni15_template.cpp, Funzioni15_template2.cpp, Funzioni16_header.cpp, Funzioni16_header.h, Funzioni16_header_altro.cpp |
||
![]() |
CAPITOLO 4: Array1.cpp, Array2_inizializzazione.cpp, Array2_inizializzazione2.cpp, Array2_inizializzazione3.cpp, Array2_inizializzazione4.cpp, Array2_inizializzazione5.cpp, Array3_const.cpp, Array3_const2.cpp, Array4_limiti.cpp, Array5_statistica.cpp, Array5_statistica2.cpp, Array6_stringhe.cpp, Array7_static.cpp, Array8_parametro.cpp, Array8_parametro2.cpp, Array9_BubbleSort.cpp, Array9_SelectionSort.cpp, Array9_InsertionSort.cpp, Array9_MergeSort.cpp, Array10_ModaMediaMediana.cpp, Array11_ricercaLineare.cpp, Array12_ricercaBinaria1.cpp, Array12_ricercaBinaria2.cpp, Array13_multidimensionali.cpp, Array13_multidimensionali2.cpp, Array14_interesseComposto.cpp, Array15_fibonacci.cpp, Array16_determinante.cpp |
||
| Esercizio 1: Scrivere un programma per l'nversione di una matrice con il metodo dei cofattori (dettagli) Esercizio 2: Implementare l'algoritmo di ordinamento QuickSort (dettagli) Esercizio 3: Implementare l'algoritmo QuickSort in loco (dettagli) Esercizio 4: Risolvere il problema della selezione con QuickSelect (dettagli) |
|||
![]() |
CAPITOLO 5: Puntatori1.cpp, Puntatori2_parametri.cpp, Puntatori3_const.cpp, Puntatori4_BubbleSort.cpp, Puntatori5_sizeof.cpp, Puntatori5_sizeof2.cpp, Puntatori6_void.cpp, Puntatori7_array.cpp, Puntatori7_array2.cpp, Puntatori8_arrayPuntatori.cpp, Puntatori9_funzioni.cpp, Puntatori9_funzioni2.cpp, Puntatori10_stringhe.cpp, Puntatori10_stringhe2.cpp, Puntatori10_stringhe3.cpp, Puntatori10_stringhe4.cpp, Puntatori10_stringhe5.cpp |
||
| Esercizio 1:
Sviluppare un'implementazione più efficiente della funzione
deal() in "Puntatori8_arrayPuntatori". Se n è il numero di carte, riuscite a distribuire il mazzo in tempo O(n) (a parita' di input)? Esercizio 2: Sviluppare un'implementazione della funzione shuffle() in "Puntatori8_arrayPuntatori" il cui tempo d'esecuzione sia deterministico (e non una variabile aleatoria). Esercizio 3: Sviluppare un'implementazione più efficiente della funzione shuffle() in "Puntatori8_arrayPuntatori". Se n è il numero di carte, riuscite ad mescolare il mazzo in tempo O(n log n)? E in tempo O(n)? Esercizio 4: Stabilire cosa fa la funzione Mystery1() in questo programma: Esercizio_Mystery1.cpp Esercizio 5: Stabilire cosa fa la funzione Mystery2() in questo programma: Esercizio_Mystery2.cpp Esercizio 6: Stabilire cosa fa la funzione Mystery3() in questo programma: Esercizio_Mystery3.cpp |
|||
![]() |
CAPITOLO 6: ClassiA1_struct1.cpp, ClassiA1_struct2.cpp, ClassiA2_classi1.cpp, ClassiA2_classi2.cpp, ClassiA2_classi3.cpp, ClassiA2_classi4.cpp, ClassiA2_classi5.cpp, ClassiA2_classi6.cpp, ClassiA2_classi7.cpp, ClassiA3_header.cpp, ClassiA3_header.h, ClassiA3_headerSorgente.cpp, ClassiA4_costruttore1.cpp, ClassiA4_costruttore2.cpp, ClassiA5_violation.cpp |
||
![]() |
CAPITOLO 7: ClassiB1_const.cpp, ClassiB1_const2.cpp, ClassiB1_const3.cpp, ClassiB2_composizione.cpp, ClassiB3_friend.cpp, ClassiB3_friend2.cpp, ClassiB4_this.cpp, ClassiB4_this2.cpp, ClassiB5_new_static.cpp, ClassiB6_proxy.cpp, ClassiB6_interface.h, ClassiB6_interface.cpp, ClassiB6_implementation.h |
||
| Esercizio 1: Gestione di una matrice di dimensioni arbitrarie, allocata dinamicamente (dettagli) | |||
![]() |
CAPITOLO 8: ClassiC1_stream.cpp, ClassiC2_array.cpp, ClassiC3_string.cpp, ClassiC4_date.cpp | ||
| Esercizio 1: implementare una pila con una lista collegata di struct (dettagli) Esercizio 2: implementare una coda con una lista doppiamente collegata di struct (dettagli) Esercizio 3: implementare una pila con un array (dettagli) Esercizio 4: implementare una pila con una array gestito con la tecnica del doubling (dettagli) Esercizio 5: svolgere gli esercizi da 1 a 4, usando opportune classi Pila, Record e Coda |
|||