home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* FEIERTAG.PAS *)
- (* Kleines "Bonbon" für Pascal-Freunde *)
- (* ------------------------------------------------------ *)
- USES Crt, Dos;
-
- VAR tag, monat, jahr, rest : WORD;
- vmzahl : LONGINT;
- wt : BYTE;
- einjahr : INTEGER;
- karfreitag, ostern : LONGINT;
- himmelfahrt, pfingsten : LONGINT;
- fronleichnam, bbtag : LONGINT;
-
- FUNCTION DatToZahl(tag, monat, jahr : WORD) : LONGINT;
- BEGIN
- IF monat < 3 THEN BEGIN
- Inc(monat, 12); Dec(jahr);
- END;
- DatToZahl := LongInt(jahr) * 365 + jahr SHR 2 -
- jahr DIV 100 + jahr div 400 +
- Trunc(30.60001 * Succ(monat)) - 122 + tag
- END;
-
- PROCEDURE ZahlToDatum(zahl : LONGINT;
- VAR tag, monat, jahr : WORD);
- BEGIN
- jahr := Trunc(zahl/365.2425);
- Dec(zahl, LongInt(jahr) * 365 + jahr shr 2 -
- jahr DIV 100 + jahr DIV 400 - 122);
- monat := Pred(Trunc(zahl/30.60001));
- tag := zahl - Trunc(30.60001 * Succ(monat));
- IF monat > 12 THEN BEGIN
- Dec(monat, 12); Inc(jahr);
- END;
- END;
-
- FUNCTION Wochentag(tag, monat, jahr : WORD) : BYTE;
- BEGIN
- Wochentag := (DatToZahl(tag, monat, jahr) + 2) MOD 7;
- END;
-
- PROCEDURE Vollmond;
- BEGIN
- rest := jahr MOD 19;
- IF rest = 0 THEN tag := 14;
- IF rest = 1 THEN tag := 3;
- IF rest = 2 THEN tag := 23;
- IF rest = 3 THEN tag := 11;
- IF rest = 4 THEN tag := 31;
- IF rest = 5 THEN tag := 18;
- IF rest = 6 THEN tag := 8;
- IF rest = 7 THEN tag := 28;
- IF rest = 8 THEN tag := 16;
- IF rest = 9 THEN tag := 5;
- IF rest = 10 THEN tag := 25;
- IF rest = 11 THEN tag := 13;
- IF rest = 12 THEN tag := 2;
- IF rest = 13 THEN tag := 22;
- IF rest = 14 THEN tag := 10;
- IF rest = 15 THEN tag := 30;
- IF rest = 16 THEN tag := 17;
- IF rest = 17 THEN tag := 7;
- IF rest = 18 THEN tag := 27;
- IF rest in(.2, 4, 7, 10, 13, 15, 18.) THEN monat := 3
- ELSE monat := 4;
- vmzahl := DatToZahl(tag, monat, jahr);
- wt := Wochentag(tag, monat, jahr);
- IF wt = 0 THEN ostern := vmzahl + 7;
- ostern := vmzahl + 7 - wt;
- END;
-
- PROCEDURE Feiertage;
- BEGIN
- karfreitag := ostern - 2;
- himmelfahrt := ostern + 39;
- pfingsten := ostern + 49;
- fronleichnam := ostern + 60;
- tag := 15; { Buß- und Bettag ermitteln }
- monat := 11;
- REPEAT
- tag := tag + 1;
- wt := Wochentag(tag, monat, jahr);
- UNTIL wt = 3;
- bbtag := DatToZahl(tag, monat, jahr);
- END;
- (* ------------------------------------------------------ *)
- (* Ende von FEIERTAG.PAS *)