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.
Mitif ((!(jahr % 4) && (jahr % 100)) || !(jahr % 400))
funktioniert es.
obwohl im buch stehtif (!((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]