На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! правила раздела Алгоритмы
1. Помните, что название темы должно хоть как-то отражать ее содержимое (не создавайте темы с заголовком ПОМОГИТЕ, HELP и т.д.). Злоупотребление заглавными буквами в заголовках тем ЗАПРЕЩЕНО.
2. При создании темы постарайтесь, как можно более точно описать проблему, а не ограничиваться общими понятиями и определениями.
3. Приводимые фрагменты исходного кода старайтесь выделять тегами code.../code
4. Помните, чем подробнее Вы опишете свою проблему, тем быстрее получите вразумительный совет
5. Запрещено поднимать неактуальные темы (ПРИМЕР: запрещено отвечать на вопрос из серии "срочно надо", заданный в 2003 году)
6. И не забывайте о кнопочках TRANSLIT и РУССКАЯ КЛАВИАТУРА, если не можете писать в русской раскладке :)
Модераторы: Akina, shadeofgray
  
> Подскажите плиз алгоритм "вечного календаря"
    Есть год, месяц, число - нужен день недели.
    Спасибо!
      Взять текущий день и чесать от него
        эта, посчиать разницу между сегдняшней датой и твоей можем? сегодняшний день знаем.
        берем от это разницы остаток от деления на 7, добавляем к номеру дня сегодняшнего (0 - понедельник, 1 - вторник...) берем снова остаток от деления на 7, поучаем номер дня требуемого. если еще названия дней загнать в массив, то тогда по номеру дня элементрано восстанавливается его название:))
          Загляни в http://pascal.sources.ru/datetime/
            Да, я в свое время написал прогу, которая считает календарь для любого месяца любого года в пределах от FFFFFFFF до 7FFFFFFF =) Надо дома покопаться. На сях, правда.
            Там вобщем-то идея тривиальна. 1 января 1 года (нулевого не было) - это понедельник. Каждый четвертый год - високосный. Каждый год кратный 100 - не високосный. И все, считаешь количество високосных лет до твоего.
              Цитата murph, 08.06.02, 22:31:30
              Там вобщем-то идея тривиальна. 1 января 1 года (нулевого не было) - это понедельник. Каждый четвертый год - високосный. Каждый год кратный 100 - не високосный. И все, считаешь количество високосных лет до твоего.

              Каждый четырехсотый - високосный - как-то 1600, 2000 и т.п.
                да, точно, забыл =)
                  Спасибо всем!
                    Вот ещё немного:
                    http://pascal.sources.ru/cgi-bin/forum/YaBB.cgi?board=algorithm;action=display;num=1020838130
                      Паскаль да Паскаль... :-)
                      Написал в двух функциях, тк так нужно для проекта. Можно и в одной ;-)


                      #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;
                      }
                        Для упрощени вычислений можно  просто плясать от 1.01.0001 (как советовал murph) и округлить количество дней в году до 365.25 а количество дней в месяце как 30.44. И при получении окончательного результата (в виде так же дробного числа) произвести округление до целого по всем правилам математики. Погрешность составляет примерно 0.02\% на каждое тысячилетие ;D
                          Может, 365.2425 ?
                            Да нет как раз 365.25 дней. Ведь именно такова натуральная продолжительность года. ;D ;D ;D
                              Вам че заняться нечем?
                                Ну конечно! ;D
                                В 400 годах.... 400/4 - 400/100 + 400/400 високосных годов, т.е. 97!
                                (400*365+97)/400 = сколько?
                                Именно 365.2425 ! 8)
                                  Шикарные подсчеты!!!!
                                  (по идее 7in)
                                  для 4 лет продолжительность 365,25
                                  для 400 лет продолжительность 365,2425
                                  для 1000 лет продолжительность 365,241
                                  ..... ;D ;D ;D
                                  И чем больше лет проходит тем меньше год становится ;)

                                  А в справочниках пишут 365 суток 6 часов 14 минут  и 24 секунды.
                                  И если брать точно 365,26 суток
                                  а если только учесть часы 365,25 суток
                                  Вот тЯк  ;D ;D ;D
                                    Цитата GrAnd, 18.06.02, 08:03:35
                                    Шикарные подсчеты!!!!
                                    (по идее 7in)
                                    для 4 лет продолжительность 365,25
                                    для 400 лет продолжительность 365,2425
                                    для 1000 лет продолжительность 365,241
                                    ..... ;D ;D ;D
                                    И чем больше лет проходит тем меньше год становится ;)

                                    А в справочниках пишут 365 суток 6 часов 14 минут  и 24 секунды.
                                    И если брать точно 365,26 суток
                                    а если только учесть часы 365,25 суток
                                    Вот тЯк  ;D ;D ;D

                                    Вы даже не представляете насколько правы в своих вычислениях. Только не надо путать тропический год с аномалистическим, приближенное значение которого Вы и привели, но которое к задаче не имеет никакого отношения. Вообще - учебник астрономии за какой-то там класс.  
                                    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                    0 пользователей:


                                    Рейтинг@Mail.ru
                                    [ Script execution time: 0,0347 ]   [ 15 queries used ]   [ Generated: 28.04.24, 07:27 GMT ]