Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.145.88.130] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Есть год, месяц, число - нужен день недели.
Спасибо! |
Сообщ.
#2
,
|
|
|
Взять текущий день и чесать от него
|
Сообщ.
#3
,
|
|
|
эта, посчиать разницу между сегдняшней датой и твоей можем? сегодняшний день знаем.
берем от это разницы остаток от деления на 7, добавляем к номеру дня сегодняшнего (0 - понедельник, 1 - вторник...) берем снова остаток от деления на 7, поучаем номер дня требуемого. если еще названия дней загнать в массив, то тогда по номеру дня элементрано восстанавливается его название:)) |
Сообщ.
#4
,
|
|
|
Загляни в http://pascal.sources.ru/datetime/
|
Сообщ.
#5
,
|
|
|
Да, я в свое время написал прогу, которая считает календарь для любого месяца любого года в пределах от FFFFFFFF до 7FFFFFFF =) Надо дома покопаться. На сях, правда.
Там вобщем-то идея тривиальна. 1 января 1 года (нулевого не было) - это понедельник. Каждый четвертый год - високосный. Каждый год кратный 100 - не високосный. И все, считаешь количество високосных лет до твоего. |
Сообщ.
#6
,
|
|
|
Цитата murph, 08.06.02, 22:31:30 Там вобщем-то идея тривиальна. 1 января 1 года (нулевого не было) - это понедельник. Каждый четвертый год - високосный. Каждый год кратный 100 - не високосный. И все, считаешь количество високосных лет до твоего. Каждый четырехсотый - високосный - как-то 1600, 2000 и т.п. |
Сообщ.
#7
,
|
|
|
да, точно, забыл =)
|
Сообщ.
#8
,
|
|
|
Спасибо всем!
|
Сообщ.
#9
,
|
|
|
Вот ещё немного:
http://pascal.sources.ru/cgi-bin/forum/YaBB.cgi?board=algorithm;action=display;num=1020838130 |
Сообщ.
#10
,
|
|
|
Паскаль да Паскаль... :-)
Написал в двух функциях, тк так нужно для проекта. Можно и в одной ;-) #define StartYear 2000 #define FirstDayOfStartYear 6 #define FirstYearIsLeap 1 int dayOfWeek(unsigned int dayOfYear, unsigned int year) { int iNumberOfLeap; int week_day; year -= StartYear; iNumberOfLeap = year/4 - year/100 + year/400 + FirstYearIsLeap; week_day = (year + iNumberOfLeap + FirstDayOfStartYear + (dayOfYear-1)) \% 7; if (week_day == 0) week_day = 7; return week_day; } int dayOfYear(int day, int month, unsigned int year) { int ii, dayofyear = 0, leap; static unsigned int day_tab[2][13] = { { 0,31,28,31,30,31,30,31,31,30,31,30,31} , { 0,31,29,31,30,31,30,31,31,30,31,30,31} }; /* reference Ritchie&Kernighan */ if ((year\%4 == 0 && year\%100 != 0) || year\%400 == 0) leap = 1; else leap = 0; for (ii = 1; ii < month; ii++) dayofyear += day_tab[leap][ii]; dayofyear += day; return dayofyear; } |
Сообщ.
#11
,
|
|
|
Для упрощени вычислений можно просто плясать от 1.01.0001 (как советовал murph) и округлить количество дней в году до 365.25 а количество дней в месяце как 30.44. И при получении окончательного результата (в виде так же дробного числа) произвести округление до целого по всем правилам математики. Погрешность составляет примерно 0.02\% на каждое тысячилетие ;D
|
Сообщ.
#12
,
|
|
|
Может, 365.2425 ?
|
Сообщ.
#13
,
|
|
|
Да нет как раз 365.25 дней. Ведь именно такова натуральная продолжительность года. ;D ;D ;D
|
Сообщ.
#14
,
|
|
|
Вам че заняться нечем?
|
Сообщ.
#15
,
|
|
|
Ну конечно! ;D
В 400 годах.... 400/4 - 400/100 + 400/400 високосных годов, т.е. 97! (400*365+97)/400 = сколько? Именно 365.2425 ! 8) |