DRAKON.SU https://forum.drakon.su/ |
|
Базовые компьютерные алгоритмы https://forum.drakon.su/viewtopic.php?f=78&t=6124 |
Страница 4 из 5 |
Автор: | LKom [ Четверг, 15 Февраль, 2018 10:25 ] |
Заголовок сообщения: | Re: Базовые компьютерные алгоритмы |
Olegar, более существенное замечание: к иконе Заголовок необходимо присоединить икону Параметры. Параметры, возможно, обязательный атрибут рекурсивной функции. К иконе Вставка так же надо присоединить икону Параметры. Потом, странный у Вас алгоритм! В алгоритме нигде не видно вычисления и присваивания значений переменным a1, b1. |
Автор: | Olegar [ Пятница, 16 Февраль, 2018 01:38 ] | ||
Заголовок сообщения: | Re: Базовые компьютерные алгоритмы | ||
Владимир Данилович, спасибо, сделал стрелку вызова обходной. 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." Перевод: "Не добавляет ничего полезного: читателю, который не понял, что написано в статье википедии, эти флоучарты не помогут."
|
Автор: | Владимир Невзоров [ Воскресенье, 18 Февраль, 2018 20:46 ] |
Заголовок сообщения: | Re: Базовые компьютерные алгоритмы |
Рекурсию ясно только анимацией можно показать? Как же быть, если ответ "да"? Я хотел дальше и сортировку слиянием показывать и другие вещи. Что получается - отказываться от рекурсивной версии реализации, потому что стандартными методами в ДРАКОН схеме, презентующей рекурсию можно быстро запутаться? Неужели моя идея в легком понимании алгоритмов с помощью ДРАКОН схем терпит крах? Я пока не знаю как быть. Может быть, у кого-нибудь есть ответы, предложения? |
Автор: | Владимир Ситников [ Воскресенье, 18 Февраль, 2018 22:44 ] |
Заголовок сообщения: | Re: Базовые компьютерные алгоритмы |
Владимир Невзоров писал(а): Может быть, у кого-нибудь есть ответы? Есть. Владимир Невзоров писал(а): Неужели моя идея в легком понимании алгоритмов с помощью ДРАКОН схем терпит крах? Да. Некоторые алгоритмы Дракон лишь запутывает, в чём вы и убедились. |
Автор: | Владимир Паронджанов [ Понедельник, 19 Февраль, 2018 09:07 ] |
Заголовок сообщения: | Re: Базовые компьютерные алгоритмы |
Владимир Ситников писал(а): Некоторые алгоритмы Дракон лишь запутывает, в чём вы и убедились. Это не так. Мне неизвестны алгоритмы на языке ДРАКОН, которые запутывают. Прошу предъявить "запутывающие" алгоритмы и я помогу их распутать. |
Автор: | adva [ Понедельник, 19 Февраль, 2018 09:19 ] |
Заголовок сообщения: | Re: Базовые компьютерные алгоритмы |
Когда я пробовал для себя понять какую-то не очень сложную рекурсивную функцию с помощью дракона, то понял, что дракон мне не помогает. Хотя возможно, на тот момент, мне просто было сложнее понимать рекурсивные функции, чем обычные, скорее всего потому, что мало с ними сталкивался. Думаю, рекурсии, а может и вообще функции, лучше выражать текстом, Илья вроде тоже акцентировался на том, что дракон более подходит для управляющих алгоритмов. Я кстати, когда использовал дракон, по большей части "прояснял" для себя именно взаимодействующие (управляющие) алгоритмы. |
Автор: | Владимир Паронджанов [ Понедельник, 19 Февраль, 2018 09:35 ] |
Заголовок сообщения: | Re: Базовые компьютерные алгоритмы |
adva писал(а): Думаю, рекурсии, а может и вообще функции, лучше выражать текстом Зачем противопоставлять текст и графику?Как я понимаю, речь идет об обучении начинающих. Начинающим надо давать оба представления: и текст, и графику (дракон-схему). |
Автор: | Степан Митькин [ Понедельник, 19 Февраль, 2018 11:03 ] |
Заголовок сообщения: | Re: Базовые компьютерные алгоритмы |
Рекурсия — не для слабаков. Не имеет значения, в ДРАКОНе или не в ДРАКОНе. Рекурсию увидеть трудно. Для того, чтобы увидеть рекурсию, нужно: 1. держать в уме название текущего алгоритма 2. выискивать это название в тексте икон (или в структурном тексте). Это серьёзная нагрузка на мозг в добавок к собственно чтению алгоритма. К счастью, есть простой выход: Помечать рекурсивные вызовы. Например, жирным шрифтом. Как здесь: https://drakon-editor.com/ide/doc/examples/61 Или можно цветом. И, конечно, это надо делать автоматически. |
Автор: | Степан Митькин [ Понедельник, 19 Февраль, 2018 11:14 ] |
Заголовок сообщения: | Re: Базовые компьютерные алгоритмы |
Замечание по схеме Олега Гарипова Текст в иконе вызова процедуры плохо читается: Код: 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 Безжалостно истребляем: - Незначащие слова - Запятые и скобки Добавляем: - Конец строки после названия процедуры - Конец строки после каждого аргумента - Отступы для аргументов |
Автор: | Rifat [ Понедельник, 19 Февраль, 2018 11:44 ] |
Заголовок сообщения: | Re: Базовые компьютерные алгоритмы |
Как вариант, внутри вызова рекурсивной функции можно не текст написать, а нарисовать тот же алгоритм, но только мелко. И будет видно, что вызов рекурсивный. |
Автор: | Владимир Паронджанов [ Понедельник, 19 Февраль, 2018 12:16 ] |
Заголовок сообщения: | Re: Базовые компьютерные алгоритмы |
Степан Митькин писал(а): Рекурсия — не для слабаков. Степан, я согласен с вами, что рекурсию увидеть трудно и что есть простой выход.Не имеет значения, в ДРАКОНе или не в ДРАКОНе. Рекурсию увидеть трудно. Для того, чтобы увидеть рекурсию, нужно: 1. держать в уме название текущего алгоритма 2. выискивать это название в тексте икон (или в структурном тексте). Это серьёзная нагрузка на мозг в добавок к собственно чтению алгоритма. К счастью, есть простой выход: Помечать рекурсивные вызовы. Например, жирным шрифтом. Как здесь: https://drakon-editor.com/ide/doc/examples/61 Или можно цветом. И, конечно, это надо делать автоматически. Я бы предложил такой выход. Справа от Вашей иконы Вставка с жирным шрифтом нарисовать выноску (callout), с жалом, направленным на икону Вставка. А внутри выноски написать: Цитата: Это рекурсивный вызов или Цитата: Это вызов рекурсивной функции Или что-нибудь в таком роде.
|
Автор: | Rifat [ Понедельник, 19 Февраль, 2018 13:11 ] |
Заголовок сообщения: | Re: Базовые компьютерные алгоритмы |
Многие наверно знают, что любой рекурсивный алгоритм можно представить в виде циклического алгоритма с использованием стека. По сути реализация рекурсии в языках программирования - это скрытое от программиста использование стека. Если использовать варианты алгоритмов использующих цикл, а не рекурсию, то проблем с отображением алгоритма не возникает и его можно отобразить используя существующие элементы Дракон-схем, без необходимости добавления какие-то новых элементов (различных стрелочек, жирных шрифтов, анимации и т.д.). |
Автор: | adva [ Понедельник, 19 Февраль, 2018 13:36 ] |
Заголовок сообщения: | Re: Базовые компьютерные алгоритмы |
Rifat писал(а): Многие наверно знают, что любой рекурсивный алгоритм можно представить в виде циклического алгоритма с использованием стека. Можно, но очень часто, проще работать с рекурсивной функцией, и по объему кода она может быть в разы меньше, и, соответственно, доработать проще |
Автор: | Alexey_Donskoy [ Понедельник, 19 Февраль, 2018 14:10 ] |
Заголовок сообщения: | Re: Базовые компьютерные алгоритмы |
Степан Митькин писал(а): Помечать рекурсивные вызовы. Опять вы крутитесь около частного случая.Рекурсия - вообще штука не особо интересная (и довольно лёгкая для понимания, чтобы здесь столько копий ломать). Кстати, можете заметить, что использование рекурсивных алгоритмов более характерно для "вычислительных алгоритмов". В общем же случае рекурсия бывает и косвенной, и её вызов просто так не пометишь. А для "управляющих алгоритмов" гораздо большую проблему представляет потенциальная реентерабельность процедур, особенно значимая в многопоточных системах. Вот здесь уже целый арсенал типовых средств и приёмов: от локальных переменных в стеке для обеспечения реентерабельности до высокоуровневых потокозащищённых объектов, блокировок, мьютексов и иже с ними... |
Автор: | Степан Митькин [ Понедельник, 19 Февраль, 2018 14:39 ] |
Заголовок сообщения: | Re: Базовые компьютерные алгоритмы |
adva писал(а): Rifat писал(а): Многие наверно знают, что любой рекурсивный алгоритм можно представить в виде циклического алгоритма с использованием стека. Можно, но очень часто, проще работать с рекурсивной функцией, и по объему кода она может быть в разы меньше, и, соответственно, доработать проще Важно не забывать, что предмет обсуждения — как изобразить рекурсию. Любить рекурсию или нет — это другой вопрос, и другое обсуждение. (Лично я рекурсию не люблю, но регулярно употребляю.) Задача поставлена так: выделить рекурсию, чтобы она бросалась в глаза. Методы решения: - жирный шрифт - цвета - выноска |
Автор: | Степан Митькин [ Понедельник, 19 Февраль, 2018 14:43 ] |
Заголовок сообщения: | Re: Базовые компьютерные алгоритмы |
Alexey_Donskoy писал(а): В общем же случае рекурсия бывает и косвенной, и её вызов просто так не пометишь. Косвенная рекурсия — она сволочь, да. |
Автор: | Владимир Невзоров [ Понедельник, 19 Февраль, 2018 18:01 ] |
Заголовок сообщения: | Re: Базовые компьютерные алгоритмы |
Новая схема. Спасибо всем участникам за столь активный отклик. По результатам обдумывания всех предложений и обсуждений сделал следующую схему. Раньше и подумать не мог, что может так аккуратно получиться. Я думаю, Вы оцените. И, конечно же, пожелания и предложения всегда приветствуются! Вложение: Что было сделано. 1) Убрал первую ветку. В ней лишь инициализировался индекс разбиения. Из плюсов: стало меньше визуального мусора. Ранее я рассказывал про области видимости/жизни переменных в С++. И что в соответствие с этими понятиями как бы вынес переменную индекс разбиения за основные ветки алгоритма, чтобы жила подольше. Сейчас опустил эту философию. Переменная сейчас нужна в двух ветках: 1) В первой она инициализируется, затем изменяется. 2) Во второй используется. Будем считать, что переменная живет и по исходу выполнения алгоритма из 1ой ветки. 2) Выделил глаголы Вложение: Преобразование иконки.png [ 4.22 КБ | Просмотров: 11099 ] Где-то Владимир Паронджанов говорил об использование глаголов в алгоритме. Здесь я идею развил в очищение ключевого слова - глагола/действия - от объекта действия. Вроде бы не сильное изменение на одной иконе, но, если посмотреть на весь алгоритм, то, мне кажется, лучше видно что происходит. 3) Показал рекурсию. Вложение: Решил скомбинировать решение из советов. Сразу же приглянулась икона "Полка". А почему бы и... да? Показал два варианта исполнения. Достаточно ли понятен вызов рекурсии с передачей аргументов? |
Автор: | Владимир Невзоров [ Пятница, 23 Февраль, 2018 07:45 ] |
Заголовок сообщения: | Re: Базовые компьютерные алгоритмы |
Хотелось бы получить обратную связь по реализации. У кого-нибудь есть мысли по схеме - предложения/критика/пожелания? |
Автор: | PSV100 [ Пятница, 23 Февраль, 2018 17:59 ] |
Заголовок сообщения: | Re: Базовые компьютерные алгоритмы |
"Обратную связь" здесь ожидают с 2009 г. -- присоединяйтесь в очередь : http://forum.drakon.su/viewtopic.php?f=62&t=2026 Имхо, если стараться придерживаться принципа отражения "маршрутной семантики", то необходимо каким-то способом выделять и заголовок алгоритма (как, напр., в функциональных языках по мотивам ML, где рекурсивные функции могут быть отмечены явно: для "let f(x)=..." добавляется "rec" --> "let rec f(x)=..."). |
Автор: | Владимир Невзоров [ Суббота, 24 Февраль, 2018 14:18 ] |
Заголовок сообщения: | Re: Базовые компьютерные алгоритмы |
PSV100 писал(а): "Обратную связь" здесь ожидают с 2009 г. -- присоединяйтесь в очередь : http://forum.drakon.su/viewtopic.php?f=62&t=2026 Попытка нарисовать рекурсию. PSV100, спасибо за предметную ссылку! Сейчас кратко просмотрел, позже вдумчивей прочитаю. Это тот самый материал, который нужен в данный момент, когда мы обсуждаем как показывать более сложные алгоритмы. PSV100 писал(а): Имхо, если стараться придерживаться принципа отражения "маршрутной семантики", то необходимо каким-то способом выделять и заголовок алгоритма (как, напр., в функциональных языках по мотивам ML, где рекурсивные функции могут быть отмечены явно: для "let f(x)=..." добавляется "rec" --> "let rec f(x)=..."). Чувствуется, что в этом что-то есть. Правда, пока не совсем пойму чтобы это все значило Не могли бы разъяснить словами и показать ДРАКОН схему с реализацией Вашей мысли? |
Страница 4 из 5 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |