DRAKON.SU

Текущее время: Пятница, 16 Ноябрь, 2018 00:48

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




Начать новую тему Ответить на тему  [ Сообщений: 84 ]  На страницу Пред.  1, 2, 3, 4, 5  След.
Автор Сообщение
СообщениеДобавлено: Четверг, 15 Февраль, 2018 10:25 

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

Olegar, более существенное замечание:

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

Потом, странный у Вас алгоритм! В алгоритме нигде не видно вычисления и присваивания значений переменным a1, b1.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 16 Февраль, 2018 01:38 

Зарегистрирован: Четверг, 02 Июль, 2015 13:47
Сообщения: 35
Владимир Данилович, спасибо, сделал стрелку вызова обходной.

LKom, спасибо за замечания.
Постарался усилить аспект данных и повысить понятность: https://www.youtube.com/watch?v=tgo0cUoaAV0
Aргументы и их значения показаны в контейнере Arguments. Возможно, икона Параметры тоже бы неплохо смотрелась.

Из википедии эти картинки убрали с аргументом: "Adds nothing useful: a reader who may have difficulty with the text in the body would not be helped by these flow charts."
Перевод: "Не добавляет ничего полезного: читателю, который не понял, что написано в статье википедии, эти флоучарты не помогут."


Вложения:
euclidrec OG 20180215.gif
euclidrec OG 20180215.gif [ 1.46 МБ | Просмотров: 1502 ]
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 18 Февраль, 2018 20:46 

Зарегистрирован: Понедельник, 14 Декабрь, 2015 19:18
Сообщения: 111
Рекурсию ясно только анимацией можно показать?

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

Неужели моя идея в легком понимании алгоритмов с помощью ДРАКОН схем терпит крах?
Я пока не знаю как быть.
Может быть, у кого-нибудь есть ответы, предложения?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 18 Февраль, 2018 22:44 

Зарегистрирован: Среда, 03 Май, 2017 09:55
Сообщения: 189
Владимир Невзоров писал(а):
Может быть, у кого-нибудь есть ответы?

Есть.

Владимир Невзоров писал(а):
Неужели моя идея в легком понимании алгоритмов с помощью ДРАКОН схем терпит крах?

Да. Некоторые алгоритмы Дракон лишь запутывает, в чём вы и убедились.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 19 Февраль, 2018 09:07 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 3806
Откуда: Москва
Владимир Ситников писал(а):
Некоторые алгоритмы Дракон лишь запутывает, в чём вы и убедились.
Это не так.
Мне неизвестны алгоритмы на языке ДРАКОН, которые запутывают.

Прошу предъявить "запутывающие" алгоритмы и я помогу их распутать.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 19 Февраль, 2018 09:19 

Зарегистрирован: Суббота, 16 Февраль, 2008 07:58
Сообщения: 231
Откуда: Россия, Стерлитамак
Когда я пробовал для себя понять какую-то не очень сложную рекурсивную функцию с помощью дракона, то понял, что дракон мне не помогает. Хотя возможно, на тот момент, мне просто было сложнее понимать рекурсивные функции, чем обычные, скорее всего потому, что мало с ними сталкивался.

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 19 Февраль, 2018 09:35 

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

Как я понимаю, речь идет об обучении начинающих.

Начинающим надо давать оба представления: и текст, и графику (дракон-схему).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 19 Февраль, 2018 11:03 
Аватара пользователя

Зарегистрирован: Вторник, 04 Октябрь, 2011 17:45
Сообщения: 472
Рекурсия — не для слабаков.
Не имеет значения, в ДРАКОНе или не в ДРАКОНе.

Рекурсию увидеть трудно. Для того, чтобы увидеть рекурсию, нужно:
1. держать в уме название текущего алгоритма
2. выискивать это название в тексте икон (или в структурном тексте).
Это серьёзная нагрузка на мозг в добавок к собственно чтению алгоритма.

К счастью, есть простой выход:
Помечать рекурсивные вызовы. Например, жирным шрифтом. Как здесь:
https://drakon-editor.com/ide/doc/examples/61
Или можно цветом.
И, конечно, это надо делать автоматически.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 19 Февраль, 2018 11:14 
Аватара пользователя

Зарегистрирован: Вторник, 04 Октябрь, 2011 17:45
Сообщения: 472
Замечание по схеме Олега Гарипова
Текст в иконе вызова процедуры плохо читается:
Код:
Result = Call
"Compute GCD"
with arguments
a2, b2


Как быть?
1. Устранить незначащие слова (слова-паразиты): Call, with arguments
2. Внести графическую струкуру внутрь иконы.

Вот так:
Код:
Result = Compute GCD
    a2
    b2


Или так:
Код:
Result = Compute GCD
    b1
    a1 mod b1


Безжалостно истребляем:
- Незначащие слова
- Запятые и скобки

Добавляем:
- Конец строки после названия процедуры
- Конец строки после каждого аргумента
- Отступы для аргументов


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 19 Февраль, 2018 11:44 

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 217
Откуда: Казань
Как вариант, внутри вызова рекурсивной функции можно не текст написать, а нарисовать тот же алгоритм, но только мелко. И будет видно, что вызов рекурсивный.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 19 Февраль, 2018 12:16 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 3806
Откуда: Москва
Степан Митькин писал(а):
Рекурсия — не для слабаков.
Не имеет значения, в ДРАКОНе или не в ДРАКОНе.

Рекурсию увидеть трудно. Для того, чтобы увидеть рекурсию, нужно:
1. держать в уме название текущего алгоритма
2. выискивать это название в тексте икон (или в структурном тексте).
Это серьёзная нагрузка на мозг в добавок к собственно чтению алгоритма.

К счастью, есть простой выход:
Помечать рекурсивные вызовы. Например, жирным шрифтом. Как здесь:
https://drakon-editor.com/ide/doc/examples/61
Или можно цветом.
И, конечно, это надо делать автоматически.
Степан, я согласен с вами, что рекурсию увидеть трудно и что есть простой выход.

Я бы предложил такой выход. Справа от Вашей иконы Вставка с жирным шрифтом нарисовать выноску (callout), с жалом, направленным на икону Вставка.

А внутри выноски написать:
Цитата:
Это рекурсивный вызов
или
Цитата:
Это вызов рекурсивной функции
Или что-нибудь в таком роде.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 19 Февраль, 2018 13:11 

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 217
Откуда: Казань
Многие наверно знают, что любой рекурсивный алгоритм можно представить в виде циклического алгоритма с использованием стека. По сути реализация рекурсии в языках программирования - это скрытое от программиста использование стека. Если использовать варианты алгоритмов использующих цикл, а не рекурсию, то проблем с отображением алгоритма не возникает и его можно отобразить используя существующие элементы Дракон-схем, без необходимости добавления какие-то новых элементов (различных стрелочек, жирных шрифтов, анимации и т.д.).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 19 Февраль, 2018 13:36 

Зарегистрирован: Суббота, 16 Февраль, 2008 07:58
Сообщения: 231
Откуда: Россия, Стерлитамак
Rifat писал(а):
Многие наверно знают, что любой рекурсивный алгоритм можно представить в виде циклического алгоритма с использованием стека.

Можно, но очень часто, проще работать с рекурсивной функцией, и по объему кода она может быть в разы меньше, и, соответственно, доработать проще


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 19 Февраль, 2018 14:10 
Аватара пользователя

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 953
Откуда: Россия, Чебоксары
Степан Митькин писал(а):
Помечать рекурсивные вызовы.
Опять вы крутитесь около частного случая.
Рекурсия - вообще штука не особо интересная (и довольно лёгкая для понимания, чтобы здесь столько копий ломать).
Кстати, можете заметить, что использование рекурсивных алгоритмов более характерно для "вычислительных алгоритмов". :wink:

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 19 Февраль, 2018 14:39 
Аватара пользователя

Зарегистрирован: Вторник, 04 Октябрь, 2011 17:45
Сообщения: 472
adva писал(а):
Rifat писал(а):
Многие наверно знают, что любой рекурсивный алгоритм можно представить в виде циклического алгоритма с использованием стека.

Можно, но очень часто, проще работать с рекурсивной функцией, и по объему кода она может быть в разы меньше, и, соответственно, доработать проще

Важно не забывать, что предмет обсуждения — как изобразить рекурсию.
Любить рекурсию или нет — это другой вопрос, и другое обсуждение. (Лично я рекурсию не люблю, но регулярно употребляю.)
Задача поставлена так: выделить рекурсию, чтобы она бросалась в глаза.
Методы решения:
- жирный шрифт
- цвета
- выноска


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 19 Февраль, 2018 14:43 
Аватара пользователя

Зарегистрирован: Вторник, 04 Октябрь, 2011 17:45
Сообщения: 472
Alexey_Donskoy писал(а):
В общем же случае рекурсия бывает и косвенной, и её вызов просто так не пометишь.

Косвенная рекурсия — она сволочь, да.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 19 Февраль, 2018 18:01 

Зарегистрирован: Понедельник, 14 Декабрь, 2015 19:18
Сообщения: 111
Новая схема.

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

И, конечно же, пожелания и предложения всегда приветствуются! :)
Вложение:
Quick sort_recursion.png
Quick sort_recursion.png [ 744.08 КБ | Просмотров: 1400 ]


Что было сделано.

1) Убрал первую ветку.
В ней лишь инициализировался индекс разбиения.
Из плюсов: стало меньше визуального мусора.

Ранее я рассказывал про области видимости/жизни переменных в С++.
И что в соответствие с этими понятиями как бы вынес переменную индекс разбиения за основные ветки алгоритма, чтобы жила подольше.
Сейчас опустил эту философию.
Переменная сейчас нужна в двух ветках:
1) В первой она инициализируется, затем изменяется.
2) Во второй используется.
Будем считать, что переменная живет и по исходу выполнения алгоритма из 1ой ветки.

2) Выделил глаголы
Вложение:
Преобразование иконки.png
Преобразование иконки.png [ 4.22 КБ | Просмотров: 1400 ]

Где-то Владимир Паронджанов говорил об использование глаголов в алгоритме.
Здесь я идею развил в очищение ключевого слова - глагола/действия - от объекта действия.
Вроде бы не сильное изменение на одной иконе, но, если посмотреть на весь алгоритм, то, мне кажется, лучше видно что происходит.

3) Показал рекурсию.
Вложение:
Варианты рекурсии.png
Варианты рекурсии.png [ 17.47 КБ | Просмотров: 1400 ]

Решил скомбинировать решение из советов. Сразу же приглянулась икона "Полка". А почему бы и... да? :D
Показал два варианта исполнения.
Достаточно ли понятен вызов рекурсии с передачей аргументов?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 23 Февраль, 2018 07:45 

Зарегистрирован: Понедельник, 14 Декабрь, 2015 19:18
Сообщения: 111
Хотелось бы получить обратную связь по реализации.
У кого-нибудь есть мысли по схеме - предложения/критика/пожелания?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 23 Февраль, 2018 17:59 

Зарегистрирован: Понедельник, 25 Июнь, 2012 17:26
Сообщения: 213
"Обратную связь" здесь ожидают с 2009 г. -- присоединяйтесь в очередь :wink: :
http://forum.drakon.su/viewtopic.php?f=62&t=2026

Имхо, если стараться придерживаться принципа отражения "маршрутной семантики", то необходимо каким-то способом выделять и заголовок алгоритма (как, напр., в функциональных языках по мотивам ML, где рекурсивные функции могут быть отмечены явно: для "let f(x)=..." добавляется "rec" --> "let rec f(x)=...").


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 24 Февраль, 2018 14:18 

Зарегистрирован: Понедельник, 14 Декабрь, 2015 19:18
Сообщения: 111
PSV100 писал(а):
"Обратную связь" здесь ожидают с 2009 г. -- присоединяйтесь в очередь :wink: :
http://forum.drakon.su/viewtopic.php?f=62&t=2026

Попытка нарисовать рекурсию.
PSV100, спасибо за предметную ссылку! Сейчас кратко просмотрел, позже вдумчивей прочитаю.
Это тот самый материал, который нужен в данный момент, когда мы обсуждаем как показывать более сложные алгоритмы.

PSV100 писал(а):
Имхо, если стараться придерживаться принципа отражения "маршрутной семантики", то необходимо каким-то способом выделять и заголовок алгоритма (как, напр., в функциональных языках по мотивам ML, где рекурсивные функции могут быть отмечены явно: для "let f(x)=..." добавляется "rec" --> "let rec f(x)=...").

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


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

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


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

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


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

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