Нахождение дня недели по дате

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Аватара пользователя
eess9
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Ср фев 29, 2012 01:58:32
Откуда: Харьков, Украина

Нахождение дня недели по дате

Сообщение eess9 »

Делается устройство, оно может выполнять какое-то действие начиная с заданной пользователем даты каждую неделю. Возникла задача по дате найти день недели.
Довольно простой алгоритм здесь
http://ru.wikibooks.org/wiki/%D0%90%D0% ... 0%BB%D0%B8
Решил проверить, от греха подальше, алгоритм в matlab и ... не всегда работает:
- для сегодняшней даты:

m=8;d=6;y=2013;
a=fix((14-m)/12)
a = 0
b=fix(y-a)
b = 2013
c=fix(m+12*a-2)
c = 6
rem(7000+(d+b+b/4-b/100+b/400+(31*c)/12),7)
ans = 2.6525

Двойка - это вторник. Совпало. Но возьмем, к примеру, 1-е июля (был понедельник, т.е. 1)

m=7;d=1;y=2013;
a=fix((14-m)/12)
a = 0
b=fix(y-a)
b = 2013
c=fix(m+12*a-2)
c = 5
>> rem(7000+(d+b+b/4-b/100+b/400+(31*c)/12),7)
ans = 2.0692

Не совпало.
Кто-то разбирался с этим или другими подобными алгоритмами?
Реклама
Аватара пользователя
Kavka
Мудрый кот
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Re: Нахождение дня недели по дате

Сообщение Kavka »

Всё работает.

Код: Выделить всё

#include <stdio.h>

int dayofweek(int day,int month,int year) {
int a,y,m;
    a = (14 - month) / 12;
    y = year - a;
    m = month + 12 * a - 2;
    return ((7000 + (day + y + y / 4 - y / 100 + y / 400 + (31 * m) / 12))%7 );
}

int main() {
    printf("%d\n",dayofweek(6,8,2013));
    printf("%d\n",dayofweek(1,7,2013));
}
Вывод Что-то вы в матлабе намудрили. :)
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Реклама
Аватара пользователя
eess9
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Ср фев 29, 2012 01:58:32
Откуда: Харьков, Украина

Re: Нахождение дня недели по дате

Сообщение eess9 »

Закинул в mega8 (куда же без нее) - работает. Действительно, что накрутил в matlab.
Спасибо :beer:
Ответить

Вернуться в «Разные вопросы по МК»