ZX Review
#7-8-9-10
08 ноября 1997 |
|
Этюды - Формула для вычисления дня недели.
(c) Jessica Justice, г.Колпашево В ZX-Ревю N1-2/97 в разделе "Этюды" Василий объявил конкурс на процедуру-календарь. Мне из- вестна отличная формула для вы- числения дня недели. Формула взята из книги "Задачи по прог- раммированию" (авторы - С.А.Аб- рамов, Г.Г.Гнездилова и др., се- рия "Библиотечка программиста", изд. "Наука" 1988), а ее авторы ссылаются на "Computer programs that work!" (authors Lee J.D., Beech G., Lee T.D.). Итак, фор- мула: считается, что год лежит в диапазоне от 1582 до 4902. Тог- да номер дня недели (0-воскре- сенье, 1-понедельник, ... 6-суб- бота) равен остатку от деления на 7 значения выражения: [2.6m-0.2]+d+y+[y/4]+[c/4]-2c где d - номер дня в месяце (1... 31), m - номер месяца в году (нумерация начинается с марта, т.е. 1-март, 2-апрель,... 10-де- кабрь, январь и февраль считают- ся месяцами с номерами 11 и 12 предыдущего года); c - две стар- шие цифры года (15...49); y - младшие цифры года (00...99); [x] - означает целую часть чис- ла. На Бейсике программа может выглядеть так: 10 INPUT "day=",day 20 INPUT "month=",month 30 INPUT "year=",year 40 IF month<3 THEN LET month=month+12 : LET year=year-1 : REM Если январь или февраль, то это последние месяцы преды- дущего года 50 LET month=month-2 : REM Нумерация начинается с марта 60 LET y$=STR$ year 70 LET c=VAL (y$(1 TO 2)) : REM Первые две цифры года 80 LET y=VAL (y$(2 TO 4)) : REM Вторые две цифры года 90 LET value=INT (2.6*month-02)+day+y+INT (y/4)+INT (c/4)-2*c 100 LET week=value-7*(INT(value/7)) : REM week - остаток от деления выражения на семь и является номером дня недели 110 PRINT "Day of week -";week В результате на экране полу- чим номер дня недели (0..6). Чтобы воплотить все это в ма- шинном коде, придется обратиться к помощи калькулятора. Увы, я не настолько хорошо знаю калькуля- тор, быть может, кто-то из чита- телей "Ревю" сможет выполнить этот алгоритм в Ассемблере? * * *
Другие статьи номера:
Похожие статьи:
В этот день... 14 декабря