DRAKON.SU
https://forum.drakon.su/

Запрет объединения стрелок во вложенных циклах
https://forum.drakon.su/viewtopic.php?f=78&t=2684
Страница 1 из 1

Автор:  Владимир Паронджанов [ Четверг, 10 Июнь, 2010 19:44 ]
Заголовок сообщения:  Запрет объединения стрелок во вложенных циклах

Цитата:
Правило. Запрещается объединять стрелки во вложенных циклах.
Это значит, что две стрелки нельзя заменять одной.


Раньше я нарушал это правило
Пример 1. См.. Как улушить работу ума стр.129, рис. 41
Пример 2. См.. Как улушить работу ума стр.179, рис. 90 (продолжение)
Пример 3. См. Занимательная информатика Росмэн 2000. Рис.74 Стр.76.
Пример 4. http://oberoncore.ru/wiki/drakon/%D0%B2 ... 0%B8%D1%81
В конце этого текста см. рис.41

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

Правильное изображение данного случая показано ниже
Вложение:
Комментарий к файлу: Надо рисовать две стрелки
и не объединять их в одну

Рис._226.png
Рис._226.png [ 81.76 КБ | Просмотров: 14415 ]
:

В книге "Дружелюбные алгоритмы..." я исправил этот недостаток. См. стр. 137, рис. 71

Автор:  С. Тарасенко [ Пятница, 11 Июнь, 2010 09:43 ]
Заголовок сообщения:  Re: Запрет объединения стрелок во вложенных циклах

А по-моему, как раз разделение усложняет схему.

1) Появились лишние полосы, по которым надо дважды пройти глазами, чтобы убедиться, что идут они в одну точку.

2) Визуальный эффект таков, что лианы
---- от вопроса "Краска в ведре кончилась?"
---- и от действия "Возьми краску в сарае"
идут в РАЗНЫЕ точки, разделённые какими-нибудь иконами. И только проследив их путь, мы узнаём, что оказывается, эта точка одна и та же.
А если схема большая и идут они далеко вверх, например - на несколько экранов, что тогда? Тогда и вовсе не понятно.

3) Мы привыкли к ВЕРТИКАЛЬНОМУ ОБЪЕДИНЕНИЮ, поэтому ждём его и от такой конструкции. А оказывается, всего лишь если лианы направлены ВВЕРХ, а не вниз, то объединение запрещается. Это скользковатое исключение запомнится не сразу.

4) Каждое исключение из правил есть дополнительное усложнение. Поэтому оно должно быть крепко обосновано. Пока вы обосновали это усложнение только тем, что иначе происходит усложнение. На мой взгляд, то усложнение, что вы предлагаете в качестве выхода, есть более сложное усложнение, чем было.

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

НО !!!

В большой схеме, если не видно верхней стрелки, можно случайно пойти взглядом вниз, чтобы упереться в нижний вопрос и вернуться наверх. Чтобы этого не происходило, нужно всего лишь снабдить стрелками каждый вход. Например, вот так:
Вложение:
лиана.png
лиана.png [ 2.53 КБ | Просмотров: 14386 ]



Или так:

Вложения:
лиана1.png
лиана1.png [ 2.58 КБ | Просмотров: 14383 ]

Автор:  Илья Ермаков [ Пятница, 11 Июнь, 2010 10:33 ]
Заголовок сообщения:  Re: Запрет объединения стрелок во вложенных циклах

Представьте, что перед внутренним циклом появилось какое-то действие. Объединение уже невозможно. Зачем городить огород для частного случая?

Автор:  Рэйлвэй Каген [ Пятница, 11 Июнь, 2010 10:49 ]
Заголовок сообщения:  Re: Запрет объединения стрелок во вложенных циклах

С.Тарасенко писал(а):
..нужно всего лишь снабдить стрелками каждый вход..

Существуют "законные" средства устранения проблемы:
Вложение:
loop.png
loop.png [ 10.38 КБ | Просмотров: 14376 ]


Впрочем, где-то на форуме было предложено(вне правил Дракона) достаточно непротиворечивое решение - рисовать петлю цикла другим типом линии. Например, слегка утолщённой штриховой линией. По крайней мере, такой подход явно указывает, что идём "против шерсти":
Вложение:
loop2.png
loop2.png [ 8.46 КБ | Просмотров: 14373 ]

Автор:  Владислав Жаринов [ Пятница, 11 Июнь, 2010 22:19 ]
Заголовок сообщения:  Re: Запрет объединения стрелок во вложенных циклах

С. Тарасенко писал(а):
А по-моему, как раз разделение усложняет схему.

1) Появились лишние полосы, по которым надо дважды пройти глазами, чтобы убедиться, что идут они в одну точку.

2) Визуальный эффект таков, что лианы
---- от вопроса "Краска в ведре кончилась?"
---- и от действия "Возьми краску в сарае"
идут в РАЗНЫЕ точки, разделённые какими-нибудь иконами. И только проследив их путь, мы узнаём, что оказывается, эта точка одна и та же.
А если схема большая и идут они далеко вверх, например - на несколько экранов, что тогда? Тогда и вовсе не понятно.



Объединения - неформальные операции, потому по-прежнему считаю, что Владимир Даниелович и Илья правы - и касается это не только циклов. Уже предлагал компромиссное решение в этом сообщении - автоматически петли циклов рисуются разделёнными, а объединение реализуется пересадками лиан.

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

Автор:  С. Тарасенко [ Пятница, 18 Июнь, 2010 10:35 ]
Заголовок сообщения:  Re: Запрет объединения стрелок во вложенных циклах

Илья Ермаков писал(а):
Представьте, что перед внутренним циклом появилось какое-то действие. Объединение уже невозможно. Зачем городить огород для частного случая?

Так и дело-то всё в том, что если между циклами действие, то включается совершенно другое восприятие! Наподобие GOTO или LOOP (в конце цикла).
Если же действия нет, то каждый новый вход в петлю цикла рассматривается как CONTINUE, которое может повторяться много раз за цикл и не несёт в себе окончания цикла.

По-моему, это разные вещи, и зрительно их нужно разделить.

Автор:  Илья Ермаков [ Пятница, 18 Июнь, 2010 10:52 ]
Заголовок сообщения:  Re: Запрет объединения стрелок во вложенных циклах

Случаи совершенно однородные, что действия сегодня нет в данном алгоритмы - "счастливое стечение обстоятельств", а завтра оно там появится.

Я бы вообще запретил вложенные циклы. Выносить в отдельный алгоритм и ставить "вставку".

Автор:  Рэйлвэй Каген [ Пятница, 18 Июнь, 2010 12:13 ]
Заголовок сообщения:  Re: Запрет объединения стрелок во вложенных циклах

Илья Ермаков писал(а):
..Выносить в отдельный алгоритм и ставить "вставку".
Это возможно только для тривиальных вложений.

Автор:  Илья Ермаков [ Пятница, 18 Июнь, 2010 14:16 ]
Заголовок сообщения:  Re: Запрет объединения стрелок во вложенных циклах

Если вложенный цикл не получается разделить, стоит подумать о перепроектировании.

Если же случай "системный", низкоуровневый - делайте веточные циклы, он на то и есть - для сложной смены состояний.

Автор:  Рэйлвэй Каген [ Пятница, 18 Июнь, 2010 15:28 ]
Заголовок сообщения:  Re: Запрет объединения стрелок во вложенных циклах

Так можно вообще в капусту всё покрошить.. иерархически.. до линейной текстовой модели. В драконе-то кое-что и на плоскости оставить можно. Тогда и веточные циклы - в самый раз.

Автор:  Илья Ермаков [ Пятница, 18 Июнь, 2010 19:22 ]
Заголовок сообщения:  Re: Запрет объединения стрелок во вложенных циклах

Согласен, в случае навороченного принятия решений лучше иногда развернуть пошире на одном плане взгляда, чем побить.

Но это касается (Владимир Даниелович подтвердит, я думаю, по опыту НПЦ) развилок... В таких "ветвистых" алгоритмах обычно нет сложных циклов.

Автор:  Рэйлвэй Каген [ Пятница, 18 Июнь, 2010 22:22 ]
Заголовок сообщения:  Re: Запрет объединения стрелок во вложенных циклах

Точно. Это касается конструкций, в которых вложенный цикл не является "шампур-блоком".

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/