|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
29.07.2009, 16:05 | #1 |
Пользователь
Регистрация: 14.07.2009
Сообщений: 51
|
Алгоритм по настройкам пользователя
Hello, world!
Тема достаточно общая и была бы возможность (может и есть но лень искать) создать новую категорию я бы так и сделал. Поэтому публикую тему в С/С++, т.к. тут должны быть самые толковые люди (шутка). Проблема такая: пускай нужно разработать алгоритм реализации решения какой-то задачи. Ход решения зависит от настроек пользователя. Например, где-то в недрах форума кто-то постил задачу лабораторки типа найти и заменить в текстовом файле подстроки и заменить их на новые причем:
Такая ситуация не раз уже появлялась в моей практике и хотелось бы разработать общий подход. Пускай v=(,,...) - вектор настроек пользователя. Тогда может быть составлять отдельный алгоритм для каждого различного набора в v. Можно как-то запрячь детерминированый автомат с состояниями v или что-то в этом духе? Кто-то уже думал над таким вопросом. Кто как подходит к решению проблемы? P.S. Не смотрел я, можно-ли создать новый раздел. Если нет, то предлагаю модераторам создать раздел типа "Вопросы алгоритмики" и перенести тему в новый раздел. Последний раз редактировалось SynEnergizer; 29.07.2009 в 16:12. |
29.07.2009, 16:12 | #2 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
I'm learning to live...
|
|
29.07.2009, 16:44 | #3 |
Пользователь
Регистрация: 14.07.2009
Сообщений: 51
|
|
29.07.2009, 16:51 | #4 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
Просто система будет вызывать обработчик передавая ему параметр - строка которая взята на выборку, а код в обработчике уже будет решать как ему эту строку оперировать. Например так действуют Callback в Win API. Или OnFilterRecord в DB компонентах.
I'm learning to live...
|
|
29.07.2009, 18:34 | #5 |
Заблокирован
Старожил
Регистрация: 20.07.2008
Сообщений: 4,032
|
Короче, Stilet предлагает создать интерфейс (API).
|
29.07.2009, 19:34 | #6 | |
Пользователь
Регистрация: 14.07.2009
Сообщений: 51
|
Цитата:
избегая множественных вложеных if блоков. |
|
29.07.2009, 20:28 | #7 | |
Новичок
Джуниор
Регистрация: 26.08.2008
Сообщений: 1,010
|
Цитата:
в таких случаях настройки дефолтные пишутся в файл или в бд, после установки юзверем своих конфигов, создается новый файл/запись в бд с которого в последствии читается. на время работы конфиги пишутся в переменную для быстроты доступа. описывается каждый алгоритм, когда юзверь выбирает действие, просматривается конфиг и выбирается нужный алгоритм. про регистр элементарно - все на стандартных функциях про целые слова не понял, может быть "целую фразу или по словам"? - если целую фразу - элементарно, если по словам, то тут прогонять поиск по каждому слову (подгонку до фразы описывать не буду - лень печатать) направление поиска можно сделать используя буферы с метками. поиск в низ элементарен обратный поиск - создавать зеркальное отражение буфера (реверсивную копию), реверсировать искомые слова и идти по реверсивному буферу в низ(вверх по обычному т.е.)
ромик0: Cколько получают здешние модераторы?
pu4koff: У модераторов сдельная оплата труда. Выдал предупреждение - плюс к премии. Выдал бан - лучший модератор месяца со всеми вытекающими. Последний раз редактировалось alexinspir; 29.07.2009 в 20:34. |
|
29.07.2009, 20:37 | #8 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
Разделить поиск на несколько независимых частей:
- вырезание следующего куска текста для поиска (что-то типа парсера) (например, для поиска вверх будет браться предыдущая строка, а для поиска вниз - следующая. В общем сюда можно воткнуть реализацию конкретного направления поиска) - подготовка для поиска (для регистрозависимого поиска ничего делать не надо, а вот для регистронезависимого - придется, вероятно, исходную строку привести к нижнему/верхнему регистру) - сам поиск (ну тут будет разный код для поиска слов целиком и "частичного" поиска) В общем поиск может выглядеть как-то так: Код:
ЗЫ. У Александреску в книге "Современное проектирование на С++" было что-то про решение подобных задач, но там автор предлагает решать как-то хитро на шаблонах, если мне не изменяет память |
29.07.2009, 23:41 | #9 |
Пользователь
Регистрация: 14.07.2009
Сообщений: 51
|
Это все конечно хорошо, но тема тут несколько иная.
Задача с поиском в строке был лишь пример от которого нужно было абстрагироваться. Попробую формализировать задачу. Пускай необходимо вычислить функцию F(P,X1,X2,...,Xn), где P-вектор входных параметров (возможно пустой), а Xi, i=1,..n - настройки юзера. (Ну в диалоге юзер натыкал флажков да переключателей, а ты теперь мучайся по какому пути делать че он(а) хочет). К примеру, для лабораторки по поискам в строке X могла бы быть (поиск назад, регистрозависимо,матчить слово только целиком). Путей написания такой F(.) - множетсво (мы же программированием занимаемся, а не математикой, ой сори - вы занимаетесь, а кому там я нужен ). Например так F(P,X1,X2,...,Xn) { ... if (X1 & !X2 &X3 & ... &!Xn) { ... } else if (!X & X2 & !X3 ... !Xn) { ... } else { ... } ... } Что-то мне такой код не очень нравится, а вам? Или же написать отдельную функцию на каждоый различный набор вектора X. Критерий я пока сформировать затрудняюсь, ну пожалй только читабельность, но это такое дело... Хотелось бы разработать такую технологию, которая была б унивирсальна. Сегодня юзер тыкает галочки, потому что хочет со строками поиграться, а завтра юзеру нужна программа, где он удаленно настраивает азимут и чувствительность тарелки приема ТВ каналов. А у меня бы уже лежал шаблон F(P,X), хорошо написаный без всяких там if (...) { if (...) if (...) { и т.д. |
30.07.2009, 00:31 | #10 |
Новичок
Джуниор
Регистрация: 26.08.2008
Сообщений: 1,010
|
разделяйте условия.
т.е.: if(вниз?true:false) { /*тут вызовы функций поиска, по типу findThis(искомое,где ищем, как ищем)*/ } else { /*тут подготавливаем текст для поиска вверх и далее тоже самое что и в случае true*/ } далее определяете функцию findThis(), в которой возможно будут использоваться другие функции, например, findIgnoreCase() в которой уже используется findByWord() - разделение кода, в данной ситуации наиболее оправдано и позволит быстро и без особых проблем модифицировать нужные части оного. вам бы лучше не разбираться в чужих идеях, а придумывать свои - как научитесь придумывать сами, то после этого лезьте в чужие/стандартные алгоритмы и на основе своей логики и имеющихся знаний все будет получаться
ромик0: Cколько получают здешние модераторы?
pu4koff: У модераторов сдельная оплата труда. Выдал предупреждение - плюс к премии. Выдал бан - лучший модератор месяца со всеми вытекающими. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
интерфейс пользователя в С++ | Nadezhda | Помощь студентам | 0 | 08.04.2009 17:58 |
Идентификация пользователя | Gorychev | PHP | 9 | 10.02.2009 08:56 |
Удаление пользователя | треч | О форуме и сайтах клуба | 4 | 26.05.2008 21:38 |
Имя пользователя | Albenous | Win Api | 3 | 20.01.2007 22:39 |