Главная страница «Первого сентября»Главная страница журнала «Информатика»Содержание №20/2008


В мир информатики
Школа программирования

Еще раз об определении дня недели по дате

В этой статье мы опишем методику разработки программы, с помощью которой можно определить день недели, который соответствует некоторой дате.

Напомним (см. статью “Как узнать номер дня недели?”), что для 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 года, а наша программа — универсальная и применима к любым датам.

TopList