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

UptoLike

14
write('Синус равен ',sin_z.re:5:3); if sin_z.im>=0
then write('+');
write(sin_z.im:5:3,'*i'); readkey
End.{ComplexSin}
Напишем программу, работающую с записями - датами.
Задача 4. Сто лет семье . Составьте программу, печатающую дату столет-
него юбилея семьи. Сто лет семье исполнится в день , когда суммарный возраст
всех членов семьи достигнет ста лет.
Будем считать , что мы пишем программу для современников. В этом
случае в столетии будет 36525 дней , потому что в XX-м столетии было 25 висо-
косных лет (2000 год был високосным , так как 2000 делится на 400).
Когда число дней , прожитых всеми членами семьи, будет равно 36525,
можно объявить столетний” юбилей семьи.
Число членов семьи вводится с клавиатуры в переменную n_max. Дату сто -
летнего юбилея можно найти следующим образом. Посчитать в переменной s
количество прожитых дней всеми членами семьи до рождения самого младше-
го члена семьи. Если окажется, что s больше 36525, то столетний юбилей насту-
пил до рождения младшего члена семьи. В противном случае надо найти дату,
которая наступит через (36525 - s) дней после дня рождения младшего члена се-
мьи.
Для реализации описанного алгоритма нам нужно решить три подзадачи :
1. Найти число дней между датами d1 и d2.
2. Определить , является ли дата d2 более поздней , чем дата d1.
3. Найти дату, которая наступит через dn дней .
Рассмотрим детально каждую из подзадач.
1. Число дней между датами d1 и d2 будем вычислять в функции days
(d1,d2:data): integer. Тип data - это запись с полями число, месяц и год.
Type year=1900..2100; month=1..12; day=1..31;
data=record gd:year; mc:month; dn:day end;
Для определенности будем считать , что дата d2 позже даты d1. Тогда число
дней между датами d1 и d2 равно сумме числа дней , прошедших от начала года
d1.gd до начала года d2.gd, и числа дней , прошедших от начала года d2.gd до
даты d2, без количества дней , прошедших от начала года d1.gd до даты d1.
days:=Дней _ между_годами (d1,d2)+Дней _ до_текущей _ даты (d2)-
Дней _ до _текущей _ даты (d1)
Для реализации описанного алгоритмы нужно решить две подзадачи :
1.1. Вычислить количество дней от начала года d1.gd до начала года d1.gd.
1.2. Определить количество дней от начала года до даты dt.
Разберем детально данные подзадачи .
1.1. Вычисление количества дней от начала года d1.gd до начала года
d1.gd в функции dn_gd(d1,d2:data):integer. Искомое количество дней будем нака-
пливать в переменной dn, перебирая в цикле года от d1.gd до d2.gd-1. Каждый
виток цикла добавляет в сумму 366 дней , если год високосный , и 365 - в про-