Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Napster91
1 / 1 / 0
Регистрация: 28.11.2012
Сообщений: 20
#1

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

02.12.2013, 17:50. Просмотров 800. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.12.2013, 17:50
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Определение дня недели по дате (C++):

Определение дня недели по дате - C++
Помогите найти ошибку. Работает, но не корректно. Определяет не тот день. #include&lt;stdio.h&gt; #include&lt;iostream&gt; void main() { ...

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

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

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

Расчет дня недели по дате, исправьте ошибки - C++
Программа должна считать день недели по дате, использую по заданию какую то римскую формулу. #include &lt;iostream&gt; #include...

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
gazlan
3131 / 1906 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 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
Napster91
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
gazlan
3131 / 1906 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
02.12.2013, 19:01 #4
а заказывал. Он недоделан
Ну, значит, не там заказали. Я вам привел работающий. См.: Zeller's congruence
0
Napster91
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.12.2013, 09:26
Привет! Вот еще темы с ответами:

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

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

Определить номер дня недели для заданного дня года - C++
Дни недели пронумерованы следующим образом: 0 — воскресенье, 1 — понедельник, 2 — вторник, ..., 6 — суббота. Дано целое число K, лежащее в...

Выведите номер дня недели для данного дня года - C++
Помогите,пожалуйста...Среда Free Pascal Дан порядковый номер дня года (отсчет идет с 1-го января). Требуется вывести номер дня недели...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
03.12.2013, 09:26
Ответ Создать тему
Опции темы

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