Schaltjahr
-
ich hab mir mal was über den "modulo-operator" durchgelesen.
habs auch so weit verstanden.
Nur: ich wollte eine überprüfung, ob ein bestimmtes jahr ein schaltjahr ist.
Durch recherchen hab ich rausgefunden wie das funkt mit dem schaltjahr.
Jedoch scheint irgendwo ein fehler zu sein.
PLUS: ich wollte eine Eingabe machen, ein benutzer soll ein Jahr eingeben und dann sagt das programm: schaltjahr oder nicht....kapier ich nicht...hier der quelltext soweit...#include <iostream> using namespace std; int main() { bool istSchaltjahr(int jahr); { if(jahr%400==0) return true; else if(jahr%100==0) return false; else if(jahr%4==0) return true; else return false; cin >>jahr; }; system("PAUSE"); return EXIT_SUCCESS; }
-
Besser du ließt dir nochmals das Kapitel über Funktionen durch, darin besteht das Problem hier.
Gruß
-
Ich denke es sollte ungefähr so aus sehen:
#include <iostream> using namespace std; bool istSchaltjahr(int);//Hier wird die Funktion wie eine variable deklariert. Aufbau: bool(rückgabewert) istSchaltjahr(name der funktion) (int)(wert der an die funktion übergeben wird von main() bool istSchaltjahr(int jahr)//Hier beginnt die funktion { if(jahr%400==0) return true; else if(jahr%100==0) return false; else if(jahr%4==0) return true; else return false; } int main() { cout.setf(cout.boolalpha); cout<<"Geben sie ein Jahr ein."<<endl; int jahr; cin >>jahr; jahr=istSchaltjahr(jahr);//Hier soll jahr an die funktion istSchaltjahr als jahr übergeben werden cout<<"Das Ergebnis ist "<<jahr<<endl;//Hier soll dann true/false stehen anstelle von 0/1 system("PAUSE"); }Wenn die ausgabe true ist wird leider 1 anstelle von true aus gegeben und statt false kommt 0.

-
MartinMilbret schrieb:
Ich denke es sollte ungefähr so aus sehen:
#include <iostream> using namespace std; //bool istSchaltjahr(int); // weg bool istSchaltjahr(int jahr) { //cout.setf(cout.boolalpha); // hier auf jeden fall weg if(jahr%400==0) return true; else if(jahr%100==0) return false; else if(jahr%4==0) return true; else return false; } int main() { //cout.setf(cout.boolalpha); // unnötig cout << "Geben sie ein Jahr ein." <<endl; int jahr; cin >> jahr; if(istSchaltjahr(jahr)) { // wozu gibts denn if/else? cout << "Das Jahr ist ein Schaltjahr." << endl; // \n tuts auch } else { cout << "Das Jahr ist kein Schaltjahr." << endl; } //system("PAUSE"); // weg }Gruß
-
MartinMilbert schrieb:
Wenn die ausgabe true ist wird leider 1 anstelle von true aus gegeben und statt false kommt 0.

Steht da eine Frage o.ä. dahinter?
Wenn ja: Das liegt daran, dass du den Return-Wert von istSchaltjahr (bool) in einer int Variablen speicherst. (wobei der bool-Wert implizit in einen int-Wert gecastet wird).
Gruß Caipi
-
Ich muss mich gegen programmierprofis wie euch noch geschlagegen geben

-
sry: kann mir jemand folgendes genau erklären: was läuft da ab:
if(istSchaltjahr(jahr))
-
genauer gesagt: woher weiß man:
ja der sag einfach if- boolean
else blablamüsste es da nicht heißen
if(istSchaltjahr(jahr))=true
oder so was...
ich muss gestehen...seit wir c++ machen
generell
DIE BOOLEAN CHECK ICH EINFACH NICHT!!!!
ich denk mir immer wieder, wiesowiesowieso!
ja klar:
ich: herr lehrer, ich verstehe die funktionsweise einer boolean nicht!
lehrer: na, boolean ist einfach true/false, 0 oder 1....1 bit größe...
ich: immer noch unklar!
lehrer: ganz normaler datentyp...HILFT MIR NULL!
-
die ganzen Vergleiche (== != < > .......) sind doch auch Funktionen, die halt Wahrheitswerte liefern. Also wenn eine Funktion true liefert und du das Ergebnis mit true vergleichst machst zuviel, es ist nicht falsch aber unnötig
Boolean heißt doch entweder es ist wahr oder es ist falsch. Du stellst dem Computer eine Frage, die er nur mit ja oder nein (wahr oder falsch) beantworten kann.
if (Bedingung) { bedingung ist richtig bzw. test endete mit ja/true } else { bedingung ist falsch bzw. test endete mit nein/false }
-
also
bool var;
if(bed.)
bool true;
else(bed.)
bool false;??? oder wie sieht da die anwendung aus?
-
XaTrIxX schrieb:
also
bool var;
if(bed.)
bool true;
else(bed.)
bool false;??? oder wie sieht da die anwendung aus?
Das versteh ich wiederrum nicht. Die Anwendung ist einfach, dass du einen "Schalter" (Flag) hast, der eben nur 2 Zustände kennt: wahr (true bzw. 1) oder unwahr (false bzw. 0).
Wenn ich dich frage, ob du die Antworten hier im Thread komplett verstehst, kannst du auch nur mit ja oder nein antworten (vielleicht oder weiß nicht geht nicht).
bool XaTrIxX_verstehts = false; if(XaTrIxX_verstehts == true) // gleichbedeutend mit 'if (XaTrIxX_verstehts)' { // Thread beendet, keine Erklärungen nötig } else if (XaTrIxX_verstehts == false) // oder 'else' oder 'else if (!XaTrIxX_verstehts)' { // gehe ins Detail und erkläre es nochmal }BOOL ist einfach eine Entweder-Oder Entscheidung.
Und dein erstes Programmierbeispiel ist komplett falsch (syntaktisch, aber besonders logisch). Geh doch einfach von oben nach unten den Code durch, und überleg was gemacht wird
-
also sagen wir:
ich will ein quiz machen, dann sag ich sowas wie:int antwort; cout <<"Quiz blabla..."<<endl; cout <<"Frage:Abkürzung,Prozessor (engl.)"<<endl; //richtige antwort wäre "CPU" cin <<antwort; bool antwort= false; // übrigends, warum = false?!, wie definiere ich, was "RICHTIG IST?!?!!? if(antwort== true); { //cout richtig usw. } if(antwort == false) { //cout falsch blabla }^^ich glaube irgendwas fehlt mir in der zeile
bool antwort=....
habe aber keine genaue vorstellung was GENAU!
-
erstens wäre das "cin >> antwort;" und zweitens wäre dafür eher geeignet:
if(antwort==richtige_antwort) cout<<"Korrekt\n"; else cout<<"Leider falsch!\n";(und in "richtige_antwort" hast du vorher definiert, welche Antwortmöglichkeit korrekt wäre)
btw, bei Multiple Choice Tests reicht int aus, wenn der Spieler wirklich das Wort "CPU" als Lösung eingeben soll, ist std::string wohl besser geeignet.
-
okay, machen wir´s so:
was ist hier noch falsch?#include <iostream> using namespace std; int main() { int antwort; cout <<"Quiz blabla..."<<endl; cout <<"Frage:Abkürzung,Prozessor (engl.)"<<endl; //richtige antwort wäre "CPU" cin >>antwort; bool richtige_antwort=true ; // übrigends, warum = false?!, wie definiere ich, was "RICHTIG IST?!?!!? if (richtige_antwort==cpu); { cout <<"Antwort richtig!"<<endl; } else(richtige_antwort == false) { cout <<"Antwort falsch!"<<endl; } system("PAUSE"); return EXIT_SUCCESS; }
-
ich nehme an, der Bezeichner cpu ist unbekannt - und für eine Quizfrage ist boolean auch nicht gerade geeignet (das kann nämlich nur zwei Werte annehmen - wahr(true) oder falsch(false).
std::string antwort; std::string richtig="CPU";// <- genau so legst du die richtige Antwort fest cout<<"Was steuert einen PC?"; cin>>antwort; if(antwort==richtig)// stimmt die Benutzereingabe mit der richtigen Antwort überein? cout<<"Korrekt.\n"; else cout<<"Leider falsch!\n";
-
bool richtige_antwort = (antwort == 42);
-
danke für beide beiträge! ich glaub nach einigen beispielen kapier ichs 100%ig..danke leute...ich weiß...mühsam mit mir...oder?
-
so ich hab´s nun raus:
hab das mal ausprobiert, nun bringt er hier in zeile 17 noch ein fehler
syntax error before else#include <cstdlib> #include <iostream> using namespace std; int main() { int antwort; cout <<"Quiz blabla..."<<endl; cout <<"Frage:55+44="<<endl; //richtige antwort wäre "CPU" cin >>antwort; bool richtige_antwort = (antwort == 99); // übrigends, warum = false?!, wie definiere ich, was "RICHTIG IST?!?!!? if (antwort==richtige_antwort); { cout <<"Antwort richtig!"<<endl; } else; { cout <<"Antwort falsch!"<<endl; } system("PAUSE"); return EXIT_SUCCESS; }
-
if(richtige_antwort) // KEIN SEMIKOLON, AUCH NICHT BEI ELSE
-
lol, ich kann ins programm, jedoch...
ich gebe 99 ein und: "ANTWORT FALSCH"
lol...ich denke...da ist noch was techn. falsch