Здравствуйте, гость ( Вход | Регистрация )
AD | Дата 22.7.2009, 16:51 |
меня коллега ткнул носом на следующий способ реализации конечного автомата когда мой swich/case вырос до громадных размеров 1. создаешь енум, где элементы состояния автомата. 2. создаешь где быто нибыло (в классе в основном) статический массив указателей на функции обработчики. 3. меняешь состояние тут же проверяешь если есть обработчик в массиве вызываешь его. и быстрее в общем случае чем switch/case и меньше места занимает и модульность и гибкость. можно обработчики менять и обнулять если надо. Может быть лучше с помощью паттерна Состояние/State? Не реализовывал, но, думаю, стоит попробовать. |
|
kwisp | Дата 22.7.2009, 16:19 |
меня коллега ткнул носом на следующий способ реализации конечного автомата когда мой swich/case вырос до громадных размеров 1. создаешь енум, где элементы состояния автомата. 2. создаешь где быто нибыло (в классе в основном) статический массив указателей на функции обработчики. 3. меняешь состояние тут же проверяешь если есть обработчик в массиве вызываешь его. и быстрее в общем случае чем switch/case и меньше места занимает и модульность и гибкость. можно обработчики менять и обнулять если надо. коллега сказал что подсмотрел в ядре линукса основную идею. если кому интересно выложу пример. П.С. кажется где то я уже это писал ![]() |
|
sage | Дата 13.11.2008, 12:06 |
не читая тонны документации Документации вобщем-то не тонны ![]() Есть книга В.Д. Паронджанова "Как улучшить работу ума? Алгоритмы без программистов -- это очень просто! М.: Дело, 2001. --360 стр" |
|
AD | Дата 13.11.2008, 11:08 |
Да, точно "силуэт", Вы правы ![]() Насчёт "автоматности" "силуэта" шли жаркие дебаты. Но, на мой взгляд, тежело не увидеть очевидного... поскольку многие убедились на практике (в том числе и я), что "автоматные" задачи с помощью "силуэта" выражаются и успешно решаются. Что ещё нужно? ![]() Вопрос не в том! просто где-то из программы, в которой есть этот элемент, не читая тонны документации, можно узнать что с помощью СИЛУЭТА можно описать конечный автомат? Как это сделать прочитав КРАТКУЮ справку, предположим где-то в инете, можно "чайнику" создать этот автомат? Или же перед этим требуется хорошо разобраться в программе? ![]() |
|
sage | Дата 13.11.2008, 10:57 |
Можно вопрос? А каким образом пользователь, особенно такой "дубовый", как я, Да, точно "силуэт", Вы правы поймет, что слово "силует"("силуэт" возможно ?????) подразумевает конечный автомат? ![]() Насчёт "автоматности" "силуэта" шли жаркие дебаты. Но, на мой взгляд, тежело не увидеть очевидного... поскольку многие убедились на практике (в том числе и я), что "автоматные" задачи с помощью "силуэта" выражаются и успешно решаются. Что ещё нужно? ![]() |
|
AD | Дата 13.11.2008, 9:30 |
Конечный автомат в полной мере реализуется схемой типа "силует" в ДРАКОНе ![]() Можно вопрос? А каким образом пользователь, особенно такой "дубовый", как я, поймет, что слово "силует"("силуэт" возможно ?????) подразумевает конечный автомат? ![]() |
|
sage | Дата 12.11.2008, 18:07 |
А я предложение дописал но язык вобщем-то может быть любой. ![]() ДРАКОН задаёт лишь управляющие конструкции, а наполнение блоков может быть осуществлено на любом языке ![]() Таким образом, если нам необходима трансляция в С++, убираем из С++ все управляющие конструкции if, switch/case, while, и т.д. Их заменит графика! ![]() Если ещё и унифицировать синтаксис для наполнения блоков можно прийти к универсальному графическому представлению алгоритмов. Похожая идея была у авторов сайта alglib, но там использованны морально устаревшие блок-схемы. И что-бы не сложилось впечатление будто-бы это уход от темы ветки... Конечный автомат в полной мере реализуется схемой типа "силует" в ДРАКОНе ![]() |
|
Litkevich Yuriy | Дата 12.11.2008, 17:29 |
Тем более, что в этой теме обсуждались проблемы реализации что-то я не дописал предложение до конца ![]() "... на С++" |
|
sage | Дата 12.11.2008, 17:00 |
присоединяйся к Free DevStudio++. Нееет... уж лучше Вы к нам ![]() ![]() |
|
ViGOur | Дата 12.11.2008, 16:56 |
Новый редактор есть в планах писать присоединяйся к Free DevStudio++. ![]() ![]() |
|
Просмотр темы полностью (откроется в новом окне) | |
![]() |
|
Текстовая версия | Сейчас: 12.7.2025, 3:25 |