Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
1 / 1 / 0
Регистрация: 28.11.2012
Сообщений: 20
1

Определение дня недели по дате

02.12.2013, 17:50. Показов 2209. Ответов 4
Метки нет (Все метки)

Помогите исправить, неправильно находит день недели.

Код
int date_day::true_day() const
{
    size_t totalDays = 0;
    bool currentIsLeap = (y % 4 == 0) && (y % 100 != 0 || y % 400 == 0);
    int days[12] = { 31, currentIsLeap ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    
    for (int i = 2; i <= y; ++i)
    {
        bool isLeap = (i % 4 == 0) && (i % 100 != 0 || i % 400 == 0);
        totalDays += isLeap ? 366 : 365;
    }
    for (int i = 2; i <= m; ++i)
        totalDays += days[i];
    totalDays += d;
    
    return (totalDays - 1) % 7 + 1;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.12.2013, 17:50
Ответы с готовыми решениями:

Определение дня недели по дате
Помогите найти ошибку. Работает, но не корректно. Определяет не тот день. #include&lt;stdio.h&gt;...

Определение дня недели по введенной дате
Доброго времени суток! Программу я составил, вводишь день,месяц и год, и день недели она выдаёт. Но...

Вычисление дня недели по дате
здравствуйте. как можно вычислить день недели по дате? слышала про формулу Зеллера, но там мало...

Алгоритм вычисления дня недели по дате
Посдкажите алгоритм вычисления дня недели по дате( день, месяц, год). int a = (14 - month)/12;...

4
3170 / 1929 / 313
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
02.12.2013, 18:16 2
Надо было пояснения читать, там где крали код. Нет коррекции номера года для первых двух месяцев. Нет коррекции номера месяца. Нет коррекции номера дня.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int GetDay(int day,int month,int year)
{
   // MONTH:   March - 1 ... December - 10 of Current Year,  January - 11, February - 12 of Previous Year
   month -= 2;
 
   if (month <= 0) // January & February
   {
      --year;
      month += 12;
   }
 
   year -= 100 * (year / 100);   // Two last  digits
 
   double   tmp = (2.6 * month - 0.2);
 
   int   day_of_week = (((int)tmp + day + year + (year / 4) + (year / 400) - 2 * (year / 100)) % 7);
 
   // DAYS: Sunday - 0, Monday - 1 etc.
   day_of_week += 6;  // Shift --> Monday = 0
 
   return day_of_week %= 7;
}
0
1 / 1 / 0
Регистрация: 28.11.2012
Сообщений: 20
02.12.2013, 18:22  [ТС] 3
Цитата Сообщение от gazlan Посмотреть сообщение
Надо было пояснения читать, там где крали код. Нет коррекции номера года для первых двух месяцев. Нет коррекции номера месяца. Нет коррекции номера дня.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int GetDay(int day,int month,int year)
{
   // MONTH:   March - 1 ... December - 10 of Current Year,  January - 11, February - 12 of Previous Year
   month -= 2;
 
   if (month <= 0) // January & February
   {
      --year;
      month += 12;
   }
 
   year -= 100 * (year / 100);   // Two last  digits
 
   double   tmp = (2.6 * month - 0.2);
 
   int   day_of_week = (((int)tmp + day + year + (year / 4) + (year / 400) - 2 * (year / 100)) % 7);
 
   // DAYS: Sunday - 0, Monday - 1 etc.
   day_of_week += 6;  // Shift --> Monday = 0
 
   return day_of_week %= 7;
}
Код я вовсе не крал, а заказывал. Он недоделан...
0
3170 / 1929 / 313
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
02.12.2013, 19:01 4
а заказывал. Он недоделан
Ну, значит, не там заказали. Я вам привел работающий. См.: Zeller's congruence
0
1 / 1 / 0
Регистрация: 28.11.2012
Сообщений: 20
03.12.2013, 09:26  [ТС] 5
Вот еще неплохой вариант, может кому пригодиться...

Код
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
using namespace std;

int main()
{
 int year,month,day,week;
 cin>>day>>month>>year;
int a = (14 - month)/12;
int y = year - a;
int m = month + 12*a - 2;
week = (day+y+(y/4)-(y/100)+(y/400)+(31*m)/12) % 7;
cout<<week;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.12.2013, 09:26

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Расчет дня недели по дате, исправьте ошибки
Программа должна считать день недели по дате, использую по заданию какую то римскую формулу. ...

Написать программу, которая запрашивает у пользователя номер дня недели, затем выводит название дня недели
Написать программу, которая запрашивает у пользователя номер дня недели, затем выводит название дня...

Написать программу, которая по номеру дня недели (целому числу от 1 до 7) выдает в качестве результата название дня недели
!!!!!

Определить номер дня недели для заданного номера дня года
а как это примерно будет на C++ ?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.