Отправляет email-рассылки с помощью сервиса Sendsay

вечный календарь

тут надо под линух написать на сях...

нужна формула вечного календаря... кто не понял шо це таке - вводим дату, программа
высчитывает день недели... нужна математическая формула... хотя если исходного
текста кусок, где вычисления идут - не откажусь... =)

заранее спасибо...

-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 20360; Возраст листа: 736; Участников: 1404
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/410142

Ответить   Sat, 30 Jul 2005 15:26:59 +0400 (#410142)

 

Ответы:

В сообщении от 1122726419 секунд после начала Эпохи Алексей Букреев
написал(а):

Такая программа уже есть в любом дистрибутиве Linux, называется date.

Например, хочу узнать в какой день недели у меня день рождения:

$ date -d 2006-01-31 +%A
Вторник

Забыл какой сегодня день:

$ date +%A
Суббота

Забыл какой вчера был день:

$ date -d '-1 day' +%A
Пятница

Ответить   Konstantin Korikov Sat, 30 Jul 2005 15:05:40 +0300 (#410156)

 

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

-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 20364; Возраст листа: 736; Участников: 1404
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/410162

Ответить   Sat, 30 Jul 2005 16:18:13 +0400 (#410162)

 

Алексей Букреев пишет:

сей

А исходники date посмотреть СЛАБО! ДЫК, ты ж, вроде программист. :)))

Ответить   Oleg Ponomarev Sat, 30 Jul 2005 15:53:11 +0300 (#410171)

 

В сообщении от 1122727991 секунд после начала Эпохи Oleg Ponomarev
написал(а):

Да и исходники смотреть не обязательно, достаточно заглянуть в страницы
руководства.

Ответить   Konstantin Korikov Sat, 30 Jul 2005 18:31:57 +0300 (#410244)

 

В сообщении от 1122729493 секунд после начала Эпохи Алексей Букреев
написал(а):

Никаких формул, просто использование библиотечных функций.

Ответить   Konstantin Korikov Sat, 30 Jul 2005 15:43:30 +0300 (#410182)

 

Суббота 30 Июль 2005 16:05, Konstantin Korikov пишет:

Кстати, а разве он вечный? Чем он ограничен?

$ date -d 2037-12-31 +%A
Четверг

$ date -d 2038-02-01 +%A
date: дата `2038-02-01' задана неправильно

$ date -d 1901-02-01 +%A
date: дата `1901-02-01' задана неправильно

$ date -d 1902-02-01 +%A
Суббота

Ответить   Xinus Sat, 30 Jul 2005 18:45:47 +0400 (#410228)

 

В сообщении от 1122738347 секунд после начала Эпохи Xinus написал(а):

Наверно кривостью системы :)

$ date -d 2038-02-01 +%A
Вторник

$ date -d 1901-02-01 +%A
Пятница

У меня FC4.

Ответить   Konstantin Korikov Sat, 30 Jul 2005 18:30:14 +0300 (#410243)

 

В сообщении от 1122737414 секунд после начала Эпохи Konstantin Korikov
написал(а):

Если точнее количеством бит отводимых под time_t. То что у меня
диапазон допустимых дат немного иной, видимо следствие
исправления/добавления каких-то ошибок в glibc. Пока time_t будет
иметь 32 бита, то границы будут такие:

[ Птн Дек 13 20:45:52 UTC 1901 .. Вто Янв 19 03:14:07 UTC 2038 ]

Ответить   Konstantin Korikov Sat, 30 Jul 2005 19:32:26 +0300 (#410275)

 

В сообщении от 30 Июль 2005 06:30 Konstantin Korikov написал(a):

$ date -d 2038-02-01 +%A
Понедельник
!!!! ??????
MDK10.1
--
ginger

-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 20386; Возраст листа: 738; Участников: 1402
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/410739

Ответить   ginger Sun, 31 Jul 2005 15:23:36 -0900 (#410739)

 

В сообщении от 1122812616 секунд после начала Эпохи ginger написал(а):

То что позже 19 января 2038 не определено для 32-битных машин (грубо
говоря). "Не определено" означает что результат может быть какой угодно.

Ответить   Konstantin Korikov Mon, 1 Aug 2005 02:30:56 +0300 (#410793)

 

ginger wrote:

$ date -d 2038-02-01 +%A
Вторник

MDK 10.2 (LE2005)
:))))

-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 20416; Возраст листа: 738; Участников: 1399
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/410983

Ответить   daks Mon, 01 Aug 2005 10:15:37 +0200 (#410983)

 

On Sun, 31 Jul 2005 15:23:36 -0900
ginger <ging***@a*****.ru> wrote:

vladimir@amd ~ $ date -d 10003-02-01 +%A
Суббота

Большие числа проверять не стал.
Gentoo 2005.0, amd64 (думаю все дело в x86_64)

Ответить   Mon, 1 Aug 2005 22:01:15 +0400 (#411363)

 

В сообщении от 1122738347 секунд после начала Эпохи Xinus написал(а):

Лучшее название, мне кажется, это кривосистемный календарь. :)

$ date -d 1801-02-01 +%A
date: дата `1801-02-01' задана неправильно
$ date -d 2101-02-01 +%A
date: дата `2101-02-01' задана неправильно

Очень хочется надеяться что не криворукий. :)

Ответить   Konstantin Korikov Sat, 30 Jul 2005 18:46:10 +0300 (#410251)

 

В сообщении от 1122726419 секунд после начала Эпохи Алексей Букреев
написал(а):

Если интересно как решить задачу на C, смотрите сtime(3).

Ответить   Konstantin Korikov Sat, 30 Jul 2005 15:28:55 +0300 (#410166)

 

On Sat, 30 Jul 2005 15:26:59 +0400
Алексей Букреев <lepis_20***@m*****.ru> wrote:

Пойдите в любую библиотеку и наберите книг по Бейсику или программированию
конца 80х - начала 90х для среднего и старшего школьного возраста ;) . В тот
период
этот алгоритм был настолько же популярен, как и решение квадратного уравнения
;),
уж не знаю, почему. У меня, к сожалению, завалялись книги только для младшего
школьного :) и студентов ВУЗов - ни там, ни там его нет.

Ответить   Matvey Sat, 30 Jul 2005 22:08:36 +0300 (#410331)

 

программа

Честно говоря эта тема меня уже задолбала
Уже 5 минут подумать людям лениво!!!!
Написал за ~10 минут (7 минут мучительно вспоминал как пишется месяц
(month, mounth, moth) пришлось словарь искать)

short days[]= // количество дней от начала года (набегающая сумма)
{
0, // Это в январе
0+31, // Это в феврале
0+31+28, // Это в марте
0+31+28+31, // Это в апреле
0+31+28+31+30, // Это в мае
0+31+28+31+30+31, // Это в июне
0+31+28+31+30+31+30, // Это в июле
0+31+28+31+30+31+30+31, // Это в августе
0+31+28+31+30+31+30+31+31, // Это в сентябре
0+31+28+31+30+31+30+31+31+30, // Это в октябре
0+31+28+31+30+31+30+31+31+30+31, // Это в ноябре
0+31+28+31+30+31+30+31+31+30+31+30 // Это в декабре
};

char *weekdays[]=
{
"Пятница",
"Суббота",
"Воскресение",
"Понедельник",
"Вторник",
"Среда",
"Четверг",
};

//1901-02-01
short year=1901;
short month=02;
short day=01;

// Вычисление количества дней за прошлые годы
unsigned long ndays=year*365+year/4;
// Добавление количества дней от начала года
ndays+=days[month-1]+day;
// А это если текущий год високосный
if(!(year%4))
if(month>2) ndays++;

cout<<day<<"."<<month<<"."<<year<<"->"<<weekdays[ndays%7]<<endl;

Ответить   Sun, 31 Jul 2005 14:45:26 +0400 (#410735)

 

Когда на часах было Sun, 31 Jul 2005 14:45:26 +0400
некто "Dmitry A. Kharitonov" <dakhariton***@r*****.ru> написал(а):

вводим дату,

если исходного


И написал не правильно. Например 1900 и 2100 года не високосные, ну а
дальше понятно почему не правильно. Хотя на 20-й и 21-й век, возможно и
правильно посчитает, просто из-за принципиально не верного подхода даже
проверять не хочется.

-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 20393; Возраст листа: 738; Участников: 1399
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/410809

Ответить   alex Mon, 1 Aug 2005 08:47:54 +0700 (#410809)

 

1.Почему это не високосные - просвети.
2.Если чего не нравиться внеси исправления самостоятельно. Или уже
лень 1 строчку добавить?

Ответить   Mon, 1 Aug 2005 08:52:45 +0400 (#410855)

 

Невисокосные, это точно, сейчас подробностей не помню, но там смысл в том, что
в високосном году не столько секунд, сколько в 366 днях, а меньше, поэтому приходится
делать невысокосные высокосные годы.

А вообще, совсем ли вечный календарь нужен? Если совсем, то это жёстко(хотя я
встречал где-то в околошкольном возрасте), но может быть задача позволяет ограничиться
годом этак 1500 - 2500, тогда строк около 10 в приведённый текст и должно работать.

С уважением,
Андрей.

-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 20402; Возраст листа: 738; Участников: 1399
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/410869

Ответить   Андрей Клаус Mon, 01 Aug 2005 09:26:00 +0400 (#410869)

 

Андрей Клаус wrote:

я

Из практических соображений календарь должен состоять из цельных дней.
Реформируя традиционный римский календарь, Юлий Цезарь установил год,
состоящий из 365 дней, с добавочным "високосным" днем (теперь 29
февраля) на каждый четвертый год для того, чтобы устранить разницу между
тропическим и обычным граждански годом. Таким образом, четыре юлианских
года равны 1461 астрономическим суткам. Поэтому юлианский календарь
уходит почти на 44 минуты вперед за каждые четыре года обращения Земли
вокруг Солнца. К концу XVI в. н. э. накопленная разница между юлианским
календарем и тропическим годом составляла около 10 дней.

Таким образом, дата пасхи смещалась по отношению к дню равноденствия.
Папа Григорий XIII в 1582 г. решил переместить дату пасхи назад, к ее
дате во время первого вселенского собора в Никее в 325 г., когда
равноденствие состоялось 21 марта (в календаре Цезаря равноденствие
приходилось на 25 марта), так что 5 октября стало 15 октября, и
предложил каждые 400 лет опускать три добавочных дня, так чтобы годы
1600 и 2000 считались високосными, а годы 1700, 1800 и 1900 -
невисокосными. Исключая это исправление, наш григорианский календарь
является все тем же римским календарем, реформированным Цезарем. Вот
почему для датирования событий, происшедших до 1582 г., историки
пользуются юлианским календарем. Год состоит из 365 дней и начинается 1
января; добавочный день (29 февраля) прибавляется каждый четвертый год
(1, 5, 9 и т. д. до н. э.; 4, 8, 12 и т. д. н. э.).
Фрагмент цитирован: Э. Бикерман, "Хронология древнего мира"; М. 1975.

-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 20471; Возраст листа: 739; Участников: 1398
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/411631

Ответить   Tue, 02 Aug 2005 10:48:50 +0400 (#411631)

 

Привет Андрей!

Monday, August 1, 2005, 10:26:00 AM, ты писал(а):

что

приходится

я

ограничиться

работать.

Формула Зелера:
Day - День месяца
Month - Номер месяца
Year - Год столетия
C - Номер столетия
DDay - День недели

Ответить   Mon, 8 Aug 2005 07:28:22 +0500 (#427817)

 

Hello Alex,

Monday, August 8, 2005, 6:28:22 AM, you wrote:

Где Формула-то?

Ответить   Thu, 15 Sep 2005 08:09:19 +0400 (#437561)

 

Когда на часах было Mon, 1 Aug 2005 08:52:45 +0400
некто "Dmitry A. Kharitonov" <dakhariton***@r*****.ru> написал(а):

а

возможно и

даже

Потому что в григорианском календаре год кратный 100 - не високосный, а
кратный 400 - високосный (именно поэтому 2000-й был високосный)

Ничего личного, просто сегодня день с утра как-то не задался. Хотя это
уже оффтопик.




-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 20405; Возраст листа: 738; Участников: 1399
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/410886

Ответить   alex Mon, 1 Aug 2005 13:09:35 +0700 (#410886)

 


Спасибо!! буду помнить, буду знать. Подсказать какую строчку добавить?

Ответить   Mon, 1 Aug 2005 14:47:43 +0400 (#411077)