Язык программирования Pascal. Строки и записи. Васильев В.В - 15 стр.

UptoLike

15
тивном случае .
Для ответа на вопрос: Является ли год високосным? потребуется логиче-
ская функция:
1.1.1. Проверка является ли год gd високосным реализована в функции
visokos (gd:year): boolean. В современном (григорианском ) календаре каждый
год, номер которого делится на 4, является високосным, за исключением тех ,
которые делятся на 100 и не делятся на 400. Например, 1900 - невисокосный ,
2000 - високосный .
1.2 Определение количества дней от начала года до даты dt. Напишем
функцию dn_dt(dt:data):integer. Искомое количество дней будем накапливать в
переменной dn , перебирая в цикле месяцы от 1 до dt.mc-1. Каждый виток цикла
добавляет в сумму количество дней в очередном месяце. По завершению цикла
к значению переменной dn добавляется количество дней dt.dn.
1.2.1. Нахождение количества дней в месяце mc года gd реализовано в
функции dmes (mc:month; gd:year): integer. Блок операторов функции состоит из
оператора выбора. Если mc in [4,6,9,11], то dmes будет равно 30. Если mc in
[1,3,5,7,8,10,12], то dmes будет равно 31. Количество дней в феврале определяет-
ся в зависимости от того, является ли год високосным.
2. Определение, является ли дата d2 более поздней , чем дата d1? Ответ
на поставленный вопрос будет дан в функции pos (d1,d2:data): boolean. Значение
true функция примет, если год даты d2.gd больше года даты d1.gd или
если год даты d2.gd равен году даты d1.gd и (месяц даты d2.mc больше месяца
даты d1. mc или если месяц даты d2.mc равен месяцу даты d1. mc и число дней
даты d2.dn больше числа дней в дате d1.dn).
3. Нахождение даты , которая наступит через dn дней после даты dt,
оформим в виде процедуры bd_dt (dn:integer; var dt:data). Новую дату удобнее
считать от начала года dt.gd. Поэтому от dt надо отступить назад на 1 января
dt.gd года. Раз дата переносится в прошлое, то увеличивается число дней dn на
количество дней , прошедших от начала года dt.gd до даты gd.
Будем убавлять количество дней dn сначала годами, потом месяцами, а за-
тем днями.
Чтобы найти год новой даты , нужно вычитать из dn число дней в году
dt.gd, до тех пор , пока в dn не останется число, меньшее числа дней в году. При
очередном вычитании год в dt.gd увеличивается на единицу.
Чтобы найти месяц новой даты , нужно вычитать из dn число дней в месяце
dt.mc, до тех пор , пока в dn не останется число, меньшее числа дней в очеред-
ном месяце. При очередном вычитании месяц в dt.mc увеличивается на едини-
цу.
Почему при определении месяца новой даты мы не переступим рубеж года ?
Оставшееся число дней в dn будет числом дней в новой дате dt.dn.
3.1. Число дней в году посчитаем в функции dgod(gd:year):integer. Если год
високосный , то в нем 366 дней , иначе 365.
Program Sto_let;