Tage eines Monats zählen



  • hmm, habs eben genaustens überprüft, wie es halt in meinem buch steht.

    und da stehts so

    if(!((jahr%100)%4) && (jahr%100) || !(jahr%400))
    

    strange oO



  • kPt schrieb:

    if(!((jahr%100)%4) && (jahr%100) || !(jahr%400))
    

    So ist es dann dem Compiler überlassen, die Reihenfolge festzulegen.
    Der gcc gibt sogar eine Warning, dass die Reihenfolge nicht eindeutig ist:

    a.c:26: Warnung: Klammern um && innerhalb von || empfohlen
    

    Die Frage ist, wie ist das zu interpretieren:

    !a && b || !c
    

    Es gilt:

    (!a && b) || !c   !=  !a && (b || !c)
    

    Warum in deinem Buch jetzt

    !((jahr%100)%4)
    

    steht, weiß ich
    nicht, aber es ist das selbe wie

    !(jahr%4)
    

    Gruß mcr



  • Stimmen denn deine Ergebnisse immer noch nicht?



  • dachte eigentlich immer, dass && stärker bindet als || oder? aber keine ahnung, mag auch anders sein



  • Vorden schrieb:

    dachte eigentlich immer, dass && stärker bindet als || oder? aber keine ahnung, mag auch anders sein

    Ich glaube, so sollte es auch sein, aber ich weiß es nicht genau.

    Was ich aber sagen kann: bei mir berechnet der Code, mit der einen
    geänderten Zeile, stets das richtige Ergebnis.

    Gruß mcr



  • && und and binden stärker als || und or.



  • bgdnoy schrieb:

    && und and binden stärker als || und or.

    ich sign das mal spontan 🙂

    kanns an meiner entwicklungsumgebung liegen?
    benutze eclipse cdt?
    bekomme nähmlich ne warnung, jedoch steht nicht was für eine.

    programm läuft immer noch nicht richtig. arr..



  • Funktioniert nun einwandfrei

    If-Abfrage im Buch ist falsch, oder sonst ein Fehler.
    Mit

    if ((!(jahr % 4)  && (jahr % 100)) || !(jahr % 400))
    

    funktioniert es.
    obwohl im buch steht

    if (!((jahr % 4)  && (jahr % 100)) || !(jahr % 400))
    

    danke für eure hilfe



  • Hallo Leute,
    So geht das ganze etwas übersichtlicher, diese switch case Verschachtelung ist ja wirlich nichts fürs Auge:

    1 int days_of_month(int month, int year){
      2   // Monat:           1   2   3   4   5   6   7   8   9  10  11  12
      3   char months[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
      4   return month == 2 && is_leap_year(year) ? 29 : month[i];
      5 }
    


  • Naja, was fürs Auge ist sie sicher nicht.

    Aber dafür doch mal besonders kreativ

    kPT schrieb:

    case 2*2:
    		case 6:
    		case 9: case 11:
    			tage = 30;
    			break;
    

    🕶



  • toller gast, da gast verg schrieb:

    Hallo Leute,
    So geht das ganze etwas übersichtlicher, diese switch case Verschachtelung ist ja wirlich nichts fürs Auge:

    1 int days_of_month(int month, int year){
      2   // Monat:           1   2   3   4   5   6   7   8   9  10  11  12
      3   char months[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
      4   return month == 2 && is_leap_year(year) ? 29 : month[i];
      5 }
    

    <error detected>
    month[i]

    <starting auto reparation routine>
    ... SUCCESS

    <showing reparation result>
    month[i] replaced by months[month]


Anmelden zum Antworten