ESERCIZIO |
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. ![]() |
Se il codice di un metodo si trova all'esterno della definizione della classe a cui appartiene, bisogna "qualificare" il nome della funzione associandogli il nome classe, tramite l'operatore :: di risoluzione di visibilità.
/************************************************************************** * Nome: casa1-data.c * * Autore: Alessandro Saetti * * Data: 6/4/10 * **************************************************************************/ #include <iostream> using namespace std; class Data { public: Data(); void acquisisci(); void stampa(); void avanza(); private: int gg, mm, aa; bool bisestile(); int giorni(int mese); void normalizza(); }; /* * Nome: Data::Data * Scopo: Costruttore di default della classe Data * Input: - * Output: - */ Data::Data() { gg = mm = 1; aa = 2000; } /* * Nome: Data::acqusisci * Scopo: Inizializzazione della data con interi acquisiti da tastiera * Input: - * Output: - */ void Data::acquisisci() { cout << "Inserisci giorno: "; cin >> gg; cout << "Inserisci mese: "; cin >> mm; cout << "Inserisci anno: "; cin >> aa; } /* * Nome: Data::stampa * Scopo: Stampa la data * Input: - * Output: - */ void Data::stampa() { cout << gg << "/" << mm << "/" << aa << endl; } /* * Nome: Data::avanza * Scopo: Incrementa la data corrente di un giorno * Input: - * Output: - */ void Data::avanza() { gg++; normalizza(); } /* * Nome: Data::bisestile * Scopo: Determina se l'anno della data e' bisestile * Input: - * Output: TRUE, se l'anno e' bisestile * FALSE, altrimenti */ bool Data::bisestile() { if (aa % 4 == 0 && aa % 100 != 0 || aa % 400 == 0) return true; return false; } /* * Nome: Data::giorni * Scopo: Restituisce il numero di giorni in un mese * Input: int mese: il mese da esaminare * Output: il numero di giorni di mese */ int Data::giorni(int mese) { int v[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; if (mese == 2 && bisestile()) return 29; else return v[mese-1]; } /* * Nome: Data::normalizza * Scopo: Normalizza la data * Input: - * Output: - * Note: Suppone che i giorni della data eccedano al piu' di una unita' il numero di giorni possibili */ void Data::normalizza() { if (gg > giorni(mm)) { gg = 1; mm ++; } if (mm > 12) { mm = 1; aa ++; } } /* * Nome: main * Scopo: Gestione delle date * Input: - * Output: 0 se il programma termina correttamente */ int main() { Data Giorno; int i; Giorno.acquisisci(); for(i = 0; i < 15; i++) Giorno.avanza(); Giorno.stampa(); system("pause"); return 0; }
/************************************************************************** * Nome: casa1-data.c * * Autore: Alessandro Saetti * * Data: 6/4/10 * **************************************************************************/ #include <iostream> using namespace std; class Data { public: Data() { gg = mm = 1; aa = 2000; } void acquisisci() { cout << "Inserisci giorno: "; cin >> gg; cout << "Inserisci mese: "; cin >> mm; cout << "Inserisci anno: "; cin >> aa; } void stampa() { cout << gg << "/" << mm << "/" << aa << endl; } void avanza() { gg++; normalizza(); } private: int gg, mm, aa; bool bisestile() { if (aa % 4 == 0 && aa % 100 != 0 || aa % 400 == 0) return true; return false; } int giorni(int mese) { int v[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; if (mese == 2 && bisestile()) return 29; else return v[mese-1]; } void Data::normalizza() { if (gg > giorni(mm)) { gg = 1; mm ++; } if (mm > 12) { mm = 1; aa ++; } } }; /* * Nome: main * Scopo: Gestione delle date * Input: - * Output: 0 se il programma termina correttamente */ int main() { Data Giorno; int i; Giorno.acquisisci(); for(i = 0; i < 15; i++) Giorno.avanza(); Giorno.stampa(); system("pause"); return 0; }
ESERCIZIO |
Testo esercizio |
Soluzione C++
Soluzione JavaScript
Soluzione VBA
Soluzione ASP
Soluzione PHP