Università degli Studi di Brescia
Fondamenti di Programmazione
Docente: Alessandro Saetti
A.A. 2012/2013
ESERCITAZIONE SULLE CLASSI
Università degli Studi di Brescia
A.A. 2012/2013
Definire la classe delle date del calendario con
– Un costruttore che inizializzi la data al capodanno del 2000;
– Un metodo che inizializzi la data con tre interi acquisiti da tastiera;
– Un metodo che visualizzi la data;
– Un metodo che faccia avanzare la data di una giornata.
Scrivere un programma C++ che, sfruttando la classe
precedentemente definita, inizializzi la data con tre interi
acquisiti da tastiera, faccia avanzare la data di 15 giorni ed
infine visualizzi la data risultante.
Definire la classe delle date del calendario con
– Un costruttore che inizializzi la data al capodanno del 2000;
– Un metodo che inizializzi la data con tre interi acquisiti da tastiera;
– Un metodo che visualizzi la data;
#include <iostream>
– Un metodo che faccia avanzare la data di una giornata.
using namespace std;
Scrivere un programma C++ che, sfruttando la classe
precedentemente definita, inizializzi la data con tre interi
acquisiti da tastiera, faccia avanzare la data di 15 giorni ed
infine visualizzi la data risultante.
class Data
{
public:
Data(); // Costruttore
void Acquisisci();
void Avanza();
void Stampa();
private:
int aa, mm, gg;
};
int main()
{
}
Ricordarsi di inserire il tipo restituito
da ogni singola funzione-membro
Definire la classe delle date del calendario con
– Un costruttore che inizializzi la data al capodanno del 2000;
– Un metodo che inizializzi la data con tre interi acquisiti da tastiera;
– Un metodo che visualizzi la data;
– Un metodo che faccia avanzare la data di una giornata.
Scrivere un programma C++ che, sfruttando la classe
precedentemente definita, inizializzi la data con tre interi
acquisiti da tastiera, faccia avanzare la data di 15 giorni ed
infine visualizzi la data risultante.
cin e cout  Oggetti globali di I/O
void Data::acquisisci()
{
cout << "Inserisci giorno: ";
cin >> gg;
cout << "Inserisci mese: ";
cin >> mm;
cout << "Inserisci anno: ";
cin >> aa;
}
>> e <<  Operatori di flusso di I/O
Definizione esterna alla classe
Data::Data()
{
aa=2000;
mm=1;
gg=1;
}
:: operatore binario di risoluzione visibilità
Definire la classe delle date del calendario con
– Un costruttore che inizializzi la data al capodanno del 2000;
– Un metodo che inizializzi la data con tre interi acquisiti da
tastiera;
– Un metodo che visualizzi la data;
– Un metodo che faccia avanzare la data di una giornata.
Scrivere un programma C++ che, sfruttando la classe
precedentemente definita, inizializzi la data con tre interi
acquisiti da tastiera, faccia avanzare la data di 15 giorni ed
infine visualizzi la data risultante.
Definire la classe delle date del calendario con
– Un costruttore che inizializzi la data al capodanno del 2000;
– Un metodo che inizializzi la data con tre interi acquisiti da tastiera;
– Un metodo che visualizzi la data;
– Un metodo che faccia avanzare la data di una giornata.
Scrivere un programma C++ che, sfruttando la classe
precedentemente definita, inizializzi la data con tre interi
acquisiti da tastiera, faccia avanzare la data di 15 giorni ed
infine visualizzi la data risultante.
void Data::Stampa()
{
cout << gg
<< "/" << mm
<< "/" << aa << endl;
}
#include <iostream>
using namespace std;
class Data
{
public:
Data(); // Costruttore
void Acquisisci();
void Avanza();
void Stampa();
private:
int aa, mm, gg;
};
Mi invento un main() per testare
le funzionalità fino a questo
punto implementate
int main()
{
Data d;
d.Stampa();
d.Acquisisci();
d.Stampa();
}
Data::Data()
{
aa=2000;
mm=1;
gg=1;
}
void Data::Acquisisci()
{
cout << "Inserisci giorno: ";
cin >> gg;
cout << "Inserisci mese: ";
cin >> mm;
cout << "Inserisci anno: ";
cin >> aa;
}
void Data::Stampa()
{
cout
<< gg << "/"
<< mm << "/"
<< aa << endl;
}
void Data::Avanza()
{
– Un costruttore che inizializzi la data al capodanno del 2000;
gg++; // incremento il giorno
– Un metodo che inizializzi la data con tre interi acquisiti da tastiera;
// NORMALIZZO:
– Un metodo che visualizzi la data;
// 1) Calcolo il nr di giorni
– Un metodo che faccia avanzare la data di una giornata.
// del mese indicato in mm
Definire la classe delle date del calendario con
Scrivere un programma C++ che, sfruttando la classe
precedentemente definita, inizializzi la data con tre interi
acquisiti da tastiera, faccia avanzare la data di 15 giorni ed
infine visualizzi la data risultante.
// 2) se gg è maggiore dell’ultimo
// giorno del mese pongo gg = 1
// ed incremento mm di uno
// 3) se mm>12 incremento l’anno
// e pongo mm=1
}
1) Per determinare il numero di giorni del mese devo disporre di un elenco contenente
tali valori distinto per mese. L’array di interi seguente può essere utilizzato a tale scopo:
int v[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
Occorre inoltre considerare che febbraio negli anni bisestili ha 29 giorni.
Un anno è bisesto se: è multiplo di 400 oppure è divisibile per 4 ma non per 100.
In C++ la condizione sottostante consente di valutare se un anno registrato nella
variabile aa è bisesto o meno:
(
((aa % 400)==0) || ( ((aa % 4)==0) && ((aa % 100)!=0) ) )
void Data::Avanza()
{
– Un costruttore che inizializzi la data al capodanno del 2000;
gg++;
– Un metodo che inizializzi la data con tre interi acquisiti da tastiera;
// 1) se mm==2 ed è un anno
– Un metodo che visualizzi la data;
// bisesto allora GiorniMese=29
– Un metodo che faccia avanzare la data di una giornata.
// altrimenti GiorniMese=v[mm-1]
Definire la classe delle date del calendario con
Scrivere un programma C++ che, sfruttando la classe
precedentemente definita, inizializzi la data con tre interi
acquisiti da tastiera, faccia avanzare la data di 15 giorni ed
infine visualizzi la data risultante.
// 2) . . .
// 3) . . .
}
Per determinare se è un anno bisestile posso usare la funzione sottostante:
bool Bisestile()
{
return (aa % 4 == 0 && aa % 100 != 0 || aa % 400 == 0);
}
Mentre per determinare il numero di giorni del mese posso usare questa funzione:
int GiorniMese()
{
int v[12]={31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if (mm==2 && Bisestile() )
return 29;
else
return v[mm-1];
}
Definire la classe delle date del calendario con
– Un costruttore che inizializzi la data al capodanno del 2000;
– Un metodo che inizializzi la data con tre interi acquisiti da
tastiera;
– Un metodo che visualizzi la data;
– Un metodo che faccia avanzare la data di una giornata.
Scrivere un programma C++ che, sfruttando la classe
precedentemente definita, inizializzi la data con tre interi
acquisiti da tastiera, faccia avanzare la data di 15 giorni ed
infine visualizzi la data risultante.
class Data
{
public:
Data();
void Acquisisci();
void Avanza();
void Stampa();
private:
int aa, mm, gg;
bool Bisestile();
int GiorniMese();
};
Possiamo trasformare le funzioni Bisestile e GiorniMese in funzioni-membro private:
bool Data::Bisestile()
{
if (aa % 4 == 0 && aa % 100 != 0 || aa % 400 == 0) return true;
return false;
}
int Data::GiorniMese()
{
int v[12]={31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if (mm==2 && Bisestile() )
return 29;
else
return v[mm-1];
}
Definire la classe delle date del calendario con
– Un costruttore che inizializzi la data al capodanno del 2000;
– Un metodo che inizializzi la data con tre interi acquisiti da tastiera;
– Un metodo che visualizzi la data;
void Data::Avanza()
– Un metodo che faccia avanzare la data di una giornata.
{
gg++;
// 2) se gg è maggiore dell’ultimo
// giorno del mese . . .
// NORMALIZZA
if (gg > GiorniMese()) // 1) . . .
{
gg=1;
mm++;
}
// 3) se mm>12 incremento . . .
if (mm > 12)
{
mm=1;
aa++;
}
Scrivere un programma C++ che, sfruttando la classe
precedentemente definita, inizializzi la data con tre interi
acquisiti da tastiera, faccia avanzare la data di 15 giorni ed
infine visualizzi la data risultante.
Volendo posso racchiudere la sequenza di
istruzioni in un’ulteriore funzione-membro
privata - ad esempio:
void Data::Normalizza()
}
Definire la classe delle date del calendario con
– Un costruttore che inizializzi la data al capodanno del 2000;
– Un metodo che inizializzi la data con tre interi acquisiti da tastiera;
– Un metodo che visualizzi la data;
– Un metodo che faccia avanzare la data di una giornata.
Scrivere un programma C++ che, sfruttando la classe
precedentemente definita, inizializzi la data con tre interi
acquisiti da tastiera, faccia avanzare la data di 15 giorni ed
infine visualizzi la data risultante.
int main()
{
Data d;
d.Acquisisci();
for (int i=1; i<=15; i++)
d.Avanza();
d.Stampa();
}
Scarica

Eser 7.1