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: Как правильно построить цикл? Ответ Эдуарду Ильченко |
Владимир Паронджанов писал(а): Я бы хотел Вам возразить не с точки зрения структрности, а с точки зрения проблемы пересечений. Мой тезис такой: Силуэт НЕ обязан превращаться в примитив (без пересечений). Владимир Даниелович, да ведь проблема пересечений - надуманна.Она возникает исключительно при отображении алгоритма на плоскость. И к структурности не имеет прямого отношения. А структурность - и есть самое главное в алгоритмике. Цитата: Примитив с любым числом пересечений можно преобразовать в эквивалентный ему силуэт (путем введения дополнительных переменных) А вот это как раз совсем не важно.Более того, даже очевидно. И практического смысла в этой теореме тоже нет. Важнее анализ с точки зрения эргономики: помогает такое разрезание или, напротив, мешает. Моё мнение - помогает в редких частных случаях. В общем случае - скорее мешает, потому что провоцирует (а правил, озвученных выше, никто пока соблюдать не собирается, увы). 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: Как правильно построить цикл? Ответ Эдуарду Ильченко |
Я не специалист, но в ряде случаев "силуэтный беспредел" - это изюминка ДРАКОНа, к примеру, когда нужен алгоритм для человека уровня "про рыбилку", и нет потребности на выхлопе иметь код "поструктурнее". В таких случаях выделять веточные циклы даже вредно (т.е. лишний раз "загрузить" читателя), особенно, подчёркивая их возможную вложенность. При необходимости можно как-то обозначить, что, возможно, по этому месту мы пройдёмся не один раз: Вложение: 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/ |