Calculo del dia de la semana en Modula 2

(* Calculo del mes usando la congurencia Zeller , mas rapida y menos carga de m�quina *)
MODULE Zeller;
(* Read a list of dates, and determine the day of the week for each.
List is terminated with 0 *)

PROCEDURE WeekDay (D, M, Y : INTEGER) : INTEGER;
(* Returns the Weekday on which a day D of a given month M of a given
year Y falls using Zeller’s Congruence *)
VAR
C : INTEGER (* century (almost) *);
BEGIN
IF ((M > 0) AND (M < 13) AND (D < 32)) THEN
M := (M + 9) MOD 12 + 1;
IF M >= 11 THEN DEC(Y) END (* Regard Jan and Feb as 11,12 of previous year *);
C := Y DIV 100;
Y := Y MOD 100;
RETURN ((26 * M – 2) DIV 10 + D + Y + Y DIV 4 + C DIV 4 – 2 * C + 7777) MOD 7
END;
END WeekDay;

VAR
Day, (* day of interest *)
Month, (* January through December *)
Year : INTEGER (* year of interest *);

BEGIN (* Zeller *)
WriteLn(‘A program for finding the day of the week’);
LOOP
Read(‘Supply Day [0.. 31] (0 stops), Month [1..12], Year ‘, Day);
IF Day = 0 THEN EXIT END;
Read(Month, Year);
Write(Day: 1, ‘/’, Month: 1, ‘/’, Year: 1, ‘ fell on ‘);
CASE WeekDay(Day, Month, Year) OF
| 0 : WriteLn(‘Sunday’)
| 1 : WriteLn(‘Monday’)
| 2 : WriteLn(‘Tuesday’)
| 3 : WriteLn(‘Wednesday’);
| 4 : WriteLn(‘Thursday’)
| 5 : WriteLn(‘Friday’)
| 6 : WriteLn(‘Saturday’);
END
END
END Zeller .


Publicado

en

por

Etiquetas:

Comentarios

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.