DRAKON.SU

Текущее время: Четверг, 28 Март, 2024 11:38

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




Начать новую тему Ответить на тему  [ Сообщений: 172 ]  На страницу Пред.  1 ... 5, 6, 7, 8, 9  След.
Автор Сообщение
СообщениеДобавлено: Среда, 30 Ноябрь, 2016 00:22 
Аватара пользователя

Зарегистрирован: Среда, 09 Ноябрь, 2016 00:33
Сообщения: 122
Откуда: Tallinn
прошу прощения, что вмешиваюсь, но не мог бы кто-нибудь мне объяснить - что изображено на данном участке слепыша? у меня как то мозг сломался при попытке представить рабочий алгоритм превращенный в код, разве не должны иконы начала и конца цикла быть на одном шампуре?
кстати если тут действительно "возможный, но очень странный код", то получается слепыш ДРАКОНа позволяет мнгновенно делать ревью качества кода, что недоступно было бы будь представлена реализация алгоритма в целевом языке, а тут заняло 5 секунд


Вложения:
strange_drakon_part.png
strange_drakon_part.png [ 12.75 КБ | Просмотров: 13352 ]
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 30 Ноябрь, 2016 09:30 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5846
Откуда: Москва
Игорь, спасибо за вопрос.
Игорь Мазница писал(а):
прошу прощения, что вмешиваюсь, но не мог бы кто-нибудь мне объяснить - что изображено на данном участке слепыша? у меня как то мозг сломался при попытке представить рабочий алгоритм превращенный в код, разве не должны иконы начала и конца цикла быть на одном шампуре?
Вы правы. Оно должны быть на одной вертикали. Но тогда возникает трудность.

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 30 Ноябрь, 2016 10:24 
Аватара пользователя

Зарегистрирован: Среда, 09 Ноябрь, 2016 00:33
Сообщения: 122
Откуда: Tallinn
разнесенный цикл смотрится очень странно, неэргономично совершенно, настораживает сам факт возможности продолжения работы без встречи конца цикла, перенос такого алгоритма на языки которые делают какие то действия в случае встречи конца цикла и автогенерация кода, скажем для FORTH приведет к утечке памяти


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 30 Ноябрь, 2016 10:41 

Зарегистрирован: Среда, 07 Январь, 2015 14:53
Сообщения: 1356
Здесь имеем проблему блока ОбычногоЦикла. Блок ОбычныйЦикл не имеет аналога в языках программирования, образован использованием оператора Goto. В блоке ОбычныйЦикл сложно выйти из тела цикла, т.к. тело цикла справа окружено петлей цикла.

В ИС Дракон рекомендуется заменять блок ОбычныйЦикл блоком ЦиклДЛЯ, при этом используется из ГОСТ 19.701.90 определение икон как ГраницыЦикла. Блок ЦиклДЛЯ используется для представления циклов вида For, Loop, While и Repeat. Проблема снимается, т.к. нет окружающей петли. Изображение циклов более функционально и максимально приближено к определениям в языках программирования.

Игорь Мазница, Ваша схема, к сожалению нет идентификации икон (нумерации), будет выглядеть так:
Вложение:
ВИСДракон.png


Последний раз редактировалось LKom Среда, 30 Ноябрь, 2016 11:50, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 30 Ноябрь, 2016 10:58 
Аватара пользователя

Зарегистрирован: Среда, 09 Ноябрь, 2016 00:33
Сообщения: 122
Откуда: Tallinn
такая диаграмма более по человечески выглядит имхо


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 30 Ноябрь, 2016 11:32 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5846
Откуда: Москва
Игорь Мазница писал(а):
разнесенный цикл смотрится очень странно, неэргономично совершенно, настораживает сам факт возможности продолжения работы без встречи конца цикла, перенос такого алгоритма на языки которые делают какие то действия в случае встречи конца цикла и автогенерация кода, скажем для FORTH приведет к утечке памяти

Я называю эту проблему "досрочный выход из цикла".

Цикл имеет только один вход. А сколько выходов?
В языке ДРАКОН разрешается не один выход (по Дейкстре), а несколько.
Я называю их так:
— основной выход из цикла (он один),
— досрочные выходы из цикла (их может быть несколько).

Досрочный выход из цикла служит для того, чтобы обойти, миновать ОСНОВНОЙ конец цикла. Такой прием используется часто, как показал LKom.
Здесь ДРАКОН повторяет обычную практику.
Игорь, с вашей синей фразой я не согласен. С утечкой памяти тоже.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 30 Ноябрь, 2016 11:35 
Аватара пользователя

Зарегистрирован: Среда, 09 Ноябрь, 2016 00:33
Сообщения: 122
Откуда: Tallinn
LKom привел аналог диаграммы на одном шампуре, выход из цикла есть во всех языках где есть циклы, вопрос в том что нехорошо эргономически когда можно конец цикла закопать так что он станет неочевиден человеку, задача ДРАКОН дружелюбные алгоритмы всежe


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 30 Ноябрь, 2016 11:51 

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

Игорь, вы предлагаете запретить это вариант. Хорошо, давайте запретим.
Попробуйте нарисовать схему по-своему, чтобы она вам нравилась.
И покажите вашу схему.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 30 Ноябрь, 2016 11:59 
Аватара пользователя

Зарегистрирован: Среда, 09 Ноябрь, 2016 00:33
Сообщения: 122
Откуда: Tallinn
тут проблема то не в схеме, схема это "только инструмент в руках художника", я бы переделал сам алгоритм, так как схема показывает что что то в нем не так, а это и есть большой плюс ДРАКОН схемы
но так как задача не только описательная, но и создавать с помощью ДРАКОН алгоритмы, то я бы строго запретил такое разнесение частей конструкции, так как это заставит программиста обдумать более высокоуровневое поведение решения и исправить его


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 30 Ноябрь, 2016 13:17 
Аватара пользователя

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 1098
Откуда: Россия, Чебоксары
Игорь Мазница писал(а):
разнесенный цикл смотрится очень странно, неэргономично совершенно, настораживает сам факт возможности продолжения работы без встречи конца цикла
Верно!
Только подчеркнём ещё раз, что речь идёт именно о когнитивно-эргономической составляющей.
Так делать категорически нельзя.

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

Цитата:
автогенерация кода, скажем для FORTH приведет к утечке памяти
Это не проблема. Мне было бы очень интересно взглянуть на Форт-код для данного примера, который бы это сделал! ;)
На самом деле кодогенератор здесь вынужден быть интеллектуальным, чтобы отследить цикл и ситуацию выхода из цикла, чтобы поставить в нужном месте фортовский leave, который и выполнит все нужные действия по модификации стека.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 30 Ноябрь, 2016 17:14 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5846
Откуда: Москва
Игорь Мазница писал(а):
тут проблема то не в схеме, схема это "только инструмент в руках художника", я бы переделал сам алгоритм, так как схема показывает что что то в нем не так, а это и есть большой плюс ДРАКОН схемы
но так как задача не только описательная, но и создавать с помощью ДРАКОН алгоритмы, то я бы строго запретил такое разнесение частей конструкции, так как это заставит программиста обдумать более высокоуровневое поведение решения и исправить его
Игорь, мне кажется, вы смешиваете в одну кучу две разные вещи: эргономику и математику .
Их надо четко различать. Так, чтобы от зубов отскакивало.

Математика касается эквивалентности алгоритмов.
Являются ли два алгоритма эквивалентными? Или нет?
Является ли алгоритм правильным, пригодным для кодирования? Или нет?

Эргономика касается способа нарисования алгоритма. Она никак не влияет на правильность алгоритма.

У вас получается, что неэргономичное рисование ВЛИЯЕТ на правильность алгоритма.
Что оно может превратить правильный алгоритм в неправильный.
Это неверно.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 01 Декабрь, 2016 20:30 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5846
Откуда: Москва
LKom писал(а):
В блоке ОбычныйЦикл сложно выйти из тела цикла, т.к. тело цикла справа окружено петлей цикла.

В ИС Дракон рекомендуется заменять блок ОбычныйЦикл блоком ЦиклДЛЯ, при этом используется из ГОСТ 19.701.90 определение икон как ГраницыЦикла. Блок ЦиклДЛЯ используется для представления циклов вида For, Loop, While и Repeat. Проблема снимается, т.к. нет окружающей петли. Изображение циклов более функционально и максимально приближено к определениям в языках программирования.
Не могу согласиться.

1. Язык ДРАКОН предназначен для замены давно устаревшего ГОСТ 19.701.90.

2. Замена цикла со стрелкой на цикл ДЛЯ нужна очень редко.

Цитата:
Проблема снимается, т.к. нет окружающей петли.
Проблема снимается для очень редких случаев. Во всех остальных случаях проблема не снимается, а наоборот создается, так как вместо ЛЕГКОГО для понимания цикла со стрелкой предлается использовать ТРУДНЫЙ для понимания цикл ДЛЯ.

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

В книге для врачей я полностью исключил из визуального алфавита цикл ДЛЯ (для медиков) и ни разу им не воспользовался.
Почему? Ответ прост — чтобы не пугать народ.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 01 Декабрь, 2016 21:27 
Аватара пользователя

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 1098
Откуда: Россия, Чебоксары
Владимир Паронджанов писал(а):
проблема не снимается, а наоборот создается, так как вместо ЛЕГКОГО для понимания цикла со стрелкой предлается использовать ТРУДНЫЙ для понимания цикл ДЛЯ.
Кстати, силуэт, выбор и даже обычная развилка не сильно легче в понимании, чем цикл ДЛЯ.

И думается мне, что вы совершенно напрасно акцентируете внимание на самом первом этапе изучения языка.

А после первоначального освоения следует работа. Которую тоже (и в первую очередь!) необходимо оптимизировать.
Попробуйте оценить, какую долю занимает первоначальное изучение во всей продолжительности работы с инструментом!
Соответственно, настоятельно предлагаю поменять приоритеты.

Чем цикл ДЛЯ лучше обычного со стрелками?

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

2) Он подчёркивает принципиальную алгоритмическую особенность - многократное повторение.

3) Досрочный выход из цикла резко выделяется визуально и идентифицируется однозначно (симультанным восприятием).

4) Фигуры начала и конца цикла вполне пригодны для размещения пред- и постусловий.

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 04 Декабрь, 2016 08:31 

Зарегистрирован: Среда, 07 Январь, 2015 14:53
Сообщения: 1356
Изображение

Владимир Даниелович,

Нижняя граница блоков ОбычныйЦикл и ПереключающийЦикл явно не обозначается.
Где находится нижняя граница цикла?
Как ее находить при наличии в цикле икон Вопрос и/или блоков Переключатель?
Сколько может быть нижних границ цикла в цикле?

http://forum.drakon.su/viewtopic.php?p=99404#p99404
Владимир Паронджанов писал(а):
У вас получается, что неэргономичное рисование ВЛИЯЕТ на правильность алгоритма.
Что оно может превратить правильный алгоритм в неправильный.
Это неверно.
В аргументации использованы понятия "Правильный алгоритм" и "Неправильный алгоритм", вероятно в смысле графического начертания.

Какое и есть ли определение правильного алгоритма? Желательно строгое формальное определение.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 04 Декабрь, 2016 10:37 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5846
Откуда: Москва
LKom писал(а):
Нижняя граница блоков ОбычныйЦикл и ПереключающийЦикл явно не обозначается.
Где находится нижняя граница цикла?
Как ее находить при наличии в цикле икон Вопрос и/или блоков Переключатель?
Сколько может быть нижних границ цикла в цикле?
Очень хороший и важный вопрос. Давайте подумаем вместе.

Предположим, что нижняя граница цикла со стрелкой ДЕЙСТВИТЕЛЬНО совершенно отсутствует, что мешает безошибочному программированию.
В этом случае придется ввести явное обозначение для нижней границы такого цикла. Например, в виде маленького черного (или полого) квадрата.
Таким образом, проблема отсутствия нижней границы будет решена.

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

Мой аргумент состоит в том, что нижняя граница цикла со стрелкой указывается ПО ПОСТРОЕНИЮ.

Пример приведу в следующем сообщении.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 04 Декабрь, 2016 12:08 

Зарегистрирован: Среда, 07 Январь, 2015 14:53
Сообщения: 1356
Не увлекайтесь, т.к. лучше - враг хорошего.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 04 Декабрь, 2016 12:23 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5846
Откуда: Москва
Вот пример. Рисунок 115 из моей книги "Почему врачи убивают..."
http://drakon.su/_media/1_pochemu_vrach ... entov_.pdf
Прочитайте шесть страниц 251-256.
Там подробно (по шагам) показано построение схемы, содержащей вложенные циклы со стрелкой.

Вложение:
Рис. 115. Строим Примитив по Образцу .png
Рис. 115. Строим Примитив по Образцу .png [ 9.63 КБ | Просмотров: 13251 ]


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

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

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

Давайте сначала обсудим данный конкретный случай.
А затем, если возникнет необходимость, будем двигаться дальше.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 04 Декабрь, 2016 14:33 

Зарегистрирован: Среда, 07 Январь, 2015 14:53
Сообщения: 1356
Драконовский ОбычныйЦикл вообще же не является конструкцией цикла.
А. Донской дал исчерпывающий анализ:
http://forum.drakon.su/viewtopic.php?p=99403#p99403
Alexey_Donskoy писал(а):
И да, я согласен с мыслью LKom о том, что цикл целесообразно оформлять специальной конструкцией, а не композицией простых элементов со стрелкой назад.
Т.е., это фрагмент алгоритма зацикленный с помощью лианы пересаженной назад.

В Драконе А. Бразовского нет операции вставить "Обычный цикл", имеется операция вставить "Вопрос". При этом предлагается лиану от правого выхода иконы Вопрос присоединить в выбранное место.
Также нет операции вставить "ПереключающийЦикл" и "Цикл ЖДАТЬ".

В ИС Дракон ветвь от правого вывода иконы Вопрос можно пересадить и в зависимости от выбранного места присоединения возможно образование зацикленного фрагмента алгоритма.
----
Владимир Даниелович,
не корректно говорить о том, что в приведенном Вами рисунке есть внутренний цикл. Лиану со 2-и стрелкой можно пересадить на нижний горизонтальный отрезок лианы от 1-й стрелки. В результате алгоритм не изменится, в рисунке будет одна стрелка, нижний горизонтальный отрезок будет горизонтальной линией объединения.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 04 Декабрь, 2016 17:01 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5846
Откуда: Москва
LKom писал(а):
Драконовский ОбычныйЦикл вообще же не является конструкцией цикла.
Не могу согласиться. Макроикона "Обычный цикл" содержит две валентные точки, из которых одна — критическая валентная точка. Заполните критическую валентную точку — и вы получите полноценный цикл.

LKom писал(а):
А. Донской дал исчерпывающий анализ:
http://forum.drakon.su/viewtopic.php?p=99403#p99403
Alexey_Donskoy писал(а):
И да, я согласен с мыслью LKom о том, что цикл целесообразно оформлять специальной конструкцией, а не композицией простых элементов со стрелкой назад.
Не могу согласиться. Здесь нет композиции простых элементов. Здесь есть макроикона "Обычный цикл". Нельзя ее уродовать.

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

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

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

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

LKom писал(а):
В ИС Дракон ветвь от правого вывода иконы Вопрос можно пересадить и в зависимости от выбранного места присоединения возможно образование зацикленного фрагмента алгоритма.
Повторяю, так делать нельзя. Это ошибка. Недопустимо отрывать стрелку цикла от своего места.

LKom писал(а):
Владимир Даниелович,
не корректно говорить о том, что в приведенном Вами рисунке есть внутренний цикл. Лиану со 2-и стрелкой можно пересадить на нижний горизонтальный отрезок лианы от 1-й стрелки. В результате алгоритм не изменится, в рисунке будет одна стрелка, нижний горизонтальный отрезок будет горизонтальной линией объединения.
Имеет место та же самая ошибка. Стрелка цикла — это не лиана. Ее нельзя отрывать и пересаживать в другое место.

===================
Может создаться впечатление, что я говорю о большом числе ошибок, нарушающих правила языка ДРАКОН.
Это не так. Речь идет об одной-единственной ошибке.
Нельзя отрывать стрелку цикла от своего места (показанного в макроиконе "Обычный цикл").
Не портите макроикону Обычный цикл, не уродуйте ее — и все будет в порядке.
Ну и, конечно, надо строго соблюдать правила заполнения критических и нейтральных валентных точек.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 04 Декабрь, 2016 17:41 

Зарегистрирован: Среда, 07 Январь, 2015 14:53
Сообщения: 1356
Я нигде не употребил термин "макроикона", есть общеупотребляемый термин "блок".

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

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

Мы начали говорить о простом, о "нижней границе цикла", а Вы все уводите в сторону.
Как бы вернуться к "нижней границе цикла"?


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

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


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

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


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

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