DRAKON.SU

Текущее время: Вторник, 23 Январь, 2018 08:52

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 100 ]  На страницу 1, 2, 3, 4, 5  След.
Автор Сообщение
 Заголовок сообщения: Преобразование графов
СообщениеДобавлено: Четверг, 20 Январь, 2011 16:24 
Аватара пользователя

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 907
Откуда: Россия, Чебоксары
Вот предлагаю схему алгоритма для обсуждения. Чтобы посмотреть с точки зрения теории и грамотного проектирования.
Есть алогритм (слева), в котором ветка развилки q3 должна идти на конец (после действия s5).
Естественно, редактор не позволяет сделать такой финт. Но можно преобразовать блок-схему, тогда это станет возможным (справа):

Вложение:
q2.PNG
q2.PNG [ 12.46 КБ | Просмотров: 7032 ]

1) При таком преобразовании нарушается правило "главного шампура". Как быть?

2) Почему топологически эквивалентные графы вообще рассматриваются по-разному (вариант с пересечением недопустим; а без пересечений допустим, но не всегда достижим - ведь отображение на плоскость есть всего лишь одно из возможных отображений "устремлённого графа", не более того)?

3) Действительно ли что-то не так в проекте? Например, после q1 мы можем уйти сразу на s5 независимо от условия q3, которое может запрещать выполнение s5. С другой стороны, ошибки может не быть, если мы заранее знаем, что условия q1 - q3 взаимозависимы (хотя из алгоритма этого не может быть видно).

4) Если проект таки построен неправильно (см. п.3), то как преобразовать (с достаточной эффективностью)? Учитывая то, что условие q1 может быть, к примеру, "один раз из тысячи". И что действия s1,s2 тоже должны быть выполнены обязательно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Преобразование графов
СообщениеДобавлено: Четверг, 20 Январь, 2011 16:53 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 631
Откуда: Россия, Орёл
Алексей, смотрю внимательно на Ваши схемы и вот что в итоге думаю...

Но сначала поясню, что вторую схему буду защищать не из-за следования принципу пересечений, смотрел я именно непредвзято по этому пункту. У меня были и даже не до конца рассеялись сомнения про полное ограничение на пересечения (требование планарности) устремлённых графов. С точки зрения структуры это требование не очень важно, Владимир Даниелович ставит это требование исключительно с эргономической точки зрения. Мы с ним это обсуждали ещё год назад, и я это требование принял.

А теперь по примеру.
Не зная смысла действий, хочется, тем не менее, его хоть как-то восстановить по "слепышу". Так вот, по второй схеме я как раз довольно легко вижу "тень смысла".

По вертикали сразу видны две части: 1) принятие решения - классификация на 4 выхода - ситуации. Действия s1 - s2, скорее всего, подготовительные вычисления при условиях.

Далее у блока принятия решений 4 выхода, для которых следует выполнить, соответственно, такие действия: (s5), (s4, s5), (s3, s4, s5), (пусто).

В данном случае удаётся свести эти варианты, а мог бы быть случай, когда они шли бы уже независимо, не соединяясь.

В общем, всё нормально со второй схемой. И по правилу "правее - хуже" достаточно упорядочено: 1, 2, 3 действия..

Так что, возможно, запрет на пересечения и в Вашем случае помог прояснить структуру.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Преобразование графов
СообщениеДобавлено: Четверг, 20 Январь, 2011 17:46 

Зарегистрирован: Пятница, 20 Июль, 2007 17:26
Сообщения: 105
Откуда: Псков
А, если, на шампур нанизать q1 s1 q2 s2 q3 конец
тогда боковые ветви
от q3 на s3 s4 s5
от q2 на s4
от q1 на s5

и q3 можно переформулировать на инверсный, чтобы все "нет" торчали вправо.

Смотря на получившуюся схему придумалось её "наполнение смыслом" :)
s1 s2 - целевые действия
s3 s4 - откаты при неудачах
s5 - лог неудачи


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Преобразование графов
СообщениеДобавлено: Четверг, 20 Январь, 2011 20:11 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 56
Откуда: Узбекистан, Чирчик
Любопытно. Попробовал транслировать в Си. Если не допускать дублирование кода s4 и s5, то получится так:
Код:
if (!q1) goto L5;
s1;
if (!q2) goto L4;
s2;
if (!q3) goto LEnd;
s3;
L4: s4;
L5: s5;
LEnd: ;
или так:
Код:
bool b1 = false, b2 = false, b3 = false;

if (!q1) b1 = true;
else
{
   s1;
   if (!q2) b2 = true;
   else
   {
      s2;
      if (!q3) b3 = true;
      else
      {
         s3;
      }
   }
}

if (!b3 || b2)
{
   s4;
}

if (!b3 || b2 || b1)
{
   s5;
}
И вот вопрос -- какой вариант нагладнее и понятнее?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Преобразование графов
СообщениеДобавлено: Четверг, 20 Январь, 2011 20:56 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 3484
Откуда: Москва
Alexey_Donskoy писал(а):
Вот предлагаю схему алгоритма для обсуждения. Чтобы посмотреть с точки зрения теории и грамотного проектирования.
.................................................................................................................
1) При таком преобразовании нарушается правило "главного шампура". Как быть?
..............................................................................................


Уважаемый Алексей Николаевич!

Вопрос поставлен некорректно. Некорректность в том, что решение ищется только в рамках примитива. При этом игнорируется возможность преобразования примитива в силуэт. Такое преобразование можно осуществить ВСЕГДА. После такого преобразования все пересечения исчезают. Это математическая теорема.

В связи с этим хочу еще раз изложить мою позицию по вопросу о примитиве и силуэте.
Моя позиция, разумеется, открыта для возражений и критики.
(См. следующее сообщение).


Последний раз редактировалось Владимир Паронджанов Четверг, 20 Январь, 2011 21:46, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Преобразование графов
СообщениеДобавлено: Четверг, 20 Январь, 2011 20:57 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 3484
Откуда: Москва
Глава 30

РЕКОМЕНДАЦИИ ПО ИСПОЛЬЗОВАНИЮ АЛГОРИТМИЧЕСКИХ
СТРУКТУР «СИЛУЭТ» И «ПРИМИТИВ»

§1. ЧТО ЛУЧШЕ: СИЛУЭТ ИЛИ ПРИМИТИВ?


Предположим, вы собираетесь начертить дракон-схему. Какую структуру
лучше выбрать: силуэт или примитив?

Этот вопрос в упрощенном виде обсуждался в главе 6. В этой главе мы
дадим более подробные и окончательные рекомендации.

§2. ГОЛОВНОЙ АЛГОРИТМ
И ДВА МЕТОДА СОЗДАНИЯ АЛГОРИТМОВ


Головной алгоритм — это алгоритм самого верхнего уровня на лестнице
декомпозиции. Головной алгоритм может содержать вставки (вызываемые
процедуры). Но сам он не может быть вставкой для алгоритма более
высокого уровня.

Головной алгоритм — это всегда силуэт. Он не может быть примитивом.

Для создания головного алгоритма используют два метода, которые могут
дополнять друг друга:

        • метод наглядной декомпозиции;
        • метод многостраничного силуэта.

Метод наглядной декомпозиции описан в главе 21. Метод многостраничного
силуэта изложен ниже.

§3. КАК НАРИСОВАТЬ БОЛЬШОЙ АЛГОРИТМ

Полезно различать три понятия:

        • большие алгоритмы;
        • средние алгоритмы;
        • малые алгоритмы.

1. Чтобы создать большой алгоритм, следует использовать систему силуэтов.

2. Головной алгоритм большой схемы обязательно должен быть силуэтом.

3. Алгоритм надо рассматривать как последовательную декомпозицию
силуэтов.В том смысле, что каждый силуэт может содержать много
вставок, каждая из которых раскрывается как силуэт.

4. Ни в коем случае нельзя представлять головной алгоритм как систему
примитивов. Потому что в этом случае НЕВОЗМОЖНО БЫСТРО УВИДЕТЬ
ГЛАЗАМИ, как эти примитивы логически связаны между собой. Чтобы понять
эту связь, нужен трудоемкий мыслительный анализ, который требует усилий,
отнимает время и снижает производительность труда.

5. Если кто-либо (по ошибке) начнет рисовать головной алгоритм в виде
системы примитивов, надо немедленно прекратить работу. И превратить
примитивы в силуэт. При этом каждый примитив превращается в ветку
силуэта. Иногда часть примитивов превращается в ветки силуэта более
низкого уровня на лестнице декомпозиции.

6. Пример. На рис. 183—185 показано, что любой, сколь угодно большой
и сложный алгоритм можно изобразить в виде системы силуэтов.
Головной алгоритм представлен на рис. 183. Силуэты более низкого
уровня формируются из головного алгоритма с помощью вставок.
При этом используется простой и единообразный прием — наглядная
декомпозиция.

Вставки нижних уровней изображаются в виде примитива только
как исключение.

§4. ОДНОСТРАНИЧНЫЙ И МНОГОСТРАНИЧНЫЙ СИЛУЭТ

Головной алгоритм большого или среднего размера может быть:

        • одностраничным силуэтом;
        • многостраничным силуэтом.

Одностраничный силуэт размещается на одном листе бумаги
согласно стандарту ЕСКД (например, формата А1 и т.д.). Примеры
показаны на рис. 183—185.

Многостраничный силуэт размещают на нескольких листах бумаги
(например, формата А1 и т.д.)

Рассмотрим пример. На рис. 218—221 изображен силуэт, показанный
в виде комплекта из четырех листов формата А3.

Мысленно расположите на столе листы по горизонтали слева направо.
Пронумеруйте листы 1, 2, 3, 4. Все четыре листа связаны соединителями.

В данном примере силуэт из четырех листов содержит 19 веток
(рис. 218—221).

Число листов в дракон-схеме формально не ограничено. Но практика
показывает, что многостраничный силуэт редко содержит более 32 веток.

§5. КАК НАРИСОВАТЬ СРЕДНИЙ АЛГОРИТМ

Средний и большой алгоритмы различаются только размерами. Методика
их создания одна и та же. Она описана в §§3 и 4.

§6. КАК НАРИСОВАТЬ МАЛЫЙ АЛГОРИТМ

Алгоритмы малых размеров рисуют в виде примитива. Примеры показаны
на рис. 32, 56, 79, 80, 90, 91, 128, 168, 169, 186, 201, 202, 205.

Сравнивая силуэт и примитив, можно отметить следующее.

1. Силуэт — главное достоинство языка ДРАКОН. Он обладает мощными
выразительными средствами. В реальной работе силуэт используется
в подавляющем большинстве случаев.

2. Примитив применяют крайне редко, скорее как исключение.

3. Тем не менее, полностью отказываться от понятия «примитив» не следует
по двум причинам.

4. Первая причина — педагогическая. Примитив — это прообраз (зародыш)
ветки. Основные понятия и правила ДРАКОНа удобно объяснять на самой
простой модели. То есть на примитиве. И только после этого переходить
к рассказу о силуэте.

5. Вторая причина — необходимость описания «мелких огрызков».
Откуда берутся «мелкие огрызки»?

В процессе декомпозиции силуэта может случиться (довольно редко),
что какая-нибудь вставка окажется очень простой, элементарной.

Настолько простой, что ее неудобно представлять в виде силуэта.
Такую вставку можно назвать «мелким огрызком». Вот в этом
(исключительном) случае полезно использовать примитив.

§7. СОЕДИНИТЕЛЬ

Уже говорилось, что при создании многостраничного силуэта
необходимы соединители.

Икона «соединитель» имеет вид кружка (рис. 17, икона И26). Она позволяет
соединять горизонтальные шины (линии), находящиеся на соседних листах.
Иначе говоря, соединитель служит для перехода линии с листа на лист.

Рассмотрим пример.

На первом листе (рис. 218) есть два соединителя (см. справа 1 и 2).

На втором листе (рис. 219) — четыре соединителя (слева 1, 2, справа 3, 4).

На третьем листе (рис. 220) — четыре соединителя (слева 3, 4, справа 5, 6).

На четвертом листе (рис. 221) — два соединителя (слева 5, 6).

§8. ВЫВОДЫ

1. Алгоритмы следует рисовать как силуэты.

2. Сложные алгоритмы следует изображать как силуэты, в которых
многократно используются иконы «вставка». Последние, в свою очередь,
раскрываются как силуэты и т.д.

3. В сложных случаях удобно использовать многостраничные силуэты.

4. Примитивы рекомендуется применять только в крайних случаях.

_________________________________________________________

Эта глава взята из моей пока еще не законченной книги.

Но примерно такой же (но более короткий) материал есть в книге "Дружелюбные алгоритмы,
понятные каждому" М.: ДМК-пресс, 2010.
См. глава 20. стр. 321--323.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Преобразование графов
СообщениеДобавлено: Пятница, 21 Январь, 2011 08:38 
Аватара пользователя

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 907
Откуда: Россия, Чебоксары
Илья Ермаков писал(а):
В общем, всё нормально со второй схемой. И по правилу "правее - хуже" достаточно упорядочено: 1, 2, 3 действия..

albobin писал(а):
Смотря на получившуюся схему придумалось её "наполнение смыслом"
s1 s2 - целевые действия; s3 s4 - откаты при неудачах; s5 - лог неудачи
Оба ошибаетесь.
Это кусок тела большого цикла (или, если угодно, обработчик прерывания от таймера).
q1 - проверка каждого 1000-го цикла.
s5 - действие, которое должно выполняться в каждом цикле
q3 - выход по ошибке, когда нельзя выполнять действие s5.
На первой схеме представлен основной порядок действий (хотя выполняется 1 раз на 1000 циклов, но весь смысл тут).

Geniepro писал(а):
И вот вопрос -- какой вариант нагладнее и понятнее?
Ясен пень, первый! :lol:

Владимир Паронджанов писал(а):
После такого преобразования все пересечения исчезают.
Заменять эргономичную конструкцию на неэргономичную - ради устранения пересечений?! Не. Не пойдёт.
1) "Силуэт" на самом деле не устраняет пересечений, а, наоборот, вводит их даже там, где не было изначально.
2) В свёртывании последовательности "примитива" в "силуэт" есть и плюсы, и минусы. В данном случае, имхо, в "примитиве" лучше видна структура алгоритма.
3) Вопрос в особенности к Илье. Ошибка, проверяемая в q3, возникает за пределами этого участка алгоритма. Резонно было бы проверить её в самом начале, тогда бы структура была "канонической", прямой и прозрачной.
Но будет потеря в эффективности (проверка имеет смысл только на каждом 1000-м цикле).
Так всё ли в порядке с проектированием алгоритма?
Какие можно предложить грамотные решения с точки зрения теории?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Преобразование графов
СообщениеДобавлено: Пятница, 21 Январь, 2011 13:22 

Зарегистрирован: Пятница, 20 Июль, 2007 17:26
Сообщения: 105
Откуда: Псков
Хоть вопрос в особенности к И.Ермакову позвольте пару слов сказать :)

Рассматривая исходную схему (левую).

Проверка на внешнюю причину q3 обходится (=игнорируется) ветвями от q1 и q2. Поэтому вынесение этой проверки в самое начало, даже если не рассматривать вопрос эффективности, не улучшит схему (всё равно надо проходить q1 s1 q2 s2).
Может быть в боковых ветвях от q1 и q2 добавить действия по формированию вспомогательного флага и завести эти ветви за s2 перед q3.
А далее уже внешняя причина (ошибка) и вспомогательный флаг будут определять оставшуюся часть алгоритма: делать s3+s4+s5 или s4+s5 или s5 или ничего (ошибка)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Преобразование графов
СообщениеДобавлено: Пятница, 21 Январь, 2011 14:02 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 51
albobin писал(а):
Поэтому вынесение этой проверки в самое начало, ...
Это будет не эквивалентное преобразование, потому что s1 и s2 могут изменять состояние q3.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Преобразование графов
СообщениеДобавлено: Пятница, 21 Январь, 2011 14:17 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 56
Откуда: Узбекистан, Чирчик
igor писал(а):
albobin писал(а):
Поэтому вынесение этой проверки в самое начало, ...
Это будет не эквивалентное преобразование, потому что s1 и s2 могут изменять состояние q3.


Alexey_Donskoy писал(а):
3) Вопрос в особенности к Илье. Ошибка, проверяемая в q3, возникает за пределами этого участка алгоритма. Резонно было бы проверить её в самом начале, тогда бы структура была "канонической", прямой и прозрачной.
Но будет потеря в эффективности (проверка имеет смысл только на каждом 1000-м цикле).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Преобразование графов
СообщениеДобавлено: Пятница, 21 Январь, 2011 14:30 
Аватара пользователя

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 907
Откуда: Россия, Чебоксары
albobin писал(а):
Может быть в боковых ветвях от q1 и q2 добавить действия по формированию вспомогательного флага и завести эти ветви за s2 перед q3.
Ага, вот только флагов не хватало на пустом месте. И всё из-за того, что "теория не дозволяет" или "среда не позволяет" ;)

Вот общий вид рабочей схемы-"примитива" (слева), преобразованной в "силуэт" (справа). Что удобочитаемее? Притом "примитив" ещё вывернут по образцу рис.2 первого поста, и главная нить процесса не на шампуре...

Вложение:
primitive.png
primitive.png [ 38.65 КБ | Просмотров: 6927 ]
Вложение:
silhouette.png
silhouette.png [ 45.33 КБ | Просмотров: 6927 ]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Преобразование графов
СообщениеДобавлено: Пятница, 21 Январь, 2011 15:41 

Зарегистрирован: Пятница, 20 Июль, 2007 17:26
Сообщения: 105
Откуда: Псков
Alexey_Donskoy писал(а):
Ага, вот только флагов не хватало на пустом месте. И всё из-за того, что "теория не дозволяет" или "среда не позволяет" ;)

Т.е никаких компромиссов :(
Всего то одна переменная, у которой возможные значения будут 0 (для ошибки),1 (s5),2 (s4,s5), 3 (s3,s4,s5).
И переключатель вместо q3
А без компромиссов нельзя обходиться :)

P.S.
В схеме (png- файл) показалось(плохо видно), что учёт ошибки в алгоритме не локализован в одном месте. Почудилось?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Преобразование графов
СообщениеДобавлено: Пятница, 21 Январь, 2011 16:22 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 631
Откуда: Россия, Орёл
Алексей, если Вы хотите сохранить главную ось, то, может быть, тогда все 3 боковых оси провести до самого низа и сделать на них дублирование: на ветке из q1 - (s5), на ветке из q2 - (s4, s5). Такие несходящиеся варианты (в теории схем программ - "древесные развёртки") имеют плюс в понятности в том, что легче увидеть все варианты цепочек действий, которые может породить алгоритм.

В таких вариантах с формальной точки зрения обычно компромисс в одну или в другую сторону, но автор обычно может выбрать, что именно ему важнее подчеркнуть.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Преобразование графов
СообщениеДобавлено: Пятница, 21 Январь, 2011 16:31 

Зарегистрирован: Воскресенье, 01 Ноябрь, 2009 05:13
Сообщения: 1442
albobin писал(а):
P.S. В схеме (png- файл) показалось(плохо видно)...
Это ещё мягко сказано :) битрейт надо в разы больший...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Преобразование графов
СообщениеДобавлено: Пятница, 21 Январь, 2011 16:39 

Зарегистрирован: Воскресенье, 01 Ноябрь, 2009 05:13
Сообщения: 1442
Alexey_Donskoy писал(а):
Илья Ермаков писал(а):
В общем, всё нормально со второй схемой. И по правилу "правее - хуже" достаточно упорядочено: 1, 2, 3 действия..
albobin писал(а):
Смотря на получившуюся схему придумалось её "наполнение смыслом"
s1 s2 - целевые действия; s3 s4 - откаты при неудачах; s5 - лог неудачи
Оба ошибаетесь...
Ну ясен пень :)... по "слепышу" можно только гадать о семантике...

Alexey_Donskoy писал(а):
Владимир Паронджанов писал(а):
После такого преобразования все пересечения исчезают.
Заменять эргономичную конструкцию на неэргономичную - ради устранения пересечений?! Не. Не пойдёт.
1) "Силуэт" на самом деле не устраняет пересечений, а, наоборот, вводит их даже там, где не было изначально.
2) В свёртывании последовательности "примитива" в "силуэт" есть и плюсы, и минусы. В данном случае, имхо, в "примитиве" лучше видна структура алгоритма...
1) :?: Поясните. Теоремы 1 и 2 Паронджанова неверны?
2) Согласен, бывает и так (иногда ясность полностью/частично восстанавливается, если переходить не к силуэту, а к ЦД).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Преобразование графов
СообщениеДобавлено: Пятница, 21 Январь, 2011 16:48 
Аватара пользователя

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 907
Откуда: Россия, Чебоксары
albobin писал(а):
В схеме (png- файл) показалось(плохо видно), что учёт ошибки в алгоритме не локализован в одном месте. Почудилось?
Много состояний и вариантов. Не все являются ошибками :)

Драконограф писал(а):
битрейт надо в разы больший..
Специально, чтоб деталей не показывать. А просто для оценки внешнего вида и эргономики развёрнутого "примитива" и свёрнутого "силуэта".

Илья Ермаков писал(а):
древесные развёртки
Дык, это приемлемо при автоматическом их построении, ни никак не при ручном копипасте. Тем более при последующей трансляции алгоритма в ассемблер ;)

Драконограф писал(а):
Поясните. Теоремы 1 и 2 Паронджанова неверны?
Какие теоремы? Что "Алгоритмы следует рисовать как силуэты"? Так я и не согласен. Что и проиллюстрировал.
"Силуэт" вносит визуальный разрыв в граф алгоритма (что плохо для эргономики), вносит туда дополнительную сложность (адресную общую шину). Возможно, иногда эта сложность оправдывается приобретением обозримости. Но пока на своих примерах убеждаюсь, что минусов больше...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Преобразование графов
СообщениеДобавлено: Пятница, 21 Январь, 2011 17:03 

Зарегистрирован: Воскресенье, 01 Ноябрь, 2009 05:13
Сообщения: 1442
Alexey_Donskoy писал(а):
Драконограф писал(а):
битрейт надо в разы больший..
Специально, чтоб деталей не показывать. А просто для оценки внешнего вида и эргономики развёрнутого "примитива" и свёрнутого "силуэта".
Честно сказать, одинаково "нагромождено" при таком разрешении :) ... единственное - что в силуэте предполагается, что решаемая [под]задача разбита на части...

Alexey_Donskoy писал(а):
Илья Ермаков писал(а):
древесные развёртки
Дык, это приемлемо при автоматическом их построении, ни никак не при ручном копипасте. Тем более при последующей трансляции алгоритма в ассемблер ;)
Конечно - редактор должен строить как вариант отображения...

Alexey_Donskoy писал(а):
Драконограф писал(а):
Поясните. Теоремы 1 и 2 Паронджанова неверны?
Какие теоремы? Что "Алгоритмы следует рисовать как силуэты"? Так я и не согласен. Что и проиллюстрировал.
"Силуэт" вносит визуальный разрыв в граф алгоритма (что плохо для эргономики), вносит туда дополнительную сложность (адресную общую шину). Возможно, иногда эта сложность оправдывается приобретением обозримости. Но пока на своих примерах убеждаюсь, что минусов больше...
Нет, там о том, что можно перестроением в силуэт устранить пересечения. Теоремы о том, как лучше рисовать - это д.б. скорее не математика, а инженерная психология :)
Теперь Вы сформулировали иные претензии ("визуальный разрыв", "шина")... В принципе и я вижу, что это когда как - почему и ЦД как ещё один вариант...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Преобразование графов
СообщениеДобавлено: Пятница, 21 Январь, 2011 17:07 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 631
Откуда: Россия, Орёл
Ну оставьте второй вариант... Всё-таки оно логично - более редкая логика правее.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Преобразование графов
СообщениеДобавлено: Пятница, 21 Январь, 2011 17:11 
Аватара пользователя

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 907
Откуда: Россия, Чебоксары
Илья Ермаков писал(а):
Ну оставьте второй вариант... Всё-таки оно логично - более редкая логика правее.
В "силуэте" правее отнюдь не "более редкая логика". Просто последовательная (временная) развёртка во втором измерении...

Меня не особо волнует, как именно оставить. Интересен всё-таки анализ с точки зрения теории и всё такое ;)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Преобразование графов
СообщениеДобавлено: Пятница, 21 Январь, 2011 19:05 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 631
Откуда: Россия, Орёл
А что теория... Теория - это то, что любое обычное представление - это "упаковка" полной развёртки алгоритма. С теми или иными неудобствами при этой упаковке.

Ситуация с ошибкой в глубине вложенности всегда трудна для удобного представления. Откуда и желание у многих иметь обработку исключений, как нелокальный особый вид переходов.

А у Вас тут кроме этого выхода и ещё особенность: вот эти цепочки действий, отличающиеся на одно.
Именно для этих случаев когда народ завёл Си-шный switch, в котором можно пропустить break.

===
Наверняка разумно вынести IF q1 и s5 на верхний уровень. А в теле алгоритма оставить только всю эту "редко-важную" логику. Одна ветка из функции уйдёт. И логичнее - частый пустой маршрут внесён напрямую в цикл.
===

Вообще, надо как-то разделить верх и низ алгоритма. Принятие решения и цепочки из s3, s4, s5.
Один из способов народ предлагал - флаги.
Но таки я считаю, что наиболее правильно (с точки зрения логико-теоретических соображений) взять первый вариант и сделать развёрнутые исходящие ветки.
Можно ли в Вашем случае вынести эти действия в процедуры? Если это выполняется нечасто, то наверняка можно - и дублирование будет побеждено.
Сделать: P1 BEGIN S3; P2 END; и P2 BEGIN S4; S5 END.

И вызывать на одном исходе P1, а на другом P2.

А вариант с просто S5 вынести вверх в цикл.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 100 ]  На страницу 1, 2, 3, 4, 5  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2008-2017, участники конференции «DRAKON.SU», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB