004
24.08.2008, 23:12 Uhr
0xdeadbeef
Gott (Operator)
|
Ich werd dir nicht die ganze Aufgabe abnehmen, aber ich geb dir mal das hier vor:
C++: |
#include <iostream>
bool check_date(int t, int m, int j);
int main() { int tag, monat, jahr;
std::cout << "Tag Monat Jahr: " << std::flush; std::cin >> tag >> monat >> jahr;
if(check_date(tag, monat, jahr)) { std::cout << "Datum richtig." << std::endl; } else { std::cout << "Datum falsch." << std::endl; } }
bool check_date(int t, int m, int j) { // TODO: Überprüfen, ob t.m.j ein gültiges Datum ist // Wenn ja, true zurückgeben, sonst false }
|
Die lokale Variablendeklaration und der Funktionsaufruf sind fett gekennzeichnet. Wichtig ist, dass die Variablen in main deklariert sind, so dass sie nur innerhalb mains Gültigkeit haben - jede Funktion benutzt ihre eigenen Deklarationen, so kommen sie sich gegenseitig nicht in die Haare, und Rekursion lässt sich ggf. sinnvoll betreiben. Der Funktionsaufruf benutzt die in main gültigen Symbole, die in check_date dann t, m und j heißen - ich hätte sie auch gleich nennen können, aber zur Veranschaulichung des Prinzips macht es so mehr Sinn. Schlag das auch in deinem Buch nach, das muss das erklären.
Was den Rest angeht,
C++: |
(1 | 3 | 5 | 7 | 8 | 10 | 12)
|
evaluiert zu 15, weil | binäres oder ist. Was du willst, ist wahrscheinlich (monat == 1 || monat == 3 || monat == 5 || ...), wobei ich an der Stelle eher mit einer Lookup-Table arbeiten würde, a la
C++: |
static int const tage_pro_monat[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
// ... if(tag <= tage_pro_monat[monat]) { ... }
|
...wobei da natürlich Schaltjahre noch abzufangen sind, und du vorher sicher stellen musst, dass monat zwischen 1 und 12 liegt.
Oh, und benutz in Zukunft statt quote- cpp-tags. -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra |