| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: Общие вопросы > Календарь произвольных дат |
| Автор: vumnik 5.6.2006, 13:20 | ||||||
| Здравствуйте. У меня есть интересная, на мой взгляд, задача. Нужно разработать функцию или класс позволяющие вывести произвольный набор дат (в текстовый файлик или на консоль)в строчку, примерно вот так. январь февраль март июнь Пн 9 16 23 30 6 13 20 27 6 13 5 12 Вт 10 17 24 31 7 14 21 28 7 14 6 13 Ср 11 18 25 1 8 15 22 1 8 7 14 Чт 12 19 26 2 9 16 23 2 9 8 15 Пт 13 20 27 3 10 17 24 3 10 9 16 Сб 7 14 21 28 4 11 18 25 4 11 10 17 Вс 8 15 22 29 5 12 19 26 5 12 11 Интервал дат задаётся в формате: дд:мм:гггг. Для каждого интервала его начало и конец. Изучаю Перл недавно, на уже успел полюбить, поэтому реализую алгоритм на нём. Возникли проблеммы с определением дня недели по дате, встроенной функции не нашёл (если не прав, поправьте), зато набрёл на этом форуме на реализацию такой на паскале. Переделал под себя, работает.
Не нашёл целочисленного деления (div в паскале). Если кто встречал, ткните носом, ибо слеп. Вот мой вариант.
Осилил функцию, корректно выводящую календарь на один месяц.
Оставшиеся нерешёнными вопросы: 1. Как анализировать и выводить больше одного интервала дат. 2. Хранить ли сформированный календарь всех интервалов в общей матрице, а затем выводить его, или как-то можно выводить по отдельности в строку (как в образце календаря). Если кому интересно, подскажите, сам я запутался. |
| Автор: korob2001 5.6.2006, 15:37 | ||
Сейчас уходить нужно, когда вернусь ещё посмотрю. По поводу целочисленного деления, посмотри такой код (пояснения в коментариях):
|
| Автор: Ivan Kolesnikov 5.6.2006, 15:47 | ||||||
Привет.
Есть такой модуль Date::Calc, так вот в нем есть функция Day_of_Week($year,$month,$day); И вообще почитай про этот модуль (набири в командной строке perldoc Date::Calc.
Да я раньше тоже искал Теперь о методе решения, я бы вначале сформировал структуру данных, а затем уже писал функцию как ее выводить, например вот такую
Нужно определиться что делать если середина месяца не попадает в интервал, а края (или часть) попадает. Данная структура, удобна при пропуске интервала, если нужно выводить в таком случае весь месяц, то я бы убрал массив интервалов, заменив просто на элементы месяца. Данную структуру не слишком сложно сформировать, а потом занялся бы отображением, на мой взгляд так проще Но в принципе можно пойти и твоим методом, тогда формируй отдельные матрицы и напиши процедуру их склеивания |
| Автор: nitr 5.6.2006, 17:32 |
| всегда всем в помощь http://search.cpan.org/search?query=calendar&mode=all ;) |
| Автор: vumnik 5.6.2006, 19:51 |
| korob2001 Интересный вариант! Не нужно, даже, отдельную функцию создавать. Ivan Kolesnikov Спасибо, что натолкнул на мысль. О структуре данных я совсем не подумал. Думаю сделать так: {'год'}{'месяц'}[день_начала_интервала, д...а+1, д...а+2, ..., день_конца_интервала] просто заполнять, просто выводить и проблемм с перекрывающимися интервалами не будет. |