Re: Wochentag berechnen nach Gauss Kategorie: Programmierung C (von Ernst H. - 25.01.2011 0:44) | ||
Als Antwort auf Wochentag berechnen nach Gauss von Francesco - 24.01.2011 22:51 | ||
| ||
> Moin, > > da ich auf die Schnelle hier nichts gefunden habe, > habe ich mir die Berechnung des Wochtages fix selber gebastelt. > > Ist eine vereinfachte Formel der Gausschen Wochentagsberechnung. > Funktioniert von 2001 bis 2099 (Hunde wollt ihr ewig leben? ;-) ) > Funktioniert wegen der FLOOR Funktion nur auf dem 128er. > > In der Funktion wird das aktuelle Datum eingelesen und als Rückgabe > gibt es INT-Zahlen von 0 bis 6 (Sonntag bis Samstag) > > Ciao, Francesco > > ------------------------------------------------------------------------------------- > > int get_weekday (void) > // berechnung Wochentag mit vereinfachter Gausscher Wochentagberechnung > // Formel funktionert von 2001 bis 2099 (sollte eigentlich reichen) > // weitere Infos bei wikipedia: > // http://de.wikipedia.org/wiki/Gau�sche_Wochentagsformel > { > byte tag; byte mon; byte jah; int wot ; //Variablen > int zr1 ; int zr2 ; int zr3 ; > > tag= Clock_GetVal(3)+1 ; > mon= Clock_GetVal(4)+1 ; > jah= Clock_GetVal(5) ; > > switch (mon) > { > // in zr1 ist die zwischenrechnung (2.6 x Monat - 0,2 abgerundet) > // für Jan und Feb wird gemä� Gau� ein Jahr abgezogen > case 1: zr1 = 28 ; jah-- ; > break ; > case 2: zr1 = 31 ; jah-- ; > break ; > case 3: zr1 = 2 ; > break ; > case 4: zr1 = 5 ; > break ; > case 5: zr1 = 7 ; > break ; > case 6: zr1 = 10 ; > break ; > case 7: zr1 = 12 ; > break ; > case 8: zr1 = 15 ; > break ; > case 9: zr1 = 18 ; > break ; > case 10: zr1 = 20 ; > break ; > case 11: zr1 = 23 ; > break ; > case 12: zr1 = 25 ; > break ; > } > > zr3 = floor (jah/4); //Zwischenrechnung > zr2 = tag + zr1 +jah + zr3 ; //vereinfachte Gaussche Formel > wot = zr2% 7 ; //Modulo auf 7 > return wot ; //Rückgabe Wochentag 0 bis 6 (Sonntag = 0) > } > etwas Aufwendiger aber simple Berechnung. Tag und Monat nicht o-Basierend da ich diese werte von der RTC bekomme Sub Dowberechnung() Dim Tageszahl As ULong '1 31 Dim Jahreshundert As ULong '2 28 31 Dim Schalttag As Byte '3 31 59 Dim Jahrzahl As ULong '4 30 90 '5 31 120 If RTC_Jahr() Mod 4 = 0 Then '6 30 151 Schalttag = 1 '7 31 181 Else '8 31 212 Schalttag = 0 '9 30 243 End If '10 31 273 '11 30 304 '12 31 334 Select Case RTC_Mon() Case 1 : Tageszahl = RTC_Tag() 'Jan Case 2 : Tageszahl = RTC_Tag() + 31 'Feb Case 3 : Tageszahl = RTC_Tag() + Schalttag + 59 Case 4 : Tageszahl = RTC_Tag() + Schalttag + 90 Case 5 : Tageszahl = RTC_Tag() + Schalttag + 120 Case 6 : Tageszahl = RTC_Tag() + Schalttag + 151 Case 7 : Tageszahl = RTC_Tag() + Schalttag + 181 Case 8 : Tageszahl = RTC_Tag() + Schalttag + 212 Case 9 : Tageszahl = RTC_Tag() + Schalttag + 243 Case 10 : Tageszahl = RTC_Tag() + Schalttag + 273 Case 11 : Tageszahl = RTC_Tag() + Schalttag + 304 Case 12 : Tageszahl = RTC_Tag() + Schalttag + 334 End Select TagJahr = Tageszahl 'angabe als Word für Berechnungen Jahrzahl = RTC_Jahr() 'vorher in ULong wandeln notwendig Jahreshundert = 36525 * Jahrzahl - 25u 'Schalttag 1/4 dazu dow = (Jahreshundert / 100 + Tageszahl - 1) Mod 7 'Korr Tageszahl da1.1.00 Sa ' Clock Berichtigungen: Wenn Tag 0 Then 1; wenn Tag > 28+Schalttag dann 1.3. End Sub mfG Ernst H. | ||
Antwort schreiben Antworten: Re: Wochentag berechnen nach Gauss (von Ernst H. - 25.01.2011 1:14) Re: Wochentag berechnen nach Gauss (von PeterS - 25.01.2011 8:56) Re: Wochentag berechnen nach Gauss (von Ernst H. - 25.01.2011 19:28) Re: Wochentag berechnen nach Gauss (von Ernst H. - 25.01.2011 20:00) Re: Wochentag berechnen nach Gauss (von Baltus - 25.01.2011 21:54) |
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum