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

Как правильно построить цикл? Ответ Эдуарду Ильченко
https://forum.drakon.su/viewtopic.php?f=172&t=4032
Страница 2 из 2

Автор:  Alexey_Donskoy [ Суббота, 04 Август, 2012 08:28 ]
Заголовок сообщения:  Re: Как правильно построить цикл? Ответ Эдуарду Ильченко

Владислав Жаринов писал(а):
А как обобщённый цикл в Вашем понимании соотносится с "гибридным"?..
Дак как. Алгоритмические сущности-то никуда не деваются, как их не тасуй. Есть тело цикла и есть условие продолжения и/или условие выхода. Вопрос только в наиболее эргономичном их рисовании :)
Интереснее было бы добавить метаинформации (семантические сущности - инвариант, например).
Семантика с алгоритмикой, в общем случае, не обязаны совпадать.
Семантика компилируется в алгоритмику в соответствии с возможностями исполнителя.
Вот так как-то должно бы быть, имхо.

Автор:  Владислав Жаринов [ Суббота, 04 Август, 2012 12:34 ]
Заголовок сообщения:  Re: Как правильно построить цикл? Ответ Эдуарду Ильченко

Это да... не зря и Мейер, и Лавров напоминают, что инвариантов м.б. более одного... :) Впрочем, из той же формулировки моделирования/формализации по Леонтьеву-Грековой-Фридланду можно видеть то же самое - на каждой следующей стадии исполнитель всё более формализован, и для него надо писать всё более определённо... :)

Автор:  Владислав Жаринов [ Суббота, 04 Август, 2012 12:48 ]
Заголовок сообщения:  Re: Как правильно построить цикл? Ответ Эдуарду Ильченко

Alexey_Donskoy писал(а):
...
Интереснее было бы добавить метаинформации (семантические сущности - инвариант, например).
Семантика с алгоритмикой, в общем случае, не обязаны совпадать.
...
Кстати, насчёт добавлять. Как Вам решения, обсуждающиеся здесь: viewtopic.php?p=73726#p73726 ?..

Автор:  Владимир Паронджанов [ Среда, 12 Сентябрь, 2012 16:46 ]
Заголовок сообщения:  Re: Как правильно построить цикл? Ответ Эдуарду Ильченко

В важном сообщении viewtopic.php?p=74653#p74653 usr345 писал(а):
То есть вот такого быть не должно:

Согласен. Это схема содержит ошибку.
Чтобы устранить ошибку, надо ввести
Цитата:
ПРАВИЛО

В силуэте можно использовать:

— один веточный цикл;

— несколько независимых веточных циклов. Веточный цикл является независимым, если он не имеет общих участков с другими веточными циклами;

— вложенный веточный цикл, то есть веточный цикл, внутри которого находится другой веточный цикл;

— несколько вложенных веточных циклов.

ВЛОЖЕННЫЙ ВЕТОЧНЫЙ ЦИКЛ

Веточный цикл называется вложенным, если:

— икона «имя ветки» веточного цикла 1 находится левее иконы «имя ветки» веточного цикла 2;

— все иконы «адрес» веточного цикла 1 находятся правее икон «адрес» веточного цикла 2.

При описанных условиях веточный цикл 2 является вложенным в веточный цикл 1.

Можно сказать по-другому. Веточный цикл 1 является внешним, а веточный цикл 2 — внутренним.
Прошу критиковать.

Автор:  Alexey_Donskoy [ Среда, 12 Сентябрь, 2012 16:53 ]
Заголовок сообщения:  Re: Как правильно построить цикл? Ответ Эдуарду Ильченко

Владимир Паронджанов писал(а):
В силуэте можно использовать:
С такими правилами - да, всё вроде в порядке. То есть "силуэт" однозначно развернётся в "примитив", без нарушения структурности.

Автор:  Владимир Паронджанов [ Среда, 12 Сентябрь, 2012 17:09 ]
Заголовок сообщения:  Re: Как правильно построить цикл? Ответ Эдуарду Ильченко

Alexey_Donskoy писал(а):
... То есть "силуэт" однозначно развернётся в "примитив", без нарушения структурности.


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

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

Мой тезис такой: Силуэт НЕ обязан превращаться в примитив (без пересечений). Получится — хорошо, не получится, тоже хорошо. Это не суть важно.

А ЧТО ВАЖНО?

Важно вот что:
Цитата:
Теорема. Примитив с любым числом пересечений можно преобразовать в эквивалентный ему силуэт (путем введения дополнительных переменных)

Автор:  albobin [ Среда, 12 Сентябрь, 2012 17:19 ]
Заголовок сообщения:  Re: Как правильно построить цикл? Ответ Эдуарду Ильченко

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

Автор:  Владимир Паронджанов [ Среда, 12 Сентябрь, 2012 17:35 ]
Заголовок сообщения:  Re: Как правильно построить цикл? Ответ Эдуарду Ильченко

albobin писал(а):
... зачем вообще нужно вводить понятие "веточный цикл" и особые иконки для него?

По силуэту мы вправе переходить на любой адрес и всё, а получаются при этом циклы или нет - какая разница. (IMHO)


Уважаемый albobin!

Спасибо за вопрос.

Да, Вы совершенно правы.

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

Но! Обозначения эти нужны ДЛЯ ЧЕЛОВЕКА (а не для процессора) из эргономических соображений.
То есть для удобства зрительного восприятия.
У процессора нет зрительного восприятия, ему все равно.

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

Это хорошо видно вот на этом рисунке. Уберите границы веточного цикла — будет очень трудно ориентироваться в этой схеме.
download/file.php?id=3457&mode=view

viewtopic.php?p=74653#p74653

Автор:  albobin [ Среда, 12 Сентябрь, 2012 17:42 ]
Заголовок сообщения:  Re: Как правильно построить цикл? Ответ Эдуарду Ильченко

Получилось так, что дополнил своё сообщение позже Вашего ответа.
Повторюсь
Единственно, может быть, следует как то отметить ветки, на которые допустимы повторные входы.

Но вводить ограничения может быть всё-таки излишне. Остаются только просто пометки, но никаких понятий "веточный цикл" со всеми вытекающими...

Автор:  Alexey_Donskoy [ Среда, 12 Сентябрь, 2012 17:48 ]
Заголовок сообщения:  Re: Как правильно построить цикл? Ответ Эдуарду Ильченко

Владимир Паронджанов писал(а):
Я бы хотел Вам возразить не с точки зрения структрности, а с точки зрения проблемы пересечений. Мой тезис такой: Силуэт НЕ обязан превращаться в примитив (без пересечений).
Владимир Даниелович, да ведь проблема пересечений - надуманна.
Она возникает исключительно при отображении алгоритма на плоскость.
И к структурности не имеет прямого отношения.
А структурность - и есть самое главное в алгоритмике.

Цитата:
Примитив с любым числом пересечений можно преобразовать в эквивалентный ему силуэт (путем введения дополнительных переменных)
А вот это как раз совсем не важно.
Более того, даже очевидно. :wink:
И практического смысла в этой теореме тоже нет. Важнее анализ с точки зрения эргономики: помогает такое разрезание или, напротив, мешает.
Моё мнение - помогает в редких частных случаях.
В общем случае - скорее мешает, потому что провоцирует (а правил, озвученных выше, никто пока соблюдать не собирается, увы).

albobin писал(а):
А зачем вообще нужно вводить понятие "веточный цикл" и особые иконки для него.
Всё верно. Это просто паллиатив, то есть сомнительная экономия, требующая введения лишних сущностей.

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

Мне кажется, что возникает противоречие между потребностями и представлениями о них.
Для коллегиального обсуждения ответственных (но не особо больших) алгоритмов хороша твёрдая копия.
Но для индивидуальной работы над большим и очень большим проектом - только динамическая компьютерная поддержка. Иначе - труба.

Цитата:
По силуэту мы вправе переходить на любой адрес и всё, а получаются при этом циклы или нет, и пересекаются они или нет - какая разница.
Вот в том-то и дело, что без специальных ограничительных правил - как угодно. И тут вылезут все прелести, от которых тщетно призывал избавиться Дейкстра...

Цитата:
Ведь если взять конечный автомат, то там же состояния чередуются как угодно.
Да, именно.
Но, согласитесь, конечный автомат - весьма частный случай. И, хотя для него "силуэт" без ограничений идеален, для всех прочих применений он плох.
Поэтому я бы предложил чётко разделить эти классы алгоритмов, в том числе по способу их визуального отображения.

Автор:  Владислав Жаринов [ Среда, 12 Сентябрь, 2012 17:53 ]
Заголовок сообщения:  Re: Как правильно построить цикл? Ответ Эдуарду Ильченко

Конечно, состояния КА потенциально чередуются как угодно. И для автоматного графа также справедливо понятие цикла (контура)... :)
Т.к. мы рассматриваем силуэт как форму записи алгоритмического процесса, могущего реализовать, в частности, и КА, то, полагаю, правильно не исключать такую базовую алгоритмическую структуру, как цикл. "Примитив" и "силуэт" - это просто обозначения способов размещения одной и той же маршрутной структуры на плоскости...

Другое дело - что цикл есть цикл, а ВМЦ - также просто артефакт укладки в силуэт. Если так понимать allbobin - то согласен.

Автор:  albobin [ Среда, 12 Сентябрь, 2012 17:56 ]
Заголовок сообщения:  Re: Как правильно построить цикл? Ответ Эдуарду Ильченко

Alexey_Donskoy писал(а):
Но, согласитесь, конечный автомат - весьма частный случай. И, хотя для него "силуэт" без ограничений идеален, для всех прочих применений он плох.
Поэтому я бы предложил чётко разделить эти классы алгоритмов, в том числе по способу их визуального отображения.


Чем плох силуэт, когда нет повторного входа ни в одну из веток? Никаких нарушений структурности.
А, если есть (повторный вход) - тогда это уже с полным основанием можно считать КА, и силуэт для него весьма неплох.

Автор:  Владислав Жаринов [ Среда, 12 Сентябрь, 2012 18:01 ]
Заголовок сообщения:  Re: Как правильно построить цикл? Ответ Эдуарду Ильченко

В смысле - нет второго и более входа хотя бы в одну ветку (по разным маршрутам)?
Так это не все необходимые условия для соблюдения структурности. Другое условие - как раз что контуры не должны пересекаться. И В.Д. только что сформулировал условия этого для 2-х контуров (как частный случай этого - в предположении корректности в общем)...

Автор:  Владимир Паронджанов [ Среда, 12 Сентябрь, 2012 18:14 ]
Заголовок сообщения:  Re: Как правильно построить цикл? Ответ Эдуарду Ильченко

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


По вопросу о пересекающихся циклах. Я посмотрел еще раз на картинку с колдуньей. И мне показалось, что рабочая точка этого алгоритма никогда не сможет дойти до конца.

Если я не ошибся, то это серьезный дефект. В чем причина дефекта? Специалисты настаивают, что причиной является негарантоспособная конструкция — пересекающиеся циклы. Поскольку других мнений не было, я решил, что лучше ввести ограничения и запретить пересекающиеся циклы. Тем более, Алексей Николаевич увязал этот вопрос с вопросом о доверии к силуэту.
Мне хотелось снять столь серьезные обвинения. и я решил, что проще всего согласиться с мнением большинства.

albobin писал(а):
Ведь если взять конечный автомат, то там же состояния чередуются как угодно.


albobin писал(а):
Единственно, может быть, следует как то отметить ветки, на которые допустимы повторные входы.


albobin писал(а):
Но вводить ограничения может быть всё-таки излишне.


Уважаемый albobin!

Вы поставили очень серьезные и важные вопросы. Спасибо Вам за это.

Дать окончательные ответы на Ваши вопросы прямо сейчас, по-видимому, было бы поспешным решением.

Давайте послушаем, что по этому поводу думают специалисты.

Автор:  Владислав Жаринов [ Среда, 12 Сентябрь, 2012 19:08 ]
Заголовок сообщения:  Re: Как правильно построить цикл? Ответ Эдуарду Ильченко

Ну, ограничение структурности - это же для записи императивной части структурных программ... И рационально так и включать в исчисление...
Ведь мы же по-прежнему хотим применять его как нотацию и для неструктурных алгоритмов/потоков управления программ... или как?.. :)

Автор:  PSV100 [ Среда, 12 Сентябрь, 2012 19:12 ]
Заголовок сообщения:  Re: Как правильно построить цикл? Ответ Эдуарду Ильченко

Я не специалист, но в ряде случаев "силуэтный беспредел" - это изюминка ДРАКОНа, к примеру, когда нужен алгоритм для человека уровня "про рыбилку", и нет потребности на выхлопе иметь код "поструктурнее". В таких случаях выделять веточные циклы даже вредно (т.е. лишний раз "загрузить" читателя), особенно, подчёркивая их возможную вложенность. При необходимости можно как-то обозначить, что, возможно, по этому месту мы пройдёмся не один раз:

Вложение:
multi_adr.PNG
multi_adr.PNG [ 15.02 КБ | Просмотров: 13862 ]


3 и 4 иконы - вместо стрелочки с закрашенным треугольником, что означает именно "много проходов" (последние три - для "мульти-шампура", чтобы явно их группировать, перед ними - стрелка для "внешних" веток, это для "областей" или тому подобное).

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

P.S. Сообщение писал до того, как увидел пред. пост.

Автор:  Владимир Паронджанов [ Четверг, 13 Сентябрь, 2012 10:09 ]
Заголовок сообщения:  Re: Как правильно построить цикл? Ответ Эдуарду Ильченко

Дополнительно к своему предыдущему сообщению albobin писал(а):
Достижимость выхода по идее должна проверять среда разработки, я имею структурно достижимую - должна быть цепочка переходов по силуэту от входа к выходу.

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

Но ограничения на наличие ВЦ всё же думаю не нужны.

Может быть нужны предупреждения среды разработки ?
Я получил этот текст в личном сообщении. И, с разрешения albobin, публикую его.

Автор:  Владимир Паронджанов [ Понедельник, 02 Апрель, 2018 20:39 ]
Заголовок сообщения:  Re: Как правильно построить цикл? Ответ Эдуарду Ильченко

Владимир Паронджанов писал(а):
Уважаемый Эдуард!

Вы задали вопрос про цикл в примитиве здесь.
http://forum.oberoncore.ru/viewtopic.php?p=70268#p70268

Цитата:
Вопрос знатокам.

Разрешено ли построение цикла как на рисунке внизу? (доп. вход в цикл через точки А, B)
Если нет, то каким правилом пользоваться?


Мой ответ таков.

1. Язык ДРАКОН определен через графический синтаксис. Текстовый синтаксис не определен и может быть любым.

2. Как определен графический синтаксис? Он определен ДВОЯКО.
Во-первых, он определен через формальное описание (37 тезисов, изложенных в главе «Графический синтаксис языка ДРАКОН»). В последней книге это Глава 33, стр. 416—424.
Во-вторых, что очень важно, графический синтаксис определен через мое описание дракон-редактора. В последней книге это «Глава 32. Конструктор алгоритмов (помощник человека)», стр. 395—415.
http://drakon.su/_media/biblioteka/chas ... isanie.pdf

3. Оба описания (формальное и через действия редактора) должны быть тождественны. Если они не совпадают, значит, это ошибка. Мне о таких ошибках неизвестно. Я исхожу из того, что ошибок нет и оба описания тождественны.

4. Отсюда вытекает, что правильно построенный дракон-редактор является инструментом не только для конструирования правильных дракон-схем, но и инструментом ДЛЯ ПРОВЕРКИ готовой дракон-схемы, относительно которой есть сомнения, что она правильная. Это именно Ваш случай, Эдуард.

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

6. Описанная проверка (через действия редактора) не заменяет проверку на соответствие формальному описанию, а дополняет ее. Хотя по сути эти проверки тождественны. Преимущество проверки через действия редактора состоит в том, что она более наглядна. В том смысле, что «метод через построение» позволяет пощупать построение руками (на каждом шаге построения).

ВЫВОДЫ

В1. Графический синтаксис языка ДРАКОН определен двумя разными методами: декларативным и процедурным, каждый из которых является математически строгим.

В2. Декларативный метод представляет собой формальное описание графического синтаксиса с помощью 37 тезисов.

В3. Процедурный метод представляет собой формальное преобразование заготовки-примитив в формальную дракон-схему примитив с помощью идеального дракон-редактора, поведение которого в случае необходимости можно смоделировать вручную (с помощью карандаша и бумаги).

В4. Все сказанное выше про примитив относится и к силуэту.

==============================================

Повторю главную мысль. Графический синтаксис языка ДРАКОН описан не одним, а двумя разными способами. Это улучшает надежность описания и упрощает возможность его проверки.
http://drakon.su/_media/biblioteka/chas ... isanie.pdf

В частности, отсюда вытекают два правила построения "цикла со стрелкой".

1. Цикл со стрелкой строится с помощью соответствующей макроиконы.

2. Запрещается строить цикл со стрелкой с помощью макроиконы Развилка.

Насколько я знаю, существующие ДРАКОН-конструкторы не поддерживают эти правила.

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