![]() |
|
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]()
|
|
| ALeXandrK |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 342 Регистрация: 31.1.2007 Где: Санкт-Петербург Репутация: 1 Всего: 6 |
Возможно ли оптимизировать данный код:
Таких проверок получается 7 (для каждого дня недели) и мне кажется, что можно это дело упростить, но как? Если есть интересные материалы/ссылки по работе со множествами, пишите. Это сообщение отредактировал(а) ALeXandrK - 17.8.2007, 16:42 -------------------- Богат не/ни тот, у кого много, а тот, кому хватает |
|||
|
||||
| sentry |
|
||||
|
Code Monkey ![]() Профиль Группа: Участник Сообщений: 133 Регистрация: 29.1.2007 Где: Москва Репутация: нет Всего: 10 |
А это разве перечислимый (я так называю) тип? Это вроде же множество. А перечислимый это
А упростить можно вроде так:
|
||||
|
|||||
| ALeXandrK |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 342 Регистрация: 31.1.2007 Где: Санкт-Петербург Репутация: 1 Всего: 6 |
Да... ошибся - это и вправду множества. Жаль я тему не могу переименовать
sentry: так я уже упростил, но все равно спасибо. Я имел ввиду, что может можно написать что-то вроде:
Но так не выходит... а по мысли, Ord переводит значение Cheked (boolean) в 1 или 0, и тогда при умножении мы добавляем значение в множество или нет соответственно. Это сообщение отредактировал(а) ALeXandrK - 17.8.2007, 16:50 -------------------- Богат не/ни тот, у кого много, а тот, кому хватает |
|||
|
||||
| Rennigth |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 21.6.2004 Где: Moscow Репутация: 15 Всего: 76 |
В твоем случае без if не обойтить. Другие варианты будут еще белее громоздкие. Но есть симпотичные функции Include и Exclude, которые повысят как утверждает борланд эффектифность кода:
-------------------- (* Honesta mors turpi vita potior *) |
||||
|
|||||
| ALeXandrK |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 342 Регистрация: 31.1.2007 Где: Санкт-Петербург Репутация: 1 Всего: 6 |
Rennigth: про Include и Exclude - хорошее замечание. Тоже читал про них в Help, но что-то даже и не задумался применять
Руки то уже прикипели к + -------------------- Богат не/ни тот, у кого много, а тот, кому хватает |
|||
|
||||
| sentry |
|
||||
|
Code Monkey ![]() Профиль Группа: Участник Сообщений: 133 Регистрация: 29.1.2007 Где: Москва Репутация: нет Всего: 10 |
Ord то переводит, только операции умножения мн-ва на число нет. А если так:
Извиняюсь, поправил, но все-таки if больше нравится Потом только проверять нужное в in, а на Nothing не обращать внимание. Это сообщение отредактировал(а) sentry - 17.8.2007, 17:27 |
||||
|
|||||
| ALeXandrK |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 342 Регистрация: 31.1.2007 Где: Санкт-Петербург Репутация: 1 Всего: 6 |
sentry: красиво, но не работает
-------------------- Богат не/ни тот, у кого много, а тот, кому хватает |
|||
|
||||
| sentry |
|
|||
|
Code Monkey ![]() Профиль Группа: Участник Сообщений: 133 Регистрация: 29.1.2007 Где: Москва Репутация: нет Всего: 10 |
||||
|
||||
| ALeXandrK |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 342 Регистрация: 31.1.2007 Где: Санкт-Петербург Репутация: 1 Всего: 6 |
sentry: но это уже не оптимизация, а нагромажедение получется -------------------- Богат не/ни тот, у кого много, а тот, кому хватает |
|||
|
||||
| EvilsInterrupt |
|
||||
|
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: нет Всего: 9 |
1)
В Пачеко книга по дельфи 5 том 1 на стр. 93, сказано, что юзать надо Include\Exclude реализуеются 1 маш. командой, когда +\- 13 + 6*n (6 кол-во битов во множестве). Вывод: надо проверить код генерируемый компиллером 2)
и на такой код:
я бы не стал закладываться, т.к. выигрышь в скорости небольшой, а при измении кодогенерации разработчиком дельфи могут появится - трудно уловимые баги. Это сообщение отредактировал(а) EvilsInterrupt - 17.8.2007, 18:31 |
||||
|
|||||
| sentry |
|
||||
|
Code Monkey ![]() Профиль Группа: Участник Сообщений: 133 Регистрация: 29.1.2007 Где: Москва Репутация: нет Всего: 10 |
Посмотрел. Тут записываем wdNo в eax с занулением старших битов. В Ebx ранее было загружено пустое множество. Далее, логично делаем "или" ( al - 8 бит (256) ). Поскольку результат сейчас в eax, заносим его в ebx.
И вот:
С if побыстрее будет... |
||||
|
|||||
| EvilsInterrupt |
|
|||
|
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: нет Всего: 9 |
Я пока не вижу конкурентов моему варианту, но он получился благодаря книге Пачеко, так что это не мой! ;)
Можно ли еще вот в чем загадка для ума? ))) и знать ответ хочется, будем головоломствовать далее |
|||
|
||||
| ALeXandrK |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 342 Регистрация: 31.1.2007 Где: Санкт-Петербург Репутация: 1 Всего: 6 |
Раз к простой мат. операции свести не удается, то думаю, что вариант
Самый оптимальный. Тему считаю решенной, но новым вариантам будем рады -------------------- Богат не/ни тот, у кого много, а тот, кому хватает |
||||
|
|||||
| MetalFan |
|
||||||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 22 Всего: 128 |
можно мой вариант) может и работать будет помедленнее, но тут скорость вроде бы и не нужна
1. объявляем типы:
2. проставить в Tag TCheckBox'ам Ord значение TWeekDay при создании формы или в дизайне.
3. затем можно сделать либо так: 3.1 Всем чекам назначить один OnClick и...
3.2 либо в цикле такимже образом "собрать" данные... разве что для удобства можно в OnCreate формы засунуть чеки в массив -------------------- There are always someone smarter than you... |
||||||
|
|||||||
| EvilsInterrupt |
|
|||
|
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: нет Всего: 9 |
MetalFan, Не есть гуд! Много не нужных действий, а ведь программер существо ленивое! Да и если говороить про дизайн тайм, то сво-во компонентов tag, в исходник u_main.pas или др. не положится, а это опять dfm или др. файлы таскать за собой, Зачем?! Неее я протев ;)))
Это сообщение отредактировал(а) EvilsInterrupt - 19.8.2007, 10:54 |
|||
|
||||
![]()
|
| Правила форума "Delphi: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |