27 ottobre 2006

Avviso: prove intermedie - sospensione lezioni

Nella settimana dal 6 al 10 novembre non ci sono lezioni per consentire la preparazione e lo svolgimento delle prove intermedie.
Venerdì 3 novembre non c'è lezione.

Informazioni sulla prova di esonero

La prova di esonero si terrà il 10 novembre 2006 alle ore 14 in aula 1 nef.

Sarà divisa in due parti: un test e un programma.


Prima parte: test

E' un test contenente 30 domande a scelta multipla sugli argomenti trattati nel corso fino alla data dell'esonero, da svolgere individualmente.
Tempo concesso: 40 minuti.
Non sarà possibile:

  • discutere con i colleghi
  • consultare libri o appunti
  • usare computer
  • comunicare con telefonino
Il voto del test, in trentesimi (un punto per domanda), farà media con il voto del progetto. La prova è superata se il voto è >=18, altrimenti la si dovrà sostenere nuovamente in sede di esame.


Seconda parte: programma

Consiste nella realizzazione di un programma C++. Si consiglia di portare con sé il computer laptop per editare, compilare ed eseguire (provare) il programma prima di ricopiarlo sul foglio di carta. NB: la consegna è accettata esclusivamente su carta. La prova può essere svolta in collaborazione con i colleghi; in questo caso si può consegnare un unico programma scrivendo sul foglio protocollo il nome e il numero di matricola di tutti coloro che hanno collaborato.
Tempo concesso: 40 minuti.
Sarà possibile usare il pc, consultare libri e appunti, scambiare idee con tutti i colleghi presenti.

Il voto del programma, nell'intervallo 0..30, sarà moltiplicato per 0,1 e il risultato verrà sommato alla media del test e del progetto. Questa parte è superata in tutti i casi (non c'è sbarramento al 18). Questa parte non è obbligatoria, ma non potrà essere sostenuta in sede di esame.

Il voto finale dell'esame è:
(vototest+votoprogetto)/2+votoprogramma*0,1

All'esame, se il voto finale è >30, viene automaticamente assegnata la lode.

Definizione delle funzioni proprie

Lezione del 27 ottobre
[52 presenti]


Argomenti trattati:

  • layout dell'oggetto
  • puntatore this
  • definizione dei metodi (funzioni proprie) della classe
  • accesso ai campi dell'oggetto
  • oggetto di invocazione costante
  • parametri costanti e ritorno per riferimento
  • overloading

Podcast della lezione:
http://multicommunity.di.uniroma1.it/podcast/panizziC++20061027.mp3


Codice C++ di esempio realizzato a lezione:



Dispense online:
Classi

25 ottobre 2006

Classi

Lezione del 24 ottobre
[59 presenti]


Argomenti trattati:

  • tipo di dato astratto
  • classi e oggetti
  • dichiarazione della classe
  • campi e funzioni proprie
  • costruttore
  • information hiding: parte pubblica e parte privata
  • oggetto di invocazione

Podcast della lezione:
http://multicommunity.di.uniroma1.it/podcast/panizziC++20061024.mp3


Codice C++ di esempio realizzato a lezione:



Dispense online:
Classi

23 ottobre 2006

Esercizi sulla ricorsione

Per esercitarsi sulla ricorsione utilizzando le strutture dati viste fin'ora:

  1. Scrivere una funzione ricorsiva che calcoli la somma degli elementi di un array di int
  2. Scrivere una funz. ric. che restituisca il massimo valore degli elementi di un array di interi.
  3. Scrivere una funzione ric. che, dato il puntatore a una stringa, conti il numero di spazi in essa contenuti.
  4. Scrivere una f.ric. che, dati due array di interi ordinati, stampi tutti gli elementi prendendoli ordinatamente dai due array: ad esempio, dati i due array
    • 1|3|4|5|7|8|10|11
    • 1|2|6|7|20|21
stampa: 1|1|2|3|4|5|6|7|7|8|10|11|20|21

Fare attenzione a progettare correttamente l'intestazione delle funzioni (tipo di ritorno e tipo dei parametri formali).

Ricorsione

Lezione del 20 ottobre
[53 presenti]


Argomenti trattati:

  • principio di induzione
  • funzioni ricorsive in C++
  • principio di funzionamento

Podcast della lezione:
http://multicommunity.di.uniroma1.it/podcast/panizziC++20061020.mp3


Codice C++ di esempio realizzato a lezione:



Dispense online:
Ricorsione

18 ottobre 2006

Visibilità e ciclo di vita delle variabili

Lezione del 17 ottobre
[54 presenti]


Argomenti trattati:

  • visibilità delle variabili (scope)
  • ciclo di vita delle variabili

Podcast della lezione:
http://multicommunity.di.uniroma1.it/podcast/panizziC++20061017.mp3


Codice C++ di esempio realizzato a lezione:



Dispense online:
Funzioni, passaggio di parametri, visibilità, ciclo di vita, stack e record di attivazione

17 ottobre 2006

Sui prototipi delle funzioni

Risposta alla domanda 2 dello studente Emanuele del 14 ottobre scorso.

In C++ è necessario dichiarare le funzioni prima di utilizzarle. Questo si può fare in due modi:

  1. anteponendo il codice dell'intera funzione a tutte le funzioni che la usano (come abbiamo fatto negli esempi in aula)
  2. b) anteponendo il solo "prototipo" cioè l'intestazione della funzione.
Ad esempio, questo programma non funzionerebbe se non togliessimo il commento alla terza riga:

#include


using namespace std;
// int f();

main()
{ int x = 2;
  cout << f(x) << endl;
  system("PAUSE");

}

int f(int i)
{ return 100*i; }

Nella compilazione di un programma che invoca una funzione è necessario conoscere solo gli elementi dell'intestazione della funzione: il nome, il tipo di ritorno, il numero e i tipi dei parametri che la funzione accetta. Questo permette al compilatore di effettuare il type checking (controllo dei tipi) e di produrre il giusto codice assembly per la chiamata e il ritorno dalla funzione. Non è invece necessario conoscere il contenuto del corpo della funzione, la cui compilazione può essere effettuata separatamente.

Normalmente le intestazioni di tutte le funzioni di un file .cpp vengono raccolte in un file .h che poi viene incluso da tutti i file che vogliono usare quelle funzioni.

Funzioni e passaggio di parametri

Lezione del 13 ottobre
[59 presenti]

Argomenti trattati:

  • funzioni
  • passaggio di parametri per valore
  • passaggio di parametri per riferimento
  • passaggio di puntatori
  • stack e record di attivazione
Podcast della lezione:
http://multicommunity.di.uniroma1.it/podcast/panizziC++20061013.mp3

Codice C++ di esempio realizzato a lezione:
Dispense online:
Funzioni, passaggio di parametri, visibilità, ciclo di vita, stack e record di attivazione

11 ottobre 2006

Modularizzazione

Lezione del 10 ottobre
[61 presenti]

Argomenti trattati:

  • decomposizione, astrazione
  • coesione, interfacciamento esplicito fra moduli, accoppiamento, information hiding
  • variabili globali nella modularizzazione
  • modularizzazione mediante funzioni
  • modularizzazione mediante file
  • modularizzazione mediante tipo astratto
  • modularizzazione mediante namespace
Podcast della lezione:
http://multicommunity.di.uniroma1.it/podcast/panizziC++20061010.mp3

Dispense online:
Modularizzazione

09 ottobre 2006

Memoria dinamica

Lezione del 6 ottobre
[34 presenti]

Argomenti trattati:

  • memoria dinamica
  • variabili ed array allocati dinamicamente
  • new, delete
  • dichiarazione per riferimento
  • stringhe come array di char
Podcast della lezione:
http://multicommunity.di.uniroma1.it/podcast/panizzi6ott2006.mp3

Codice C++ di esempio realizzato a lezione:
Dispense online:
Puntatori, memoria dinamica e riferimenti

04 ottobre 2006

Puntatori

Lezione del 3 ottobre
[72 presenti]

Argomenti trattati:

  • operatore & (address of)
  • allocazione di variabili
  • puntatore, suo tipo
  • allocazione di variabili puntatore
  • operatore di dereferenziazione, come r-value e come l-value
  • equivalenza puntatori/nomi di array
  • aritmetica dei puntatori
Podcast della lezione:
http://multicommunity.di.uniroma1.it/podcast/panizzi03ott2006.wav

Codice di esempio realizzato a lezione:
puntatori.cpp

Dispense online:

Puntatori, memoria dinamica e riferimenti

02 ottobre 2006

Lezione del 29 settembre

[57 presenti]

Argomenti trattati:

  • Tipi
  • Variabili
  • Operatori ed espressioni
  • Array
  • Strutture di controllo del flusso: if-else, while, for
Podcast della lezione:
http://multicommunity.di.uniroma1.it/podcast/panizzi29sep2006.wav