Schaltjahr



  • 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 mal 😉

    EDIT:
    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#1526

    Ich 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


Anmelden zum Antworten