Funktion gesucht die Datum in Tage umrechnet und Tage in Datum



  • Also was soll denn daran nicht stimmen, ohne hier mit aller Gewalt durchsetzen zu wollen das ich Recht habe. Wenn ich ne Fehler gemacht habe dann korrigiere mich, das ist schon OK.

    // Überprüft das Datum auf Gültigkeit, gibt true oder false zurück
    bool Datum::isValid(unsigned int tag_, unsigned int monat_, unsigned int jahr_)
    {
      if (! (1582<= jahr_ )  )//ab aktuelle jahresberechnung
         return false;
      if (! (1<= monat_ && monat_<=12) )// 12 monate checken
         return false;
      if (! (1<= tag_ && tag_<=31) ) // tage unter 31 liegen
         return false;
      if ( (tag_==31) && (monat_==2 || monat_==4 || monat_==6 || monat_==9 || monat_==11) ) // monate die keine 31 tage haben
         return false;
      if ( (tag_==30) && (monat_==2) ) // februar hat keine 31 tage
         return false;
      if ( (monat_==2) && (tag_==29) && (jahr_%4!=0) ) //februar auf schaltjahr prüfen - kein schaltjahr
         return false;
      if ( (monat_==2) && (tag_==29) && (jahr_%400==0) ) //februar auf schaltjahr prüfen - ist schaltjahr
         return true;
      if ( (monat_==2) && (tag_==29) && (jahr_%100==0) ) //februar auf schaltjahr prüfen - kein schaltjahr
         return false;
      if ( (monat_==2) && (tag_==29) && (jahr_%4==0)  ) //februar auf schlatjahr prüfen - ist schaltjahr
         return true;
      else 
      {
    	  return true;
      }
    }
    

    Die if Fälle werden überprüft. Alle anderen Daten sind valide.
    Eine Test abfrage bei else mit " cout <<" Datum ist valide";" gibt die Ausgabe zurück wenn das Datum einen güligen Wert hat.

    Ich weiss nicht was du meinst wo der Fehler sein soll 😕



  • Oh Boy!
    Das ist doch quasi ein Bilderbuchbeispiel für "wie Unterfunktionen einem das Leben erleichtern":

    bool IsLeapYear(unsigned year)
    {
        if (year % 400 == 0)
            return true;
        else if (year % 100 == 0)
            return false;
        else if (year % 4 == 0)
            return true;
        else
            return false;
    }
    
    unsigned GetNumberOfDaysForMonth(unsigned year, unsigned month)
    {
        switch (month)
        {
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:
            return 31;
    
        case 4:
        case 6:
        case 9:
        case 11:
            return 30;
    
        case 2:
            return IsLeapYear(year) ? 29 : 28;
    
        default:
            assert(0 && "invalid month");
            return 0;
        }
    }
    
    bool IsValidDate(unsigned year, unsigned month, unsigned day)
    {
        if (year < 1582)
            return false;
        if (month < 1 || month > 12)
            return false;
        if (day < 1 || day > GetNumberOfDaysForMonth(year, month))
            return false;
    
        return true;
    }
    

  • Mod

    Tyle schrieb:

    Die if Fälle werden überprüft. Alle anderen Daten sind valide.

    Eben nicht. Du blockst nicht mehr durch. Erklär doch mal die if-Abfrage in Zeile 20. Oder Zeile 16.

    Oder, um ganz dumme Fehler auszuschließen:

    int x = 1;
    
    if (x==1)
      cout << '1';
    if (x==2)
      cout << '2';
    else
      cout << "Keines davon\n";
    

    Was gibt dieser Code aus?

    Und dieser hier?

    int x = 11;
    
    if (x < 10)
    if (x == 2)
    cout << "Foo";
    else
    cout << "Bar";
    


  • @Tyle
    Man kann deine Funktion schon soweit korrigieren dass sie funktioniert.

    Wenn ich solchen Code warten muss, dann bekomm' ich allerdings nen Schreikrampf. Weil es sinnlos ist. Weil es schmerzhaft ist. Weil ich nichts verbrochen habe was so schlimm wäre, dass man mich so bestrafen müsste.



  • int x = 1;
    
    if (x==1)
      cout << '1';
    if (x==2)
      cout << '2';
    else
      cout << "Keines davon\n";
    

    Na 1 und Keines davon.
    Aber in meiner Abfrage ist doch ne return. Dann Springt der doch aus der Funktion raus mit dem übergebenen Wert. Oder lieg ich damit falsch?


  • Mod

    Tyle schrieb:

    Na 1 und Keines davon.

    Richtig. Siehst du nicht insbesondere beim ersten Code einen Zusammenhang zu deinem eigenen?

    Das für dich wahrscheinlich verwirrende ist, dass deine Funktion ja sogar richtig arbeitet, weil die Abfrage in Zeile 20 vollkommen redundant zur Zeile 16 ist. Aber wenn der restliche Code richtig geschrieben wäre, dann wäre das else dort falsch.

    Anderes Beispiel

    int x = 1;
    
    if (x == 1)
      cout << "1";
    else
      cout << "1";
    

    Vereinfache diesen Code. Guck dir danach deinen Code an.


Anmelden zum Antworten