|
Еще раз об определении дня недели по датеВ этой статье мы опишем методику разработки программы, с помощью которой можно определить день недели, который соответствует некоторой дате. Напомним (см. статью “Как узнать номер дня недели?”), что для k-го дня m-го месяца N-го года день недели зависит от остатка от деления на 7 числа D (D = 5(q + r) + s + b + k, смысл используемых величин описан в указанной статье). Прежде чем приводить программу, заметим, что в ней использованы следующие величины (кроме величин k, m, N, b и D): — P, R3, q, r, s, смысл которых раскрыт в статье; — остаток1 и остаток2 — массивы со значениями величин b для каждого месяца соответственно невисокосного и високосного годов (см. таблицу в статье); — номер_дня_недели — номер дня недели, соответствующего заданной дате; — день_недели — искомая величина названия дня недели. Итак, программа на школьном алгоритмическом языке: алг День_недели нач цел k, m, N, R, P, q, r, s, b, D, номер_дня_недели, лит день_недели цел таб остаток1[1:12], остаток2[1:12] |Значения величины b для месяцев |невисокосного года остаток1[1] := 0; остаток1[2] := 3; … остаток1[11] := 3; остаток1[12] := 5 |То же, для месяцев високосного года остаток2[1] := 0; остаток2[2] := 3; … остаток2[11] := 4; остаток2[12] := 6 вывод нс, "Эта программа определяет день недели" вывод "по дате (число, номер месяца, год)" |Ввод исходных данных вывод нс, "Задайте число" ввод k вывод нс, "Задайте номер месяца" ввод m вывод нс, "Задайте номер года" ввод N |Определение величин для расчета P := div(N, 100) R := mod(N - 1, 100) q := mod(P, 4) r := div(R, 4) s := mod(R, 4) если <условие> то |Год високосный b := остаток2[m] иначе |Год невисокосный b := остаток1[m] все |Расчет значения D (формула (3) в статье) D := 5 * (q + r) + s + b + k |Определение номера дня недели номер_дня_недели := mod(D, 7) |Определение названия дня недели выбор при номер_дня_недели = 1: день_недели := "понедельник" при номер_дня_недели = 2: день_недели := "вторник" … при номер_дня_недели = 6: день_недели := "суббота" при номер_дня_недели = 0: день_недели := "воскресенье" все |Вывод ответа вывод нс, "Этот день - ", день_недели кон — где <условие> — условие, определяющее, является ли год с номером N високосным. Это условие определите самостоятельно (см. также задачу “Проверка номера года на «високосность»”). Задание для самостоятельной работы Разработайте аналогичную программу на языке программирования, который вы изучаете, и пришлите ее в редакцию. В заключение напомним, что методика определения дня недели для заданной даты средствами программы Microsoft Excel описана в статье “Каким днем недели был день вашего рождения?”4. 3 В школьном алгоритмическом языке строчная и прописная буквы в именах величин различаются. В программах на других языках программирования следует изменить имена величин R или r.4 При этом уточним, что в программе Microsoft Excel можно оперировать датами не ранее 1 января 1900 года, а наша программа — универсальная и применима к любым датам. |