Übung Schaltjahr
-
Ist folgender Ansatz richtig?
bool istSchaltjahr(int Jahr) { bool schaltjahr = false; if(!(Jahr % 4)) { if (!(Jahr % 100)) { if (!(Jahr % 400)) schaltjahr = true; else schaltjahr = false; } else schaltjahr = true; } return schaltjahr; }
-
Nein... Debuggs halt durch, dann wirst du sehen, an welcher Stelle was falsches passiert.
-
// Ermitteln ob ein Jahr ein Schaltjahr ist #include <iostream> using namespace std; bool istSchaltjahr(int Jahr) { bool schaltjahr = false; if(!(Jahr % 4)) { if (!(Jahr % 100)) { if (!(Jahr % 400)) schaltjahr = true; else schaltjahr = false; } else schaltjahr = true; } return schaltjahr; } int main() { cout << "Zu pruefendes Jahr: "; int Jahr; cin >> Jahr; Jahr = istSchaltjahr(Jahr); if (istSchaltjahr) cout << "Das Jahr " << Jahr << " ist ein Schaltjahr!" << endl; else cout << "Das Jahr " << Jahr << " ist kein Schaltjahr!" << endl; return 0; }Der Compiler/Debugger mekert zwar nicht, aber egal welches Jahr ich eingebe, es kommt immer ein Schaltjahr raus.
Habe ich irgendetwas übersehen? Weil mir tut schon der Kopf weh vor lauter hinschauen...
-
deswegen sollst du ja nicht hinschauen sondern mit dem Debugger Zeile für Zeile durch deine Funktion springen und dabei überlegen, ob das was der Code tut, das ist, was wirklich passieren sollte.
greetz KN4CK3R
-
Das mit dem Debugger solltest du dir ausführlicher ansehen

Eigentlich merkst du schon bei der Bedienung des Programms wo es klemmt.
Du gibst fürs Jahr z.B.: 2003 ein.
Und was zeigen dir Zeile 35 oder 37 als Werte fürs Jahr?Überleg mal warum das so ist?
-
silent_max schrieb:
bool istSchaltjahr(int Jahr) { bool schaltjahr = false; if(!(Jahr % 4)) { if (!(Jahr % 100)) { if (!(Jahr % 400)) schaltjahr = true; else schaltjahr = false; } else schaltjahr = true; } return schaltjahr; }SESE (single entry, singe exit) und die Bool'sche Flagge mag ich nicht. SESE ist unter C Programmierern beliebt. Es wird wohl eingesetzt, teilweise in Verbindung mit goto, um Resourcen vernünftig zu verwalten und die Freigabe nicht zu vergessen. In C++ brauchen wir das nicht. Ich finde das hier schöner:
bool istSchaltjahr(int Jahr) { if ((Jahr % 4)!=0) return false; if ((Jahr % 400)==0) return true; if ((Jahr % 100)==0) return false; return true; }
-
f.-th. schrieb:
Das mit dem Debugger solltest du dir ausführlicher ansehen

Eigentlich merkst du schon bei der Bedienung des Programms wo es klemmt.
Du gibst fürs Jahr z.B.: 2003 ein.
Und was zeigen dir Zeile 35 oder 37 als Werte fürs Jahr?Überleg mal warum das so ist?
Ich habe einmal nachgedacht.
Irgendwie haut das mit der Funktionsübergabe noch nicht hin. Ich sehe einfach den Fehler nicht.
int main() { cout << "Zu pruefendes Jahr: "; int Jahr; cin >> Jahr; int Jahr_ = istSchaltjahr(Jahr); if (istSchaltjahr) cout << "Das Jahr " << Jahr_ << " ist ein Schaltjahr!" << endl; else cout << "Das Jahr " << Jahr_ << " ist kein Schaltjahr!" << endl; return 0; }Hat einer von euch einen Tipp oder einen Hinweis?
-
Du sollst nicht raten

Jetzt hast du Zeile 7 noch verschlimmbessert. Lass die weg.
Auch deine anderen Verbesserungen sind schlecht.Ergänze statt dessen Zeile 9 entsprechend.
-
f.-th. schrieb:
Du sollst nicht raten

Jetzt hast du Zeile 7 noch verschlimmbessert. Lass die weg.
Auch deine anderen Verbesserungen sind schlecht.Ergänze statt dessen Zeile 9 entsprechend.
// Ermitteln ob ein Jahr ein Schaltjahr ist #include <iostream> using namespace std; bool istSchaltjahr(int Jahr) { bool schaltjahr = false; if(!(Jahr % 4)) { if (!(Jahr % 100)) { if (!(Jahr % 400)) schaltjahr = true; else schaltjahr = false; } else schaltjahr = true; } return schaltjahr; } int main() { cout << "Zu pruefendes Jahr: "; int Jahr; cin >> Jahr; istSchaltjahr(Jahr); if (Jahr) cout << "Das Jahr " << Jahr << " ist ein Schaltjahr!" << endl; else cout << "Das Jahr " << Jahr << " ist kein Schaltjahr!" << endl; return 0; }So, jetzt wird wenigstens etwas sinnvolles, aber nicht richtiges ausgegeben.
Jetzt ist komischerweise jedes Jahr, das ich eingebe, ein Schaltjahr. Dann muss ja doch noch an der Funktion etwas verkehrt sein.
Ich bitte euch echt um Hilfe, ich bin kurz davor, durchzudrehen, da ich den Fehler einfach nicht sehe.
-
Boa hier:
#include <iostream> bool istSchaltjahr(int jahr) { if((jahr % 4 == 0) && (jahr % 100 != 0)) return true; else if(jahr % 400 == 0) return true; return false; } int main() { int einJahr; std::cout << "Gebe ein jahr ein: "; std::cin >> einJahr; if(istSchaltjahr(einJahr)) std::cout << einJahr << " ist ein Schaltjahr!\n"; else std::cout << einJahr << " ist kein Schaltjahr!\n"; return 0; }Die Funktion
istSchaltjahr(int jahr)ist 1:1 von diesem Satz abgelitten.Edit: Naja ok, es sind 2 Sätze. Die ersten beiden.