Напишите программу, которая по дате определяет день недели, на который эта дата приходится. Для вычисления дня недели воспользуйтесь формулой:
W = ( d+[(13m-1)/5]+Y+[Y/4]+[c/4]-2c + 777) % 7.
Здесь d - число месяца, m - номер месяца, если начинать счет с марта, как делали это в Древнем Риме (март -1, апрель -2, ... , февраль 12 ), Y - номер года в столетии, с - количество столетий. Квадратные скобки означают, что надо взять целую часть от значения, находящегося в скобках. Вычисленное по формуле значение определяет день недели: 1 - понедельник, 2 - вторник, ... , 6 - суббота, 0 - воскресенье.
/*
Программа по дате определяет день недели.
фрмула: (d + [1/5*(13*m - 1)] + Y + [Y/4] + [c/4] - 2*c + 777) * mod(7);
*/
#include "locale.h"
#include <stdio.h>
#include <curses.h>
int main()
{
int day, month, year; // день, месяц, год
int c,y; // столетие и год в столетии
int m; // месяц по древнеримскому календарю
int d; // день недели
char *loc;
loc = setlocale(LC_CTYPE,"ru_RU.UTF-8");
initscr();
printw("Определение дня недели по дате\n");
printw("Введите дату: день, месяц, год.\n");
printw("Например: 5 12 1939\n");
printw("-> ");
scanw("%i %i %i", &day, &month, &year);
if(month == 1 || month == 2)
year--;
m = month - 2;
if(m <= 0) m = m + 12;
c = year / 100;
y = year - c * 100;
d = (day + (13*m - 1)/5 + y + y/4 + c/4 - 2*c + 777) % 7;
switch(d)
{
case 1: printw("Понедельник."); break;
case 2: printw("Вторник."); break;
case 3: printw("Среда."); break;
case 4: printw("Четверг."); break;
case 5: printw("Пятница."); break;
case 6: printw("Суббота."); break;
case 0: printw("Воскресенье."); break;
}
getch();
endwin();
return 0;
}
Комментариев нет:
Отправить комментарий