|
Программируем по-русски
|
Основная задача Глагола — дать человеку возможность воплощать свои мысли на языке, близком к его родному языку. Издатель Глагола
|
(******************************************************************************) (**) ОТДЕЛ Дата; (******************************************************************************) (* НАЗНАЧЕНИЕ: работа с календарём *) (******************************************************************************) ВИД Вид- = НАБОР день,месяц,год:ЦЕЛ КОН; (****************************************************************************** * Переводит дату в число дней, прошедших от начала 1 года н. э. (числовое * представление даты) ******************************************************************************) ЗАДАЧА ВЧисло-(дата-:Вид):ЦЕЛ; ПЕР y,m,n:ЦЕЛ; УКАЗ y:=дата.год; m:=дата.месяц -3; ЕСЛИ m < 0 ТО УВЕЛИЧИТЬ(m,12); УМЕНЬШИТЬ(y) КОН; n:=(y*1461 ДЕЛИТЬ 4) + ((m*153+2) ДЕЛИТЬ 5) + дата.день - 306; ЕСЛИ n > 577737 ТО n:=n - ((y ДЕЛИТЬ 100)*3 - 5) ДЕЛИТЬ 4 КОН; ВОЗВРАТ n КОН ВЧисло; (****************************************************************************** * Переводит число дней, прошедших от начала 1 года н.э. в дату ******************************************************************************) ЗАДАЧА ИзЧисла-(n:ЦЕЛ; дата+:Вид); ПЕР c,y,m:ЦЕЛ; УКАЗ ЕСЛИ n > 577737 ТО n:=n*4 +1215; c:=n ДЕЛИТЬ 146097; n:=n ОСТАТОК 146097 ДЕЛИТЬ 4 ИНАЧЕ n:=n +305; c:=0 КОН; n:=n*4 +3; y:=n ДЕЛИТЬ 1461; n:=n ОСТАТОК 1461 ДЕЛИТЬ 4; n:=n*5 +2; m:=n ДЕЛИТЬ 153; n:=n ОСТАТОК 153 ДЕЛИТЬ 5; ЕСЛИ m > 9 ТО m:=m -12; УВЕЛИЧИТЬ(y) КОН; дата.год:=100*c + y; дата.месяц:=m +3; дата.день:=n +1 КОН ИзЧисла; (****************************************************************************** * Вычисляет, является ли год високосным ******************************************************************************) ЗАДАЧА Високосный-(год:ЦЕЛ):КЛЮЧ; УКАЗ ВОЗВРАТ ((год ОСТАТОК 4 = 0) И (год ОСТАТОК 100 # 0)) ИЛИ (год ОСТАТОК 400 = 0) КОН Високосный; (****************************************************************************** * Возвращает число дней в указаном месяце данного года ******************************************************************************) ЗАДАЧА ДнейВМесяце-(месяц,год:ЦЕЛ):ЦЕЛ; ПЕР дней:ЦЕЛ; УКАЗ ВЫБРАТЬ месяц ИЗ | 1: дней:=31 | 2: ЕСЛИ Високосный(год) ТО дней:=29 ИНАЧЕ дней:=28 КОН | 3: дней:=31 | 4: дней:=30 | 5: дней:=31 | 6: дней:=30 | 7: дней:=31 | 8: дней:=31 | 9: дней:=30 | 10: дней:=31 | 11: дней:=30 | 12: дней:=31 ИНАЧЕ дней:=0 КОН; ВОЗВРАТ дней КОН ДнейВМесяце; (****************************************************************************** * Возвращает число дней, которое необходимо прибавить к дате, чтобы перевести её * из даты Григорианского календаря в дату Юлианского календаря (старый стиль), * используя числовое представление текущей даты ******************************************************************************) ЗАДАЧА СтарыйСтиль-(n:ЦЕЛ):ЦЕЛ; ПЕР век:ЦЕЛ; УКАЗ век:=(n ДЕЛИТЬ 146097)*4 + ((n ОСТАТОК 146097) ДЕЛИТЬ 36524) +1; ВОЗВРАТ век - ((век-1) ДЕЛИТЬ 4) -3 КОН СтарыйСтиль; (****************************************************************************** * Возвращает номер текущего дня недели (1-понедельник, ..., 7-воскресенье), * используя числовое представление текущей даты ******************************************************************************) ЗАДАЧА ДеньНедели-(дата-:Вид):ЦЕЛ; ПЕР c:ЦЕЛ; УКАЗ ЕСЛИ дата.месяц < 3 ТО c:=1 ИНАЧЕ c:=0 КОН; ВОЗВРАТ ( ( 3*дата.год - (7*(дата.год + (дата.месяц+9) ДЕЛИТЬ 12)) ДЕЛИТЬ 4 + (23*дата.месяц) ДЕЛИТЬ 9 + дата.день + 2 + ((((дата.год-c) ДЕЛИТЬ 100) +1)*3 ДЕЛИТЬ 4) -16 ) ОСТАТОК 7 ) +1 КОН ДеньНедели; ЗАДАЧА ПравославнаяПасха-(год:ЦЕЛ):ЦЕЛ; ПЕР a,b,число:ЦЕЛ; дата:Вид; УКАЗ a:=(19*(год ОСТАТОК 19) + 15) ОСТАТОК 30; b:=a + (2*(год ОСТАТОК 4) + 4*(год ОСТАТОК 7) + 6*a + 6) ОСТАТОК 7; дата.год:=год; дата.месяц:=(b+25) ДЕЛИТЬ 35 +3; дата.день:=b + 22 - 31*(дата.месяц ДЕЛИТЬ 4); число:=ВЧисло(дата); ВОЗВРАТ число + СтарыйСтиль(число) КОН ПравославнаяПасха; КОН Дата. ▲ Вопросы, замечания и предложения высылайте на atimopheyev@yahoo.com или Издателю Глагола:
|
|