![]() |
|
![]() ![]() ![]() |
|
Nastya |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 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); } Во первых не понятно откуда эти числа. Во вторых работает не правильно. Если кто что подскажет буду благодарна. -------------------- Что бы понять рекурсию, надо понять рекурсию "Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор |
|||
|
||||
acp |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 389 Регистрация: 4.2.2003 Где: Владимир Репутация: нет Всего: 2 |
Попробуй. Откуда коэффициены берутся, не знаю, насчёт синтаксической правильности (inc, dec), преобразования типов (int), не уверен (просто на С очень давно не писал). Если это заработает, то скажу откуда взял. Да, вот ещё - здесь номер дня, по моему начинается с 0. |
|||
|
||||
podval |
|
|||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: 18 Всего: 62 |
Числа понятно откуда. 365.25 - среднее количество дней в четырех идущих подряд годах, один из которых високосный. 30.6 - среднее количество дней в месяце. 7 - количество дней в неделе. Вот из-за этих "средних" и случаются ошибки. Я думаю, за основу надо взять принцип, заложенный в программах типа "вечный календарь". К сожалению, с ходу, не скажу, как конкретно там сделано.
|
|||
|
||||
acp |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 389 Регистрация: 4.2.2003 Где: Владимир Репутация: нет Всего: 2 |
Хм... Вышенаписанный код, это, собственно, и есть реализация "вечного календаря".
|
|||
|
||||
Nastya |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 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, т.к. автоматически округлялось где не надо и были все нули. -------------------- Что бы понять рекурсию, надо понять рекурсию "Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор |
|||
|
||||
Crait |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 244 Регистрация: 20.2.2003 Репутация: 1 Всего: 1 |
Nastya, если Вам нужно получить результат и используете вы BCB/Delphy,
могу порекомендовать воспользоваться классом TDateTime - там есть все что надо. Ну а в случае применения других компиляторов тоже, вероятно, будет полезно заглянуть в исходниики VCL. |
|||
|
||||
&-ray |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 406 Регистрация: 15.4.2003 Где: Казахстан, г Аста на Репутация: нет Всего: нет |
для делфей:
function DayOfWeek(Date: TDateTime): Integer; возвращает значение: 1 (воскресенье ) .. 7 (суббота) -------------------- "Совсем неважно от чего помрешь, ведь куда важнее - для чего родился..." С.Б. -------------------- И снова мышь беру я в руки Куда иду? - Конечно в сруки! |
|||
|
||||
Nastya |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 27.3.2002 Где: Мариуполь Репутация: нет Всего: 44 |
Спасибо, но мне надо на С. Я конечно выкрутилась поигравшись с функциями из time.h, но там мне кое,что не нравится, да и как-то грамоздки и некрасиво получилось.
-------------------- Что бы понять рекурсию, надо понять рекурсию "Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор |
|||
|
||||
Leonid |
|
|||
![]() Прохожий Профиль Группа: Участник Сообщений: 2 Регистрация: 5.4.2003 Репутация: нет Всего: нет |
www
Это сообщение отредактировал(а) Leonid - 22.9.2006, 00:14 |
|||
|
||||
Nastya |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 27.3.2002 Где: Мариуполь Репутация: нет Всего: 44 |
Большое спасибо, Леонид.
Буду разбираться, думаю кроме дня недели найду еще много интересного ![]() ![]() -------------------- Что бы понять рекурсию, надо понять рекурсию "Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор |
|||
|
||||
DENNN |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
||||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |