Как правильно преобразовать формулу для определения дня недели в C ++? - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть задание, в котором мне нужно выяснить, какой день недели была / есть дата. Формула Википедии выглядит следующим образом:

enter image description here

, где

d = day (1-31)  
m = month (starting with March = 1 up to February=12)  
y = last 2 digits of a year  
c = first 2 digits of a year  

(y и c должно быть уменьшено на 1, если месяц январь или февраль)

Моя функция работает следующим образом:

int wochentagWiki(int inttag, int intmonat, int intjahr) {
int d = inttag;

int m = 0;

switch (intmonat) {
case 1:
    m = 11;
    break;
case 2:
    m = 12;
    break;
case 3:
    m = 1;
    break;
case 4:
    m = 2;
    break;
case 5:
    m = 3;
    break;
case 6:
    m = 4;
    break;
case 7:
    m = 5;
    break;
case 8:
    m = 6;
    break;
case 9:
    m = 7;
    break;
case 10:
    m = 8;
    break;
case 11:
    m = 9;
    break;
case 12:
    m = 10;
    break;
}

int y = intjahr % 100;
if (intmonat == 1 || intmonat == 2) {
    y--;
}

int c = intjahr / 100;
if (intmonat == 1 || intmonat == 2) {
    c--;
}

int w = (d + (2.6 * m - 0.2) + y + (y / 4) + (c / 4) - (__int64)2 * c) % 7;

return w;
}

Моя проблема в том, что w всегда возвращает неправильное значение, и я думаю, что это потому, что Я перевел формулу неправильно. Как правильно написать это?

1 Ответ

1 голос
/ 28 апреля 2020

Мне кажется, что вы ошиблись при копировании формулы:

(y и c должны быть уменьшены на 1, если месяц январь или февраль)

Но Википедия говорит:

  • Y - год минус 1 для января или февраля и год для любого другого месяца
  • y - это последние 2 цифры Y
  • c - это первые 2 цифры Y
...