Schaltjahr
-
Hi,
ich hoffe ich bin hier im richtigen Forum,
denn compilieren tu ich mein programm in der
Visual c++ Autorenversion.Nun ich weiß noch nicht
viel(wenn überhaupt etwas über c++)und beschäftige
mich derzeit mit Volkhards c++ Tutorial.
Nun(ich denke es kennen einige von euch)soll man ziemlich
am anfang ein kleines programm schreiben das herrausfindet
ob das eingegebene jahr ein schaltjahr ist.
(Nun fragt ihr euch sicher warum ich das frage, ich hab
die lösung ja eh selber, aber ich denke man kann nur gut
lernen wenn man seinen eigenen programmierstiel entwickelt,
deshalb will ich nicht stur bei der lösung bleiben die ich da
vorgekaut bekomme.)
Einiges im code wird wirklich verdammt stümperhaft sein,
aber da ich ein Neueinsteiger bin, bitte ich das zu entschuldigen.
Der Fehler liegt höchtwahrscheinlich bei der rückgabe der function
ist_jahr.Oder bei der main function die ich sofort geschlossen habe,
da ich sonst eine fehlermeldung von globalen variabelen(also die
in den blöcken)bekomme.
vielen dank im vorraus#include <iostream> #include <cstdlib> using namespace std; void main(){ ; } // Berechnung eines Schaltjahres aus Volkhards C++ Tutorial bool ist_schalt_jahr(int jahr){ bool ist_jahr;//erstellen der variable ist_jahr für true oder false auslesung //Ausgabe cout << "Geben sie die Jahreszahl ein!:"; // eingabe cin >> jahr; // Berechnung if(jahr%400==0){ ist_jahr=true;} else if(jahr%400==0){ ist_jahr=false;} if(jahr%100==0){ ist_jahr=false;} // Ausgabe anhand der berechnung if(ist_jahr=true){ cout << "Ja es ist ein Schaltjahr";} else{ cout << "Nein es ist kein Schaltjahr";} return jahr; }
So lautet die Fehlermeldung:
C:\versuchjahreszahl.cpp(37) : warning C4800: 'int' : Variable wird auf booleschen Wert ('True' oder 'False') gesetzt (Auswirkungen auf Leistungsverhalten moeglich)EDIT:Es wäre nett, wenn mir jemand das mit den functionen und deren rückgabewerte, ich gehe davon aus das dass die in den klammern sind
erklären könnte.Ich weis auch das die main function des programmes
den anfang definiert(blöd ausgedrückt)aber nich ob das programm nach
der main funciton abbricht?Vielen dank im vorraus.
cu Max
-
du sagst return jahr, hast aber bestimmt gemeint ist_jahr.
Deine Funktion soll nen bool zurückgeben und jahr ist eben ein int.btw ich finde es ziemlich hässlich, Worte mit Unterstrichen zu trennen.
-
Hi,
hmmm ich finds auch hässlich worte mit unterstrichen zu
trennen aber ich hab gelesen das sei bei Variablennamen der standard.
Naja ich wollt halt eine gute lesbarkeit des codes gewährleisten.Ps:konnte es noch nicht testen, aber könnte mir jemand das mit
funktionen und deren rückgabewerten sowie der funktion main erklären?vielen dank im vorraus und nachheraus.
cu Max
-
Hi,
läuft immer noch nicht, aber ich bekomme weder eine warnung noch einen
Fehler.Das Programm öffnet sich dann steht:Press enter to continue
da und mehr kann ich auch nicht machen.Vielleicht findet ihr den
Fehler.Vielen dank im vorraus
cu Max#include <iostream> #include <cstdlib> using namespace std; void main(){ ; } // Berechnung eines Schaltjahres aus Volkhards C++ Tutorial bool ist_schalt_jahr(int jahr){ bool ist_jahr;//erstellen der variable ist_jahr für true oder false auslesung //Ausgabe cout << "Geben sie die Jahreszahl ein!:"; // eingabe cin >> jahr; // Berechnung if(jahr%400==0){ ist_jahr=true;} else if(jahr%400==0){ ist_jahr=false;} if(jahr%100==0){ ist_jahr=false;} // Ausgabe anhand der berechnung if(ist_jahr=true){ cout << "Ja es ist ein Schaltjahr";} else{ cout << "Nein es ist kein Schaltjahr";} //Die Änderung return ist_jahr; }
-
lol? Du musst deine Funktion natürlich schon aufrufen!
-
Nicht nur das er muss die funktion auch bekannt machen, bevor er sie aufruft, änder das mal so:
#include <iostream> #include <cstdlib> using namespace std; bool ist_schalt_jahr(int); // Prototyp int main() { int jahreingabe; cin >> jahreingabe; ist_schalt_jahr(jahreingabe); return 0; // ich weiß das braucht nicht, aber ich schreibe es dennoch! } // Berechnung eines Schaltjahres aus Volkhards C++ Tutorial bool ist_schalt_jahr(int jahr){ bool ist_jahr;//erstellen der variable ist_jahr für true oder false auslesung //Ausgabe cout << "Geben sie die Jahreszahl ein!:"; // eingabe cin >> jahr; // Berechnung if(jahr%400==0){ ist_jahr=true;} else if(jahr%400==0){ ist_jahr=false;} if(jahr%100==0){ ist_jahr=false;} // Ausgabe anhand der berechnung if(ist_jahr=true){ cout << "Ja es ist ein Schaltjahr";} else{ cout << "Nein es ist kein Schaltjahr";} //Die Änderung return ist_jahr; }
Da schon in der Funktion geprüft wird ob es ein schaltjahr ist oder nicht ud der Entsprechende Text ausgegeben wird, ist es eigentlich mehr oder weniger unnötig etwas zurückzugeben. Achja, du kannst auch den Prototypen weglassen und die Funktion über die mainfunktion schreiben.
Code-Hacker
-
@Code-Hacker: Warum liest du das Jahr 2 Mal ein? Und warum zum Geier bei der prüfenden Funktion. Ist alles schon recht verwirrend.
-
if(ist_jahr=true){ //Hier müssen 2 Gleichheitszeichen hin. cout << "Ja es ist ein Schaltjahr";}
-
Wie bereits gesagt, ist es auch unsinnig in der Funktion rauszuschreiben, ob es ein Schaltjahr ist. Vielleicht willst du die Funktion später anders nutzen und zum Beispiel die nächsten 5 Schaltjahre bestimmen.
Lass die Funktion einfach nur ihren Wert zurückgeben und in der main() kannst du mit dem Wert dann machen was du willst (z.B. auch den Text ausgeben).
-
Hi,
vielen dank erstmal.
Ich hatte keine anhnung das man eine funktion bekanntmachen bzw.
aurufen muss.Ich werd´s gleich ausprobieren, aber ich hab noch
ne kleine frage:Was das wort bedeutet das zwischen den Klammern einer
function steht ist klar(denke ich):bool ist_schalt_jahr(int);
Ich denke damit wird der speicher für die rückgabevariable freigemacht.
Aber was bedeutet das hier:
ist_schalt_jahr(jahreingabe);
Vielen dank schon mal im vorherraus.
cu Max
-
MaSTaH schrieb:
@Code-Hacker: Warum liest du das Jahr 2 Mal ein? Und warum zum Geier bei der prüfenden Funktion. Ist alles schon recht verwirrend.
Ganz ganz einfach! Weil ich das Einlesen übersehen habe! Wenn ich nen Parameter erwarte suche ich in der Funktion nicht nach einer eventuellen Eingabeufforderung! Und wenn ich einen Parameter angebe dann übergebe ich diesem eigentlich etwas! Wenn nicht kann diese Funktion gar nicht aufgerufen werden. Ansonsten baut man für den Fall das nichts angegeben wird eine automatische initialisierung ein. Wenn man das schon so macht dann ohne Parameter, weil der bringt weniger als gar nichts.
So ist es natürlich richtig!:
#include <iostream> #include <cstdlib> using namespace std; bool ist_schalt_jahr(int); // Prototyp int main() { int jahreingabe; bool keine_ahnung; cin >> jahreingabe; keine_ahnung = ist_schalt_jahr(jahreingabe); if(keine_ahnung==true) cout << "Ja es ist ein Schaltjahr"; else cot << "Nein es ist kein Schaltjahr"; return 0; // ich weiß das braucht nicht, aber ich schreibe es dennoch! } // Berechnung eines Schaltjahres aus Volkhards C++ Tutorial bool ist_schalt_jahr(int jahr){ bool ist_jahr;//erstellen der variable ist_jahr für true oder false auslesung // Berechnung if(jahr%400==0){ ist_jahr=true;} else if(jahr%400==0){ ist_jahr=false;} if(jahr%100==0){ ist_jahr=false;} // Ausgabe anhand der berechnung //Die Änderung return ist_jahr; }
Nebenbei könnte man fragen warum ich eigentlich in der Funktion (vorher) nur mit einem gleichheitszeichen verglichen habe und wieso ich dies und jenes und welches nicht getan habe. Ich habe es kopiert und einfach nur gesehen Parameter wird erwartet, also übergeben. Eigentlich hätte ich die Rückgabe der funktion auch entfernen können, bringt auch nichts....
Aber dui hättest auch korrigieren können, statt so einer tut mir leid aber doofen Frage!Code-Hacker
-
Ja, aber wenn man schon korrigiert dann nicht ohne sich Gedanken zu machen. Klar kann man mal was übersehen, aber jemand der neu ist gewöhnt sich deshalb vielleicht irgendwelche blöden Sachen an. Von daher fand ich den Wink garnicht so doof.
-
@Master Max:
Das erste ist die bekanntmachung der Funktion. Dabei wird angegeben was und ob die Funktion etwas zurückliefer und von welchen Typen die Parameter sind in diesem Fall einzahl.
Das zweite ist der Funktionsaufruf. Und ich übergebe die Variable, also die eingegebene Jahreszahl.Ich würde sagen bevor du Funktionen benutzt, solltest du lesen wie man sie benutzt. Was das bekannt machen betrifft so kannst du die die Prototyp-Zeile sparen und auch die funktion vor die Main-funktion setzen. hauptsache ist, das eine Funktion bevor sie aufgerufen wird bekannt ist und das ist sie nur wenn sie selbst über dem aufruf steht oder ein prototyp über dem aufruf steht.
@MaSTaH:
Jo, ist auch ok. Also der Hinweiß, nur die Frage war überflüssig
Außerdem hatte ich als ich as schrieb nicht genug Zeit, musste in die vorlesung. Naja, danke für den Hinweiß und die Frage vergesse ich einfach malEDIT:
zudem sind im code oben noch ein fehler, vllt auch mehr. Die habe ich nicht ausgebessert, also sowas wie das cot statt cout. Das kann sich jeder selbst ändern. es ging nur darum wie die Funktion usw. aussehen sollte damit die mehr als nur für diesen speziellen fall verwendbar ist.Code-Hacker
-
Hi,
das programm läuft jetzt rechnet aber noch nicht richtig,
das liegt aber an meiner formel, werd ich schon selbst
hinbekommen.Das mit den funktionen wird in den drei
büchern die ich hier hab zumindest für mich(ich komm aus
Basic *g*)noch ein bissle zu kurz und selbstverständlich
erklärt.Vielen dank @all.PS:Gibt es eigentlich soetwas wie eine Befehlsliste in c++?
Ich denke nicht denn soweit ich weis wird doch fast jeder
befehl aus einer Bibliothek geschnappt.(Bis auf Schleifen
und soetwas.)Meine Hilfefunktion geht nicht und deshalb kann
ich nicht nachschauen ob´s ne befehlsliste gibt.Und nochetwas aber ich denk das ist das falsche forum,
welchen compiler oder besser welche ide könnt ihr mir
empfehlen, gibt es eine gratisversion des c++Builders?vielen dank und cu Max
-
Es gibt eine Schlüsselwörter-Liste.
Hier findest du Links zu 2 Referenzen:
http://www.source-code.de/phpbb/viewtopic.php?p=1526#1526Ich würde keine Entwicklungsumgebung empfehlen, die muss jeder für sich selbst entscheide. Also ich komme besser mit dem Visual Studio von MS klar als mit Borland, wederum kommen andere besser mit Borland als mit MS klar. Kann nur sagen was ich wirklich nicht mag und das ist Kylix.
Code-Hacker