Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Алгоритм нахождения дня недели по дате, - 
:(
    Опции темы
Заппер
Дата 8.4.2006, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 8.4.2006

Репутация: нет
Всего: нет



Подскажите пожалуйста кто-нибудь формулу, по которой можно было бы вычислить день недели исходя из даты! У меня одна такая формула в сборнике алгоритмов есть, но она не работает (видимо, опечатка, пробовал "подстраивать" - не работает).
зы: Про стандарстную функцию знаю, но мне не подойдет, т.к. надо считать даты в очень большом диапозоне.
PM MAIL   Вверх
MFSham
Дата 8.4.2006, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 28.8.2005
Где: Беларусь, Гродно

Репутация: нет
Всего: 3



google рулит :

http://algolist.manual.ru/misc/yearweek.php
http://dvoika.net/education/TurboPascal/gl2/gl2_7_1.html

да и на форуме это уже обсуждалось:
http://forum.vingrad.ru/index.php?showtopic=35160
http://forum.vingrad.ru/index.php?showtopic=41434
http://forum.vingrad.ru/index.php?showtopic=13799

Это сообщение отредактировал(а) MFSham - 8.4.2006, 17:46
--------------------
Без ветра трава неподвижна. Без программ компьютеры бесполезны.
PM MAIL   Вверх
Kuber
Дата 9.4.2006, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 7.4.2006
Где: #vingrad

Репутация: нет
Всего: 3



Код

unit datefunc;

interface
function checkdate (date : string) :boolean;
function Date2julian (date : string) : longint;
function Julian2date (julian : longint) : string;
function DayOfTheWeek (date : string) :string;
function idag : string;

implementation
uses

sysutils;

function idag () : string;
{Получает текущую дату и возвращает ее в формате YYYYMMDD для использования
другими функциями данного молуля.}
var

Year, Month, Day: Word;
begin
DecodeDate(Now, Year, Month, Day);
result := IntToStr(year)+ IntToStr(Month) +IntToStr(day);
end;

function Date2julian (date : string) : longint;
{Получает дату в формате YYYYMMDD.
Если у вас другой формат,
в первую очередь преобразуйте его.}
var

month,day,year:integer;
ta,tb,tc : longint;
begin

month := strtoint(copy(date,5,2));
day := strtoint(copy(date,7,2));
year := strtoint(copy(date,1,4));
if month > 2 then
month := month - 3
else
begin
month := month + 9;
year := year - 1;
end;
ta := 146097 * (year div 100) div 4;
tb := 1461 * (year MOD 100) div 4;
tc := (153 * month + 2) div 5 + day + 1721119;
result := ta + tb + tc
end;

function mdy2date (month, day, year : integer) : string;
var

y,m,d : string;
begin

y := '000'+inttostr(year);
y := copy(y,length(y)-3,4);
m := '0'+inttostr(month);
m := copy(m,length(m)-1,2);
d := '0'+inttostr(day);
d := copy(d,length(d)-1,2);
result := y+m+d;

end;


function Julian2date (julian : longint) : string;
{Получает значение и возвращает дату в формате YYYYMMDD}
var

x,y,d,m : longint;
month,day,year : integer;
begin

x := 4 * julian - 6884477;
y := (x div 146097) * 100;
d := (x MOD 146097) div 4;
x := 4 * d + 3;
y := (x div 1461) + y;
d := (x MOD 1461) div 4 + 1;
x := 5 * d - 3;
m := x div 153 + 1;
d := (x MOD 153) div 5 + 1;
if m < 11 then
month := m + 2
else
month := m - 10;
day := d;
year := y + m div 11;
result := mdy2date(month, day, year);
end;



function checkdate (date : string) :boolean;
{Дата должна быть в формате YYYYMMDD.}
var

julian : longint;
test : string;
begin
{Сначала преобразовываем строку в юлианский формат даты.
Это позволит получить необходимое значение.}
julian := Date2julian(date);
{Затем преобразовываем полученную величину в дату.
Это всегда будет правильной датой. Для проверки делаем обратное преобразование.
Результат проверки передаем как выходной параметр функции.}
test := Julian2date(julian);

if date = test then

result := true
else

result := false;
end;

function DayOfTheWeek (date : string) :string;
{Получаем дату в формате YYYYMMDD
и возвращаем день недели.}
var

julian : longint;
begin
julian := (Date2julian(date)) MOD 7;

case julian of
0 : result := 'Понедельник';
1 : result := 'Вторник';
2 : result := 'Среда';
3 : result := 'Четверг';
4 : result := 'Пятница';
5 : result := 'Суббота';
6 : result := 'Воскресенье';
end;
end;


end.


Вот пример на делфи. Взято из F.A.Q-Kuliba
--------------------
Если меня угораздило написать что то умное и вам понравилось, то не забудте нажать [-]...:)    
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0514 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.