![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| vumnik |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 30.5.2006 Репутация: нет Всего: нет |
Здравствуйте. У меня есть интересная, на мой взгляд, задача. Нужно разработать функцию или класс позволяющие вывести произвольный набор дат (в текстовый файлик или на консоль)в строчку, примерно вот так.
январь февраль март июнь Пн 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 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 31 Всего: 61 |
Сейчас уходить нужно, когда вернусь ещё посмотрю. По поводу целочисленного деления, посмотри такой код (пояснения в коментариях):
-------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
| Ivan Kolesnikov |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 113 Регистрация: 9.3.2005 Где: г. Новокузнецк Репутация: 3 Всего: 6 |
Привет.
Есть такой модуль Date::Calc, так вот в нем есть функция Day_of_Week($year,$month,$day); И вообще почитай про этот модуль (набири в командной строке perldoc Date::Calc.
Да я раньше тоже искал Теперь о методе решения, я бы вначале сформировал структуру данных, а затем уже писал функцию как ее выводить, например вот такую
Нужно определиться что делать если середина месяца не попадает в интервал, а края (или часть) попадает. Данная структура, удобна при пропуске интервала, если нужно выводить в таком случае весь месяц, то я бы убрал массив интервалов, заменив просто на элементы месяца. Данную структуру не слишком сложно сформировать, а потом занялся бы отображением, на мой взгляд так проще Но в принципе можно пойти и твоим методом, тогда формируй отдельные матрицы и напиши процедуру их склеивания --------------------
|
||||||
|
|||||||
| nitr |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 37 Всего: 84 |
||||
|
||||
| vumnik |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 30.5.2006 Репутация: нет Всего: нет |
korob2001
Интересный вариант! Не нужно, даже, отдельную функцию создавать. Ivan Kolesnikov Спасибо, что натолкнул на мысль. О структуре данных я совсем не подумал. Думаю сделать так: {'год'}{'месяц'}[день_начала_интервала, д...а+1, д...а+2, ..., день_конца_интервала] просто заполнять, просто выводить и проблемм с перекрывающимися интервалами не будет. |
|||
|
||||
| Ivan Kolesnikov |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 113 Регистрация: 9.3.2005 Где: г. Новокузнецк Репутация: 3 Всего: 6 |
Привет!
vumnik, я просто привык разделять места обработки данных и отображения Предложенная тобой структура, мне не совсем понятна: что представляет собой массив, как понял я - это просто дни, которые нужно отобразить, тогда тебе придется для каждого дня вычислять его день недели (что по мне очень не оптимально) или писать дополнительный алгоритм проверки какой был предыдущий день. Мне кажется оперировать готовыми интервалами дней удобнее.
Что значит перекрывающиеся значения, какой должен быть ответ для таких интервалов: 5.01.2006-15.01.2006, 10.01.2006-20.01.2006, как мне кажется такие интервалы нужно объединять в один: 5.01.2006-20.01.2006 или ты хочешь как-нибудь по другому? --------------------
|
|||
|
||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |