| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Программирование под Unix/Linux > вычисление дня недели |
| Автор: magadan87 9.11.2007, 14:26 | ||
| Вот такая интересная проблема появилась, нужно сделать что-то навроде календаря. Допустим нам известная сегодняшняя дата magadan@home:~$ date Чтв Ноя 8 16:53:10 NOVT 2007 от этой(ну или любой другой "сегодняшней") даты мы будем отталкиваться.. задача: зная сегодняшню дату определить название дня недели (понедельник, вторник, etc) только по введёным пользователем данным число --> 08 месяц --> 11 год --> 2689(или 1978) я так понимаю надо будет использовать http://www.one-gog.ru/learn/pschool/books/kr/b.html#b10? Есть так же практически таже самая программа на http://www.codenet.ru/progr/alg/Leap-Year.php. (пробовал p2c("Output from p2c 1.21alpha-07.Dec.93, the Pascal-to-C translator" (с) p2c), но чушь какая-то получается...) Есть и алгоритм(с википедии взят): a = (14 − месяц) / 12 y = год − a m = месяц + 12 * a − 2 ДеньНедели = (7000 + (день + y + y / 4 − y / 100 + y / 400 + (31 * m) / 12)) ОСТАТОК 7 Как бы теперь всё это "оформить" на сях... (ЯП: С , не С++ ) что-то ничего в голову не приходит, кроме как
|
| Автор: MAKCim 9.11.2007, 15:03 | ||
|
| Автор: magadan87 9.11.2007, 16:03 | ||||||
Эм... если честно мало что понятно -_-' сделал просто, без затей... (правда пришлось заменить "get_week_day" на просто "main", т.к. компилятор начинал жутко ругаться $ gcc time.c -o time time.c: В функции 'get_week_day' time.c:7: предупреждение: incompatible implicit declaration of built-in function 'memset' time.c:14:2: warning: no newline at end of file /usr/lib/gcc/i486-slackware-linux/4.1.2/../../../crt1.o: In function `_start': (.text+0x18): undefined reference to `main' collect2: выполнение ld завершилось с кодом возврата 1
можно слегка прокоментировать? |
| Автор: Fin 9.11.2007, 16:32 | ||||
Можно спросить, а где описана такая структура функции main? Добавлено @ 16:39 Это я творил когда то календарик на JavaScript
CalculateFirstDay Вычисляеет, на какой день недели апмзодится первый день месяца. Вычисления происходят относительно Григорианского стиля. |
| Автор: magadan87 9.11.2007, 17:12 |
Хм. Не знаю. ) Работает же. ^^ По крайней мере компилируется точно. ) За календарик на JavaScript спасибо, поковыряю. ^^ P.S. извиняюсь если что, просто C изучаю методом тыка, параллельно читая хрестоматию по программированию на Си в Unix Андрея Богатырёва. ) |
| Автор: Fin 9.11.2007, 17:48 | ||
Ну вообше то тебя компилятор поздравил
Так что, как оно у тебя компилирется, я не знаю. |
| Автор: MAKCim 9.11.2007, 21:02 | ||
magadan87,
|
| Автор: magadan87 10.11.2007, 18:27 | ||||
спасибо, кой с чем уже разобрался и появился ещё один вопрос... magadan@home:day$ gcc day.c -o day magadan@home:day$ ./day day = 5 (это при get_week_day(2007, 11, 10)) вроде бы должно было быть day = 6 (суббота), т.к. tm_wday день недели 0..6 (0 - Воскресенье) а если дату изменяю "get_week_day(2980, 11, 10)" то выдаёт "day = 3", что то же неверно (если верить col'у) можно конечно сделать tm.tm_mday = day + 1; но это неправильно же будет? ) |
| Автор: MAKCim 10.11.2007, 19:11 | ||
magadan87,
0 - понедельник 6 - воскресенье аналогично 0 - январь 11 - декабрь поэтому month - 1 |
| Автор: magadan87 10.11.2007, 20:05 | ||
Спасибо, вопросов больше не имею. ) |