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

"Да"-"нет" в развилках
https://forum.drakon.su/viewtopic.php?f=162&t=1281
Страница 6 из 10

Автор:  ==== [ Вторник, 16 Декабрь, 2008 19:38 ]
Заголовок сообщения:  Re: "Да"-"нет" в развилках

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

Автор:  Александр Ильин [ Вторник, 16 Декабрь, 2008 19:46 ]
Заголовок сообщения:  Re: "Да"-"нет" в развилках

В цикле WHILE указывается условие ВХОДА в цикл, при этом условие находится над телом цикла, предшествует ему.
В цикле REPEAT указывается уловие ВЫХОДА из цикла, при этом условие записывается после тела цикла.
У этих циклов в Паскале с эргономикой всё в порядке.

Автор:  Владимир Паронджанов [ Вторник, 16 Декабрь, 2008 20:52 ]
Заголовок сообщения:  Re: "Да"-"нет" в развилках

Уважаемый Алексей Донской!

В Ваше последнее сообщение вкралась небольшая опечатка. Слева у Вас не цикл while, a if-then.

Автор:  Илья Ермаков [ Вторник, 16 Декабрь, 2008 21:16 ]
Заголовок сообщения:  Re: Дракон и симультанное зрительное восприятие

Alexey_Donskoy писал(а):
Да Вы, сударь, опять шутить изволите! Циклы в Паскале выглядят именно так, как Вы и процитировали. Обратите внимание на выходы развилок, при помощи которых делаются эти циклы:
Вложение:
while.png

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

Автор:  Alexey_Donskoy [ Вторник, 16 Декабрь, 2008 21:19 ]
Заголовок сообщения:  Re: "Да"-"нет" в развилках

Ой, виноват, уже исправился :oops:
Вложение:
while.png
while.png [ 5.4 КБ | Просмотров: 17461 ]

А вообще - фигнёй ведь занимаемся! Вопрос-то вполне очевидный...
Просто все переживают - ну как же так, а вдруг мне понадобится ДА вправо сделать, так лучше на всякий случай не фиксировать...


Кстати, помимо всего прочего, не смог нарисовать цикл while на Дракон-редакторе...
Графическим редактором поправил ;)

P.S. То, что у меня тут нарисовано - это не Дракон, чтобы не было недоумённых вопросов, а просто алгоритм! Как цикл while нарисовать в Драконе, я знаю, но мне это сильно не нравится... Полагаю это неэргономичным... Но обсуждать здесь - не буду. Разве только в отдельной ветке... да и то не сегодня...

Автор:  ==== [ Вторник, 16 Декабрь, 2008 22:59 ]
Заголовок сообщения:  Re: "Да"-"нет" в развилках

Вложение:
WHILE.png

Автор:  Alexey_Donskoy [ Вторник, 16 Декабрь, 2008 23:10 ]
Заголовок сообщения:  Re: "Да"-"нет" в развилках

Ну вот, пока писал PS про цикл while, Геннадий уже нарисовал его тут ;)

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

Автор:  Владимир Паронджанов [ Среда, 17 Декабрь, 2008 12:50 ]
Заголовок сообщения:  Re: "Да"-"нет" в развилках

Alexey_Donskoy писал(а):
...нахожу такой способ изображения цикла [while] крайне неэргономичным... Не процедуры рисования в редакторе, а самой графической формы такого цикла while в Драконе...


Уважаемый Алексей Донской!

Если позволите, сделаю некоторые пояснения.
Шампур -- фундаментальное понятие Дракона. Нет шампура -- нет и Дракона.
Понятие шампура разъяснено во вложении.
Шампур не должен изгибаться и тем более прерываться. Изломы и прерывание линии шампура категорически запрещены дракон-редактором.
Я выбрал графическую форму цикла while (которая Вам не нравится) по единственной причине:
только такая графическая форма цикла while позволяет выполнять правило шампура и избежать пересечений.

Другого варианта решения проблемы не существует (во всяком случае я его не вижу).

Рассмотрим Ваш вариант цикла while.
viewtopic.php?p=22397#p22397

Этот вариант нарушает фундаментальное правило шампура. У Вас линия шампура прерывается. Почему? Предполагаю, потому что Вы хотели избежать ситуации "да справа".

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

Я имею в виду Вашу фразу:

Цитата:
А вообще - фигнёй ведь занимаемся! Вопрос-то вполне очевидный...
Просто все переживают - ну как же так, а вдруг мне понадобится ДА вправо сделать, так лучше на всякий случай не фиксировать...


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

Постскриптум. Рисунок во вложении взят из моей книги "Занимательная информатика. М.: Дрофа, 2007". Стр. 74, Рис. 64.
Эта книга у Вас есть.

Вложения:
Комментарий к файлу: Шампур -- фундаментальное понятие Дракона. Нет шампура -- нет и Дракона.
Ris.png_64_shampur.png
Ris.png_64_shampur.png [ 143.97 КБ | Просмотров: 17184 ]

Автор:  Alexey_Donskoy [ Среда, 17 Декабрь, 2008 13:44 ]
Заголовок сообщения:  Re: "Да"-"нет" в развилках

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

В случае моделирования цикла while мы получаем противоречие между двумя обоснованными эргономическими требованиями:
1) непрерываемость шампура в большом (в масштабе всей ветки);
2) непрерываемость шампура в малом (в масштабе цикла).

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

Как всегда, решать возникшее техническое противоречие можно разными путями. Классический путь - компромиссный выбор меньшего зла... Осуществить такой выбор целесообразно, например, методом экспертной оценки, взвесив все плюсы и минусы обоих вариантов. Подозреваю, что в целевой функции, описывающей критерии такого сравнения, обязательно появится множитель, характеризующий вероятность, частоту, наезженность оцениваемого пути. Если тело цикла выполняется N раз, а выход из цикла - всегда один раз, то приоритет эргономического требования №2 будет в N раз выше, поэтому следует предпочесть этот вариант. Что я и предлагаю.

Кроме всего сказанного, существует и ещё один серьёзный аргумент против варианта №1 - это существование нагруженной дуги графа в виде обратной петли (там, где идёт тело цикла). Если в цикле until мы имеем просто маршрутную стрелку, идущую только вверх (с чем вполне можно примириться), то в цикле while мы имеем много действий, целый "шампурчик". который вдруг неожиданно поворачивает и идёт обратно!
Данный аргумент полагаю более серьёзным. Так, если "наезженность пути" входит в целевую функцию с весовым коэффициентом 1, то для обратной петли я бы поставил вес не менее 3.

Существует, однако, другой путь решения технического противоречия. Кто знаком, уже наверняка среагировал на термин "техническое противоречие" и понял, что я говорю про ТРИЗ... Здесь можно коротко заметить, что решение обычно находится в другой плоскости (вренее, в другом измерении). Надо придумать не просто так, чтобы и волки были сыты, и овцы целы; но так, чтобы самого противоречия не возникало. В данном случае решением может быть другая форма отображения...

Автор:  Владимир Паронджанов [ Среда, 17 Декабрь, 2008 14:35 ]
Заголовок сообщения:  Re: "Да"-"нет" в развилках

Уважаемый Алексей Донской!

Насколько мне известно, некоторые специалисты по ТРИЗ благосклонно относятся к Дракону. Вот примеры:

Цитата:
"ТРИЗ-Конференция - 2007" Список участников и тематика выступлений
Подходы к анализу исходной ситуации (доклад к саммиту ТРИЗ 2007 года)
© Бубенцов В.Ю.,
Москва, март 2007 г.
...........................................................
Сделать рисунок или схему, описать функционирование системы. Желательно построить алгоритм, блок - схему задачи. Для построения блок-схем наиболее рационально использовать алгоритмический язык Дракон.

http://www.metodolog.ru/01103/01103.html

Цитата:
"ТРИЗ-Конференция - 2007" Список участников и тематика выступлений
ПРОБЛЕМЫ РАЗВИТИЯ ТРИЗ
Подкатилин А.В.,
Мастер ТРИЗ

Главные проблемы развития ТРИЗ:
...............................................................................
Только после освоения базовой части ТЭР
(техника эффективных решений - В.П.)
("быстрорешения") - можно приступать к основным положениям ТЭР, создающим наибольшую эффективность деятельности. Для этого нужно дополнительно изучить дополнительный материал; познакомиться с парадигмой "деятельности" и парадигмой "параллельного мышления"; освоить графический язык программирования "Дракон", и т. д

http://www.metodolog.ru/01116/01116.html

Цитата:
ТРИЗ — теория решения изобретательских задач, созданная гениальным Генрихом Сауловичем Альтшуллером.

Что такое ТРИЗ? Доведенная до технологии диалектика. Хотя сам Альтшуллер и просидел в ГУЛАГе пять лет за письмо об изобретении сверхмощной взрывчатки, сам он был абсолютно советским человеком...
КрИС - креативной информационной системой.

Георгий Петрович Щедровицкий. Не будем, право, описывать разработки этого открывателя пути в неведомое. Места не хватит. Скажем лишь об одном — Георгий Петрович создал особый язык для отображения бизнес-процессов, последовательности положений. Каждая из них записывается определенным образом. Это и дало ключ к записи бизнеса, и любых других проблемных процессов, текущих через противоречия. Стало возможным моделировать их, переводить в математические образы и уравнения. Ну, почти так, как это делала вторая Академия Гэри Сэлдона в «Основаниях» Айзека Азимова, управляя историей.

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

Уже в конце 90-х эта запись оказалась дополненной новым алгоритмическим языком «Дракон», изобретенным русским аналитиком Сергеем Параджановым. Этот язык позволяет связать сети схем через шкалу времени, нарисовав их в виде «дерева сценариев». Вот как могут пойти события в этой точке, вот - «ветви» возможных траекторий. В отличие от других алгоритмических языков, «Дракон» имеет не числовую природу. А именно графическую, изобразительную запись. Он ясен и понятен каждому, даже ребенку. Есть любопытная книга Параджанова «Как улучшить эффективность работы ума?», и мы советуем вам, братья, ее изучить. Там ведь не только «Дракон» описан, но и принципы мышления изложены.

Если соединить подход Щедровицкого, графичность Розина-Попова и язык Параджанова, то можно описать и технологизировать любой бизнес-процесс. Ведь, читатель, бизнес - это всегда конфликты между обстоятельствами, намерениями и разными «действующими лицами». А это - ключ к пониманию и прогнозированию любых проблем. Вот - первый элемент КрИС-технологии.

http://n-dimitar.hit.bg/PROEKT_RU/Human.htm

Цитата:
Дракон и ТРИЗ
Сайт посвящен вопросам составления алгоритмов, в том числе и АРИЗ, на языке Дракон (Графит- Флокс) и программированию на гибридных языках: Дракон-СИ, Дракон-Бейсик, Дракон-Пролог.

http://np-senugin2007.narod.ru/index.html

Автор:  Alexey_Donskoy [ Среда, 17 Декабрь, 2008 15:48 ]
Заголовок сообщения:  Re: "Да"-"нет" в развилках

Владимир Паронджанов писал(а):
Насколько мне известно, некоторые специалисты по ТРИЗ благосклонно относятся к Дракону.
Владимир Даниелович, поймите меня правильно, но мне совершенно не интересно, что говорят в сети о Драконе!
Мне также не интересен Дракон сам по себе.

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

Первой (и пока единственной мне знакомой) книгой, которая поднимала эти вопросы, была Ваша книга.

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

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

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

Автор:  Илья Ермаков [ Среда, 17 Декабрь, 2008 19:26 ]
Заголовок сообщения:  Re: "Да"-"нет" в развилках

Alexey_Donskoy писал(а):
Раз уж мы пишем цикл, мы подразумеваем, что тело цикла, как правило, выполняется хотя бы один раз. При этом тело цикла соответствует "главному пути" на данном участке алгоритма.
Следовательно, то, что тело цикла while болтается где-то справа, в стороне от шампура, не есть хорошо. Это сбивает с толку и может служить источником непонимания.

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

Так что при понимании цикла WHILE не как повторения действий, а как итеративного процесса, сходящегося к цели - постусловию, мне драконовский вариант кажется очень естественным.

Автор:  dvuugl [ Среда, 17 Декабрь, 2008 20:04 ]
Заголовок сообщения:  Re: "Да"-"нет" в развилках

Кстати о циклах.
Неудобен - в смысле не выделятся - вовсе не WHILE, а FOR. Если лежит он на шампуре, то в случае вложенных FOR трудно определить где конец внешнего. То есть от какого начала какой конец. И трудно как раз потому что на одной линии, без сдвига. К тому же иконы FORа мало отличаются от прямоугольника-действия. Поэтому даже циклы ДЛЯ я рисую как WHILE, которые гораздо удобнее - сдвигаются в право и резко бросаются в глаза начала и концы.

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

Автор:  Alexey_Donskoy [ Среда, 17 Декабрь, 2008 20:20 ]
Заголовок сообщения:  Re: "Да"-"нет" в развилках

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

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

Автор:  Alexey_Donskoy [ Среда, 17 Декабрь, 2008 20:35 ]
Заголовок сообщения:  Re: "Да"-"нет" в развилках

dvuugl писал(а):
Кстати о циклах.
Совершенно согласен!

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

Сформулируйте цель!

Целью может быть:
1) популяризация Дракона как такового (зачем? - а для увеличения продаж книги Паронджанова, например);
2) популяризация идей книги Паронджанова (на примере Дракона) для привлечения внимания общественности к проблемам когнитивной эргономики;
3) использование идей книги Паронджанова для дальнейших исследований и создания нового эргономичного инструмента.

Добавьте варианты, ранжируйте их по вкусу, только определите чётко свой выбор!

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

Автор:  Илья Ермаков [ Среда, 17 Декабрь, 2008 21:25 ]
Заголовок сообщения:  Re: "Да"-"нет" в развилках

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

Автор:  Alexey_Donskoy [ Среда, 17 Декабрь, 2008 21:43 ]
Заголовок сообщения:  Re: "Да"-"нет" в развилках

Илья Ермаков писал(а):
1) запретил вложенные FOR, но разрешил перебор по нескольким индексам в указанных диапазонах.
Ну-ка, ну-ка, вот хоть пример транспонирования матрицы, плз! ;)

Автор:  Илья Ермаков [ Среда, 17 Декабрь, 2008 21:55 ]
Заголовок сообщения:  Re: "Да"-"нет" в развилках

Вспомогательные алгоритмы использовать, куда выносить тот вложенный цикл, который реально нужен :-р

При этом я бы хотел иметь их в одном контексте, как локальные процедуры.
А нелокальные вообще иметь как параллельные процессы просто ))

Автор:  Alexey_Donskoy [ Среда, 17 Декабрь, 2008 22:18 ]
Заголовок сообщения:  Re: "Да"-"нет" в развилках

Локальные процедуры - в нотации Дракона? Где-то парадоксально звучит! ;)

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

Но выносить всё, что ни попадя, в процедуры - тоже не есть правильно. Вернее, очень даже неправильно - неэргономично. Поскольку рвётся та самая симультанность!

Над объектом (матрица) выполняем целостную операцию (транспонирование). Если хотим видеть алгоритм операции, то оба цикла обязаны быть в наличии! Нельзя делать так, чтобы половина операции была здесь, а дркгая половина - в процедуре.

Автор:  Илья Ермаков [ Среда, 17 Декабрь, 2008 22:42 ]
Заголовок сообщения:  Re: "Да"-"нет" в развилках

Какой именно вариант транспонирования Вы имеете в виду?
По-моему, в большинстве случаев подойдёт с порождением новой матрицы. И в чём проблема?

FOR i = (0, w-1), j = (0, h-1) DO
newMat[i, j] := oldMat[j, i]
END

(если с усталости чего не напутал... сто лет матрицы не трогал :) )

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