Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Определения дня недели по дате 
:(
    Опции темы
Nastya
Дата 28.4.2003, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 27.3.2002
Где: Мариуполь

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



САБЖ.
На http://alglib.chat.ru/ Нашла алгоритм.
По нему получила такую функцию

int DayOFWeek(int d, int m, int y)
{
if(m>2)
m++;
else
{
m=m+13;
y--;
}
int n=int(365.25*y)+int(30.6*m)+d-621050;
return (n-int(n/7)*7+1);
}


Во первых не понятно откуда эти числа.
Во вторых работает не правильно.
Если кто что подскажет буду благодарна.


--------------------
Что бы понять рекурсию, надо понять рекурсию

"Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор
PM MAIL   Вверх
acp
Дата 28.4.2003, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 4.2.2003
Где: Владимир

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



Код

int DayOFWeek(int d, int m, int y)
{
 if(m<2)
 {
   inc(m, 12);
   dec(y);
 }

 int N = d + 2 * m + int(0.6 * (m + 1)) + y +
   int(y / 4) - int(y / 100) +int(y / 400) + 2;
 N = int((N / 7 - int(N / 7)) * 7 + 0.5);

 return(N);
}


Попробуй. Откуда коэффициены берутся, не знаю, насчёт синтаксической правильности (inc, dec), преобразования типов (int), не уверен (просто на С очень давно не писал). Если это заработает, то скажу откуда взял. Да, вот ещё - здесь номер дня, по моему начинается с 0.
PM WWW ICQ   Вверх
podval
Дата 28.4.2003, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Где я? Кто я?
****


Профиль
Группа: Экс. модератор
Сообщений: 3094
Регистрация: 25.3.2002
Где: СПб

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



Числа понятно откуда. 365.25 - среднее количество дней в четырех идущих подряд годах, один из которых високосный. 30.6 - среднее количество дней в месяце. 7 - количество дней в неделе. Вот из-за этих "средних" и случаются ошибки. Я думаю, за основу надо взять принцип, заложенный в программах типа "вечный календарь". К сожалению, с ходу, не скажу, как конкретно там сделано.
PM WWW ICQ   Вверх
acp
Дата 28.4.2003, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 4.2.2003
Где: Владимир

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



Хм... Вышенаписанный код, это, собственно, и есть реализация "вечного календаря".
PM WWW ICQ   Вверх
Nastya
Дата 29.4.2003, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 27.3.2002
Где: Мариуполь

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



Может я что-то не поняла, но получила такую функцияю. Работает она все-таки не правильно.

И еще месяц с 1 по 12 или с 0 по 11?
int DayOFWeek(int d, int m, int y)
{
if(m<2)
{
m+= 12;
y--;
}

double N = d + 2 * m + int(0.6 * (m + 1)) + y +
int(y / 4) - int(y / 100) +int(y / 400) + 2;
N = (N / 7 - int(N / 7)) * 7 + 0.5;

return((int)N);
}


n сделала double, т.к. автоматически округлялось где не надо и были все нули.


--------------------
Что бы понять рекурсию, надо понять рекурсию

"Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор
PM MAIL   Вверх
Crait
Дата 29.4.2003, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Nastya, если Вам нужно получить результат и используете вы BCB/Delphy,
могу порекомендовать воспользоваться классом TDateTime - там есть все
что надо. Ну а в случае применения других компиляторов тоже, вероятно,
будет полезно заглянуть в исходниики VCL.
PM MAIL   Вверх
&-ray
Дата 10.5.2003, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 406
Регистрация: 15.4.2003
Где: Казахстан, г Аста на

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



для делфей:

function DayOfWeek(Date: TDateTime): Integer;

возвращает значение: 1 (воскресенье ) .. 7 (суббота)


--------------------
"Совсем неважно от чего помрешь, ведь куда важнее - для чего родился..." С.Б.

--------------------
И снова мышь беру я в руки
Куда иду? - Конечно в сруки!
PM MAIL WWW   Вверх
Nastya
Дата 11.5.2003, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 27.3.2002
Где: Мариуполь

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



Спасибо, но мне надо на С. Я конечно выкрутилась поигравшись с функциями из time.h, но там мне кое,что не нравится, да и как-то грамоздки и некрасиво получилось.


--------------------
Что бы понять рекурсию, надо понять рекурсию

"Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор
PM MAIL   Вверх
Leonid
Дата 11.5.2003, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Прохожий



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

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



www

Это сообщение отредактировал(а) Leonid - 22.9.2006, 00:14
PM   Вверх
Nastya
Дата 13.5.2003, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 27.3.2002
Где: Мариуполь

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



Большое спасибо, Леонид.
Буду разбираться, думаю кроме дня недели найду еще много интересного smile.gif , если ты не против
thumbs-up.gif


--------------------
Что бы понять рекурсию, надо понять рекурсию

"Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор
PM MAIL   Вверх
DENNN
Дата 14.5.2003, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

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



codeproject.com
там покапайся smile.gif
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

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


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

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


 




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


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

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