Wochentag Berechnen + Ausgabe
-
Hallo, habe aus Interesse ein Programm geschrieben welches mir durch Eingabe eines beliebigen Datums den Wochentag ausgibt. 5000 v. Chr wäre dann -5000, ansonsten normale Jahreszahlen.
Meint ihr es geht einfacher oder Kürzer?(ohne benutzen von vordefinierten funktionen)
string wotag(int t,int m,int j) { int mon[12]={31,28,31,30,31,30,31,31,30,31,30,31}, k=0; // Array mit Anzahl der Tage der Monate if (j%4==0) mon[1]=29; // Zur bestimmung eines Schaltjahres,mon[1] = Februar for(int i=0;i<m-1;i++) //Bestimmung der Tage vom 1. Januar des Jahres "J" bis zu dem bestimmten Tag k+=mon[i]; k+=t; if (j>=2012) //Als Ausgangstag wurde der 1. Januar 2012 gewählt, welcher ein Sonntag ist. Bei der folgenden Berechnung kommt es deshalb zu unterschieden zwischen jahren die kleiner bzw. größer gleich 2012 sind. { for (int i=2012;i<j;i++) if (i%4==0) k++; //Bestimmung der Schaltjahre zwischen 2012 und dem Jahr x, gibt es 4 Schaltjahre dazwischen werden 4 Tage draufgerechnet, wegen Februar(schaltjahr gleich Februar 1 Tag mehr). k+=((j-2012)*365); // Anzahl der Tage vom jahr 2012 bis zum jahr x werden auf k addiert ohne berücksichtigung von Schaltjahren switch (k%7) //Modulu von 7(7 Wochentage) { case 0: return "Samstag"; case 1: return "Sonntag"; case 2: return "Montag"; case 3: return "Dienstag"; case 4: return "Mittwoch"; case 5: return "Donnerstag"; case 6: return "Freitag"; } } else { for (int i=2012;i>j;i--) if (i%4==0) k++; //Bestimmung der Schaltjahre zwischen 2012 und dem Jahr x, gibt es 4 Schaltjahre dazwischen werden 4 Tage draufgerechnet, wegen Februar(schaltjahr gleich Februar 1 Tag mehr). k+=(2012-j)*365; // Anzahl der Tage vom jahr 2012 bis zum jahr x werden auf k addiert ohne berücksichtigung von Schaltjahren switch (k%7) { case 6: return "Samstag"; case 0: return "Sonntag"; case 1: return "Montag"; case 2: return "Dienstag"; case 3: return "Mittwoch"; case 4: return "Donnerstag"; case 5: return "Freitag"; } } }
-
Ohne mich reinzudenken würde ich behaupten, dass die Berechnung nicht stimmt. Ganz so einfach ist das alles nicht. Außerdem ist eine weitere sebstgebastelte Datumsbibliothek so ziemlich das letzte, was die Welt braucht. Von daher: bitte vordefinierte Funktionen benutzen
-
Mechanics schrieb:
Ohne mich reinzudenken würde ich behaupten, dass die Berechnung nicht stimmt. Ganz so einfach ist das alles nicht. Außerdem ist eine weitere sebstgebastelte Datumsbibliothek so ziemlich das letzte, was die Welt braucht. Von daher: bitte vordefinierte Funktionen benutzen
Ich habe es selbst ausprobiert und es berechnet/gibt alles richtig aus.
Windowskalender sei dank.//Edit
Muss mich korrigieren, für Zahlen kleiner 2012 hat sich irgendein Fehler eingeschlichen. Schaue eben wo dieser liegt.
-
Deine Berechnung ist flasch!
Das liegt nicht an deienr Rechnung, sondern daran dass der Gregorjanische Kalender nicht 5.000 v. Chr. eingefürht wurde. Aber rein rechnerisch müsste es stimmen!
Weißt du "Effinzient gehts fast imemr!"
-
Des weiteren ist nicht jedes vierte Jahr ein Schaltjahr. Das ist nur die erste der drei Regeln, wobei die hintere zutreffende Regel immer die vorderen überschreibt (also noch perfekt für simple Verzweigungnen :D):
1. Die durch 4 teilbaren Jahre sind Schaltjahre.
2. Die durch 100 teilbaren Jahre sind keine Schaaltjahre.
3. Die durch 400 teilbaren Jahre sind Schaltjahre.