// Dit programma vraagt de gebruiker om twee data tussen 1 januari 1900 en // 31 december 2100 op te geven. Vervolgens wordt voor elk van deze data // berekend de hoeveelste dag sinds 1 januari 1900 het is. Als de eerste // datum eerder valt dan de tweede datum (of gelijk) wordt vervolgens // berekend hoeveel dagen er verstreken zijn tussen de twee data. // Rudy van Vliet, 30 september 2002 #include //**************************************************************************** void VraagDatum (int Nr, int &Dag1, int &Maand1, int &Jaar1) // vraag de gebruiker om de Nr-e datum in te voeren { cout << endl; cout << "Geef de " << Nr << "-e datum op, drie getallen (dag, maandnummer,\n"; cout << " jaartal) gescheiden door spaties: "; cin >> Dag1 >> Maand1 >> Jaar1; } // VraagDatum //**************************************************************************** bool SchrikkelJaar (int Jaar) // is het jaar Jaar een schrikkeljaar of niet (volgens de huidige regels) // aanname: 1900 <= Jaar // (i.h.b.: positief jaartal en huidige regels voor schrikkeljaar // zijn van toepassing) { bool Schrik; if (Jaar%4 != 0) Schrik = false; else // deelbaar door 4 if (Jaar%100 != 0) Schrik = true; else if (Jaar%400 != 0) Schrik = false; else Schrik = true; return Schrik; } // SchrikkelJaar //**************************************************************************** int DagenInMaand (int Maand, int Jaar) // hoeveel dagen zijn er in de maand Maand in het jaar Jaar // aanname: 1 <= Maand <= 12 // 1900 <= Jaar // (i.h.b.: positief jaartal en huidige regels voor schrikkeljaar // zijn van toepassing) { int DagenDezeMaand; switch (Maand) { case 2: if (SchrikkelJaar (Jaar)) DagenDezeMaand = 29; else DagenDezeMaand = 28; break; case 4: case 6: case 9: case 11: DagenDezeMaand = 30; break; default: DagenDezeMaand = 31; } return DagenDezeMaand; } // DagenInMaand //**************************************************************************** bool GeldigeDatum (int Dag, int Maand, int Jaar) // controleer of de opgegeven datum een geldige datum tussen 1 januari 1900 // en 31 december 2100 (inclusief) is { int DagenDezeMaand; bool Geldig; if ((Jaar < 1900) || (Jaar > 2100)) Geldig = false; else // Jaar is OK if ((Maand < 1) || (Maand > 12)) Geldig = false; else // ook Maand is OK { DagenDezeMaand = DagenInMaand (Maand, Jaar); if ((Dag < 1) || (Dag > DagenDezeMaand)) Geldig = false; else Geldig = true; } return Geldig; } // GeldigeDatum //**************************************************************************** int DagenSinds1_1_1900 (int Dag, int Maand, int Jaar) // bereken voor de meegegeven datum: de hoeveelste dag is het sinds // 1 januari 1900 (1 januari 1900 zelf is 1) // aanname: we hebben een geldige datum, niet eerder dan 1 januari 1900 { int Dagen = 0, LoopJaar, LoopMaand; // we tellen eerst de hele jaren LoopJaar = 1900; while (LoopJaar < Jaar) { if (!SchrikkelJaar (LoopJaar)) Dagen += 365; else Dagen += 366; LoopJaar ++; } // we zitten nu in het jaar Jaar // we tellen nu de hele maanden LoopMaand = 1; while (LoopMaand < Maand) { Dagen += DagenInMaand (LoopMaand, Jaar); LoopMaand ++; } // we zitten nu in de maand Maand // tel de resterende dagen Dagen += Dag; return Dagen; } //**************************************************************************** int main () { int Dag1, Maand1, Jaar1, Dag2, Maand2, Jaar2, Dagen1, Dagen2; bool Geldig; cout << endl; cout << "Dit programma is gemaakt door Rudy van Vliet,\n"; cout << "docent van het vak Inleiding Programmeren in C++\n"; cout << "voor startende ondernemers in de ICT.\n"; cout << endl; cout << "U kunt twee data opgeven, tussen 1 januari 1900 en 31 december 2100.\n"; VraagDatum (1, Dag1, Maand1, Jaar1); VraagDatum (2, Dag2, Maand2, Jaar2); Geldig = true; if (!GeldigeDatum (Dag1, Maand1, Jaar1)) { Geldig = false; cout << endl; cout << "De eerste datum was niet geldig.\n"; } if (!GeldigeDatum (Dag2, Maand2, Jaar2)) { Geldig = false; cout << endl; cout << "De tweede datum was niet geldig.\n"; } if (Geldig) { cout << endl; Dagen1 = DagenSinds1_1_1900 (Dag1, Maand1, Jaar1); cout << "De datum " << Dag1 << " " << Maand1 << " " << Jaar1 << " is de " << Dagen1 << "-e dag sinds 1 januari 1900.\n"; Dagen2 = DagenSinds1_1_1900 (Dag2, Maand2, Jaar2); cout << "De datum " << Dag2 << " " << Maand2 << " " << Jaar2 << " is de " << Dagen2 << "-e dag sinds 1 januari 1900.\n"; if (Dagen1 <= Dagen2) cout << "De tweede datum is " << Dagen2 - Dagen1 << " dagen later dan de eerste datum.\n"; else cout << "De tweede datum ligt voor de eerste datum.\n"; } return 0; }