Berechnung des Wochentags
Das Datum sei gegeben durch: d, j
1 ≤ d ≤ 366.
Dann berechnet sich der Wochentag
w ∈ {0,1,2,3,4,5,6} |
∧
=
|
{So,Mo,Di,Mi,Do,Fr,Sa} |
|
nach folgender Formel:
w = |
( ( ( |
d+105+ |
⌈ | ⌊ |
5* |
j-1-[ (j-1)/ 100 ]*100
4
|
|
⌉ | ⌋ |
+ |
⌈ | ⌊ |
|
j-1
400
|
|
⌉ | ⌋ |
-2 |
⌈ | ⌊ |
|
j-1
100
|
|
⌉ | ⌋ |
|
) ) ) |
mod 7 |
|
Beachte:
Teil- bzw. Zusatzaufgaben:
- Datumsangabe Tag,Monat umrechnen in laufenden Tag d des Jahres,
z.B. als Funktionsunterprogramm:
INTEGER FUNCTION lfdtag(tag,mon,jahr)
INTEGER tag,mon,jahr, ...
...
lfdtag = ...
return
END
Schaltjahre beachten: (durch 4 teilbar) und
[(nicht durch 100 teilbar) oder (durch 400 teilbar)]
- Man überprüfe mit Hilfe dieses Programms die "Theorie" von Prof. Lanckau
(Pressemeldungen vom 11.2.98): "Freitag, der 13." ist kein
außergewöhnlicher Tag.
Stellen Sie fest, wie oft in mehreren aufeinanderfolgenden Jahren der jeweils 13. Tag der
Monate auf die einzelnen Wochentage fällt.
Ausgabe als Tabelle,
Jahr Anzahl_So Anzahl_Mo ... Anzahl_Fr Anzahl_Sa
darunter die Summe über alle Jahre,
oder auch akkumulierend, d.h. Anzahl nach 1, 2, 3, ... Jahren in die Tabelle schreiben,
oder vereinfacht: nur die Freitage zählen und Prozentsatz ausrechnen.
Hinweis: Zahlen, die in einer Zeile stehen sollen, müssen mit einer
write-Anweisung ausgegeben werden,
z.B. ein Feld INTEGER anzahl(7) oder anzahl(0:6)
vereinbaren (pro Wochentag eine Zählgröße anzahl(w))
und das ganze Feld mit einer Anweisung ausgeben:
write (*,*) jahr, anzahl
bzw. mit vorgegebener Formatierung der Zahlen:
write (*,'(I5,7I4)') jahr, anzahl
- Durch geringe Änderungen am Programm kann man feststellen, ob es über viele Jahre
hinweg einen Kalendermonat gibt, in dem "Freitag, der 13." bevorzugt auftritt.
File translated from TEX by TTH, version 1.95.