Делается устройство, оно может выполнять какое-то действие начиная с заданной пользователем даты каждую неделю. Возникла задача по дате найти день недели.
Довольно простой алгоритм здесь
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
Не совпало.
Кто-то разбирался с этим или другими подобными алгоритмами?
Нахождение дня недели по дате
- Реклама
Re: Нахождение дня недели по дате
Всё работает.
Вывод
Что-то вы в матлабе намудрили. 
Код: Выделить всё
#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));
}
Код: Выделить всё
2
1Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
- eess9
- Вымогатель припоя
- Сообщения: 672
- Зарегистрирован: Ср фев 29, 2012 01:58:32
- Откуда: Харьков, Украина
Re: Нахождение дня недели по дате
Закинул в mega8 (куда же без нее) - работает. Действительно, что накрутил в matlab.
Спасибо
Спасибо
