Обратите внимание, что в этой задаче месяц считается от марта, то есть:
• март – 1,
• апрель – 2,
• …
• декабрь – 10,
• январь – 11,
• февраль –
12.
При этом, если исходный месяц – январь или февраль, необходимо уменьшить год на 1 (так, например, 1 января 2000 года по Римскому счёту будет относиться к 1999 году).
Общая формула для вычисления дня недели выглядит так:
R = ( d + [13*(m + 1)/5] + Y + [Y/4] + [c/4] – c ) mod 7
где
d – число месяца,
m – порядковый номер месяца по римской схеме (март=1, …, февраль=12),
Y – год внутри столетия (последние две цифры года),
c – количество столетий (первая часть года).
Квадратные скобки означают взятие целой части от результата деления. Результат R определяет день недели следующим образом:
1 – понедельник, 2 – вторник, 3 – среда, 4 – четверг, 5 – пятница, 6 – суббота, 0 – воскресенье.
Ниже приведён пошаговый разбор программы:
─────────────────────────────
- Ввод данных
Программа запрашивает у пользователя число, месяц и год.
─────────────────────────────
- Преобразование месяца
Если вводимый месяц — январь (1) или февраль (2), то по условию римской системы нужно прибавить 10, чтобы получить значение 11 или 12 соответственно, а также уменьшить год на 1. Если месяц от марта до декабря, то новое значение месяца получаем как (m – 2):
– для марта: 3–2 = 1
– для апреля: 4–2 = 2 и т.д.
─────────────────────────────
- Вычисление величин Y и c
После приведения месяца корректируем год:
Y = (корректированный год) % 100 (год в столетии)
c = (корректированный год) / 100
─────────────────────────────
- Вычисление по формуле
Вычисляем по шагам:
– term1 = [13*...