Найти два года, календари которых будет идентичными - Free Pascal
Формулировка задачи:
У Кати был календарик на x год. Этот год закончился, поэтому она хотела выбросить календарик. Но затем подумала, что он может еще пригодится - ведь возможно через несколько лет наступит год, для которого полностью подходит календарь на X год. Найти ближайший такой год
Решение задачи: «Найти два года, календари которых будет идентичными»
textual
Листинг программы
Uses sysutils;
var
p:word;
i:byte=0;
begin
write('Start year : ');
readln(p);
repeat
inc (i);
until (dayofweek(StrToDate('01.01.'+inttostr(p)))=dayofweek(StrToDate('01.01.'+inttostr(p+i))))
and (dayofweek(StrToDate('31.12.'+inttostr(p)))=dayofweek(StrToDate('31.12.'+inttostr(p+i))));
writeln(p+i);
readln;
end.
Объяснение кода листинга программы
- Импортируется модуль sysutils.
- Объявляется переменная p типа word для хранения числа.
- Объявляется переменная i типа byte и инициализируется значением 0.
- Выводится запрос на ввод начальной даты в формате
Start year :. - Считывается введенное значение в переменную p.
- Запускается цикл repeat, который будет выполняться до тех пор, пока условие не станет ложным.
- Условие: день недели текущей даты (полученной из строки '01.01.'+inttostr(p)) совпадает с днем недели следующей даты (полученной из строки '01.01.'+inttostr(p+i)).
- Если условие выполняется, значение переменной i увеличивается на 1.
- Значение переменной i используется для получения следующей даты из текущей (например, для года 2022 это будет 2023).
- Проверяется, совпадают ли дни недели текущей даты (полученной из строки '31.12.'+inttostr(p)) и следующей даты (полученной из строки '31.12.'+inttostr(p+i))).
- Если условие выполняется, значение переменной i увеличивается на 1.
- После выхода из цикла repeat, выводится значение переменной p+i.
- Программа ожидает ввода пользователя, чтобы перейти к следующему шагу.
- Цикл while true, который ожидает ввода пользователя и повторяет шаги с 4 по 13.