Hallo,
weiß jemand wie man den Wochentag von einem Datm berechnet? Ich will es in einem Atmel Microcontroller verwenden. Vielleicht hat ja schon jemand einen Quelltext.
MfG Alex
Hallo,
weiß jemand wie man den Wochentag von einem Datm berechnet? Ich will es in einem Atmel Microcontroller verwenden. Vielleicht hat ja schon jemand einen Quelltext.
MfG Alex
Ist zwar OT, aber es gibt mir Gelegenheit für meine seit zwei Jahren nicht mehr aktualisierte Homepage Werbung zu machen:
Da gibts keinen Quelltext, man kann die Methode aber leicht implementieren. Evtl. sollte man die Rechenschritte noch für den Controller anpassen, z.B. geht das durch 28 dividieren und den Rest bestimmen auch ohne die Tabelle mit den Jahreszahlen.
Bis die Tage Georg
WICHTIG:
Der Modulo-Operator funktioniert in vielen Programmiersprachen nicht richtig, sondern liefert einfach nur den Restwert. Berechnet wird der Tag nach der Gauß'schen Kalenderformel. Ausführliche Informationen:
Gruß, Nico
In
MfG JRD
Ich staune immer wieder, womit man sich so alles beschäftigen kann. Wie oft brauchst Du diese Fähigkeit?
;o) Sebastian
Danke,
werde mal schauen ob ich es hinbekomme.
MfG Alex
"Alex Loipführer" wrote in news:blutfv$8gt$04$ snipped-for-privacy@news.t-online.com:
uchar GetDayOfWeek( uint date ) { uint month,year; int century, yr, dw;
month = GetMonth( date ); year = GetYear( date ); if (year
Such mal in den Quellen der Unixe. Für FreeBSD kann ich Dir
empfehlen, eventuell auch noch eine der anderen Dateien in diesem Verzeichnis (habe ich mir so genau jetzt nicht angesehen).
"Alex Loipführer" schrieb:
Aus den Weiten des Netzes und nicht von mir, aber es funktioniert:
int dayofweek(int y, int m, int d) /* 0 = Sonntag */ /* 1
Funktioniert NICHT in den meisten Programmiersprachen! Siehe mein obiges Posting und den entsprechenden Link. Der einfache Modulo-Operator sorgt zum Beispiel beim 1. März 2000 für ein falsches Ergebnis, weil die Formel auch negative Werte als Ergebnis aufweisen kann. Aber nicht nur an dem Tag, sondern bei vielen Tagen konsequenterweise. Wird im Artikel als "Jahr2000"-Problem der Formel bezeichnet, welches aber bei guten Compilern nicht auftritt, da diese die Modulo-Funktion richtig mit a mod b = a - (b . int(a / b)) implementiert haben. Nico
Bitte um Erklaerung, wie die von Rene gepostete Formel negative Werte produzieren sollte (unter der Voraussetzung, dass man nur positive Jahreszahlen einsetzt, was aber keine Einschraenkung ist, da die Formel ohnehin nur fuer fuer den gregorianischen Kalender, also ab 1582, richtige Ergebnisse liefert).
Nützlich ist es natürlich zu nichts, ist auf Parties aber hin und wieder ein guter Gag.
Georg
"Georg Seegerer" schrieb:
Warum funktioniert die Methode nicht für 1900 oder 2100?
Christian
"Nicolas Mittelmaier" schrieb:
Hm. Ich dachte immer, der Modulo-Operator _soll_ mir den Restwert liefern. Also meinetwegen
9 mod 8 = 1, 10 mod 3 = 1, 20 mod 4 = 0, 18 mod 5 = 3, usw.also
a mod b = a - b * ganzzahl( a / b ),
wobei ganzzahl(a) den Nachkommaanteil des Argumentes abschneidet.
Das hat es bisher bei mir immer getan, und ich benutze den modulo-Operator nicht wirklich selten und mit verschiedensten Implementierungen unterschiedlichster Programmiersprachen.
Außerdem hängt wohl von der _Implementierung_ der Programmiersprache ab, wie das Ding nun genau funktioniert.
Oder bin ich auf dem völlig flaschen Dampfer?
Christian
Probleme gibts ja auch immer nur bei negativen Zahlen, da waren sich Mathematiker und Programierer nicht einig wie's denn definiert sein soll. Da mann den Modulo bei neg. Zahlen selten benutzt ist es auch ziemlich lang nicht aufgefallen.
Georg
Weil die Formel davon ausgeht dass alle 4 Jahre ein Schaltjahr ist. Bei ganzen Jahrhundert-Jahren ist das normalerweise nicht der Fall,
2000 ist da eine Ausnahme. Wenn man es über die Jahre 1901 bis 2099 ausdehnen will braucht man eine extra Tabelle mit Jahreszahlen (zum modulo 28-Bilden) für jedes Jahrhundert.Georg
Diese Formel kann keine negativen Werte produzieren, da das Array static int t[] = {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4} bereits alle möglichen Modulo7-Werte liefert. Diese Formel ist jedoch nicht für wirklich alle (!) Daten anwendbar. Insbesondere das 1. März 2000-Problem wird in dem von mir oben geposteten Artikel beschrieben.
Meine Erklärung mit den negativen Werten bezog sich daher auf die wirklich anzuwendende Formel, wie sie im Artikel beschrieben wird. Dort können negative Werte auftreten, und diese können in vielen Programmiersprachen falsche Modulo-Werte liefern.Wie Georg in seinem Posting vom 8.Okt 09:14 bereits schreibt, waren sich Mathematiker und Programmierer bei der Definition des Modulo-Operators bei negativen Werten nicht einig.
Gruss, Nico
"Georg Seegerer" schrieb:
Mööp. Klar. Hätte ich auch drauf kommen können.
Gruß,
Christian
"Georg Seegerer" schrieb:
Ich dachte immer, Mathematiker kümmern sich eher weniger um die Praxis?
Gruß,
Christian
Das ist dann wohl ein weiterer Grund warum es eine Weile nicht aufgefallen ist. Jetzt möchte man es wohl nicht mehr ändern weil es dann nur noch mehr Verwirrung gibt, v.a. wenn jemand einen alten Quellcode compilieren will.
Bis die Tage Georg
Have something to add? Share your thoughts — no account required.
Ask the community — no account required