DRAKON.SU

Текущее время: Пятница, 29 Март, 2024 16:47

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




Начать новую тему Ответить на тему  [ Сообщений: 23 ]  На страницу 1, 2  След.
Автор Сообщение
СообщениеДобавлено: Воскресенье, 12 Ноябрь, 2017 09:34 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5846
Откуда: Москва
Язык ДРАКОН.
Сколько здесь циклов: один или два?
Сколько должно быть стрелок: одна или две?


Если здесь два цикла (внутренний и внешний), то сколько должно быть стрелок: одна или две?

Я показал две стрелки.
Это правильно или нет? И почему?

Вложение:
Рис. 83 вСараеКраскиНетДоср — копия.png
Рис. 83 вСараеКраскиНетДоср — копия.png [ 165.56 КБ | Просмотров: 13294 ]

Для сравнения показываю (внизу) то же самое с одной стрелкой:
Вложение:
Рис. 83 вСараеКраскиНетДоср ОДНА стрелка .png
Рис. 83 вСараеКраскиНетДоср ОДНА стрелка .png [ 152.24 КБ | Просмотров: 13280 ]

viewtopic.php?p=100689#p100689
Цитата:
Против двух... стрелок в ... схеме высказались все участники дискуссии:
LKom
Степан Митькин
Владимир Ситников
Игорь Мазница.


Степан Митькин высказался за одну стрелку и против двух:
Степан Митькин писал(а):
Устранить лишнее хорошо. Чем меньше графического мусора, тем лучше.


Прошу высказать ваше мнение.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 12 Ноябрь, 2017 10:19 

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

Цикл один, т.к. на шампуре со стрелками находится одна икона Вопрос.
Циклу соответствует верхняя стрелка, это точка входа в цикл.

У Вас, изображен цикл без условия на верхней границе цикла.

Здесь мы видим недостаток в графическом изображении Цикла с Вопросом.
Недостаток заключается в том, что тело цикла разрывается на несколько шампуров, у Вас 3 шампура.

В теле цикла анализируются условия и имеется 3 иконы Вопрос. Выполняется 2 выхода из цикла и 1 пропуск тела цикла. В языках программирования этому соответствуют операторы Break (выйти из цикла) и Continue (пропустить тело цикла, перейти к нижней границе цикла).

Лиана петли цикла является нижней границей цикла, переход на нее является переходом к нижней границе цикла и выполнением следующей итерацией цикла. Все переходы к нижней границе цикла не следует выполнять стрелкой, должно выполняться вертикальное объединение на лиане петли цикла.

У Вас должна быть одна стрелка.
---
"Основной выход из цикла", "Досрочный выход из цикла" - неправильные комментарии. Оба выхода из цикла происходят из середины тела цикла, они соответствуют различным условия и выполняются после каких то действий внутри цикла.
---
Соответствует Ваше схеме:
Вложение:
Новый_01(1).png

---
Еще замечание к Вашим рисункам:
иконы на шампурах болтаются и не занимают определенного места.
Так бывает только у "художника", который все размещает произвольно. В ИС Дракон такого произвола нет, все подчинено определенным требованиям.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 12 Ноябрь, 2017 11:01 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5846
Откуда: Москва
В первое сообщение
viewtopic.php?p=100759#p100759

я внес изменение — добавил картинку с ОДНОЙ стрелкой.
чтобы облегчить сравнение двух вариантов:

— сверху схема с двумя стрелками,
— снизу схема с одной стрелкой.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 12 Ноябрь, 2017 11:17 

Зарегистрирован: Среда, 07 Январь, 2015 14:53
Сообщения: 1356
Владимир Паронджанов писал(а):
— снизу схема с одной стрелкой.
Не понятно:
Стрелка одна, тем не менее, выделяете зоны 2-х циклов и пишите о внутреннем цикле и внешнем цикле.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 13 Ноябрь, 2017 09:50 

Зарегистрирован: Среда, 07 Январь, 2015 14:53
Сообщения: 1356
viewtopic.php?p=99423#p99423
LKom писал(а):
Совсем стало не понятно.
В пункте 7 Си программа имеет 1 цикл, а ее Дракон-схема 2 стрелки, т.е. 2 цикла.
Уже тогда, 04 Декабрь, 2016 19:43, у автора Дракона имелась проблема с количеством стрелок и Циклов с Вопросом.


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

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

Прошу высказать свое мнение по поставленному вопросу.
Благодарю LKom за изложение своей позиции.


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

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

Например:
Покраска забора
(Допустим забор уже был недавно покрашен)
Возьми ведро с краской и кисть
Подойти к левому краю забора
Покрась одну доску
(Покрасили самую левую доску N+1 раз)
Шагни вправо на ширину доски
Все доски покрашены? Да
Ура! Задание выполнено. Забор покрашен.
(А самая левая доска даже несколько раз :) )
Собери малярные принадлежности и иди домой.
Конец

Еще пункт в начале алгоритма:
Возьми ведро с краской и кисть
А если в ведре не оказалось краски? Не все же люди хранят в сарае ведро полное краски, чтобы через год покрасить забор :) Иногда ведро и для других целей нужно бывает.
И если в ведре не было краски, то еще интереснее без краски выполнять следующий пункт:
Покрась одну доску.

P.S. Для человека данный алгоритм подойдет, но для робота, который не обладает интеллектом человека, не подойдет.


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

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5846
Откуда: Москва
Рифат, спасибо за ваше мнение.
Вы подвергли критике условие задачи. Это хорошо. Спасибо.

Просьба теперь ответить на два поставленных вопроса:
Цитата:
Сколько здесь циклов: один или два?
Сколько должно быть стрелок: одна или две?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 13 Ноябрь, 2017 12:27 

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 219
Откуда: Казань
Владимир Паронджанов писал(а):
Просьба теперь ответить на два поставленных вопроса:
Цитата:
Сколько здесь циклов: один или два?
Сколько должно быть стрелок: одна или две?

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


По поводу сколько должно быть стрелок, опять таки должно быть четкое определение что такое стрелка и когда она должна ставиться. Тогда формально читая эти определения, можно было бы точно ответить сколько должно быть стрелок.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 13 Ноябрь, 2017 12:58 

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

Вот цитата из русской Википедии:
Цитата:
Цикл — разновидность управляющей конструкции в высокоуровневых языках программирования, предназначенная для организации многократного исполнения набора инструкций. Также циклом может называться любая многократно исполняемая последовательность инструкций, организованная любым способом (например, с помощью условного перехода).

Рифат, сколько циклов в первом сообщении темы, если считать этот текст в Википедии за определение.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 13 Ноябрь, 2017 15:21 

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 219
Откуда: Казань
Владимир Паронджанов писал(а):
Rifat писал(а):
Вообще зависит от определения. Дайте мне определение цикла и я точно скажу сколько здесь циклов.
Рифат, спасибо.

Вот цитата из русской Википедии:
Цитата:
... любая многократно исполняемая последовательность инструкций, организованная любым способом...

Рифат, сколько циклов в первом сообщении темы, если считать этот текст в Википедии за определение.

Честно говоря, данное определение очень расплывчатое. Если на самом деле считать "любые последовательности инструкций, организованные любым способом", то наверно можно даже насчитать бесконечно много циклов :)

Если, например, открыть книгу Вирта "Систематическое программирование", то там есть следующая фраза: "Повторяемая часть образует цикл, т. е. замкнутую последовательность инструкций, причем по крайней мере одна из них является проверкой условия, определяющего окончание цикла". Здесь по крайней мере говорится про замкнутую последовательность, а в определении из Википедии, даже про это не сказано. Если следовать Виртовскому определению, то в вашей схеме 2 цикла, так как есть две замкнутые последовательности и есть 2 условия определяющие окончание цикла.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 17 Ноябрь, 2017 00:22 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 631
Откуда: Россия, Орёл
Вообще, понятие "цикл" условно. У вас есть процесс с определённой структурой, который вы пытаетесь описать алгоритмом (как "грамматикой" на процессы).
И уже в сложных случаях просто смотреть, какой способ описания ближе к "природе задачи".

Если описать не алгоритмически, а чисто регулярным выражением приведённые в начале схемы варианты, то:
{ красить; шаг_вправо; проверка_всё_ли_покрашено; [проверка_краски; [сходить_в_сарай; проверить_наличие; [набрать]]}
или
{ {красить; шаг_вправо; проверка_всё_ли_покрашено; [проверка_краски]} [сходить_в_сарай; проверить_наличие; [набрать]]}
- по сути, как скобки поставить :)

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

А дальше уже нужно вводить в дело содержательные критерии, системный анализ задачи - и какая формальная запись лучше, "естественнее".

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

СРАЗУ СКАЖУ, что нужно использовать как более общий, цикл с предусловием.
Потому что общий случай - 0 и более. Забор из нуля досок. Забор уже покрашенный. И т.п.
Нет ни одного аргумента в пользу цикла с постусловием, кроме очень редких оптимизирующих случаев. Но пока порассуждаю в рамках данного цикла с постусловием (а потом уже поговорим о переходе к WHILE).

Т.е. действуем по принципу: наружный цикл - главный, внутренний - вспомогательный (признак: естественно свёртывается до вспомогательного алгоритма), иначе наружный оформляем как условную часть единственного цикла.
В нашем случае сравним два описания:
Код:
REPEAT
  Покрасить_доску;
  Шаг_вправо;
  IF есть_некрашенная_доска & краска_кончилась THEN
    Попробовать_набрать_краски_в_сарае (* Вспомогательный алгоритм *)
  END
UNTIL...
- абсолютно естественно

Или:
REPEAT
   Красить_доски_пока_не_кончится_краска (* Даже само название вспом. алгоритма вымученное... *)
   Попробовать_набрать_краски_в_сарае
UNTIL
И, несмотря на внешнюю простоту, у вас во вспом. алгоритме будет ещё один цикл.

И у вас появится плохая связность между вспомогательными алгоритмами (алгоритм Красить доски будет вынужден знать про то, что краска может кончаться и т.п.).
Т.е. с точки зрения задачи вариант с одним циклом гораздо лучше.

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

Пример из реальной жизни - это типа (тут уже не буду вымучивать что-то с REPEAT, а дам с WHILE):
Код:
i := 0; j := 0;
WHILE (i < M) & ~( X[i, j] - искомый ) DO
  INC(j);
  IF j > N THEN
     j := 0;
     INC(i)
  END
END

Ну, сами можете перерисовать на ДРАКОНЕ (циклы с конъюнкцией в условии весьма выразительно на нём смотрятся).

Т.е. есть основная структура цикла WHILE не_конец_последовательности & ~текущий_элемент_удовлетворяет_условию DO перейти_к_следующему END
- и то, что последовательность тут имеет двумерную структуру (да хоть трёхмерную) - это частность. Более сложное действие перейти_к_следующему, содержащее условие. Вот и всё.

И попробуйте натянуть этот цикл на два вложенных. Будет жуткий и безграмотный for-for-if-break (как 99% и пишет).

Контрпример: если у вас в циклическом процессе есть более часто повторяющаяся внутренняя последовательность, которая может быть вообще упрятана в один вспомогательный алгоритм. То это естественным образом представляется как два цикла (хотя, конечно, можно заложить и в один, но будет "искажать смысл").
Например, цикл покраски отдельной доски.

Давайте уже, наконец, перейдём от REPEAT-ового заборного цикла к более общему WHILE.

Код:
Наполнить_ведро_краской;
Выбрать_левую_доску_как_текущую;
WHILE забор_не_кончился & есть_краска_в_ведре DO
  (* Покрасить_доску. Лучше оформить как отдельный алгоритм, но для примера поставим вложенные циклы прямо сюда *)
  WHILE текущая_доска_не_покрашена_до_конца & есть_краска_в_ведре DO
    Макнуть_кисть;
    WHILE кисть_ещё_мажет DO
      Провести_кистью_по_некрашенному_месту_доски
    END
  END;
  IF текущая_доска_покрашена THEN
     Сделать_шаг_вправо
  END;
  IF нет_краски_в_ведре THEN
    Попытаться_набрать_краску_в_сарае
  END
END


Это и пример гораздо более общего алгоритма, и того, какие из действий циклического процесса стоит оформлять внутренним условием, а какие - внутренними циклами. И, кстати, обслуживающие главную логику действия в сарае таки целесообразно упрятать вообще в алгоритм Попытаться_набрать_краску_в_сарае.
И условие есть краска в сарае - нет краски в сарае - вообще не выносится на уровень основного алгоритма. Если к концу тела цикла в ведре нет краски => краски в сарае нет.

Инвариант данного цикла. Напоминаю, что инвариант - это "рамка", "рельсы цикла", а формально говоря, логическое условие, истинное до начала цикла и по окончании каждой его итерации (в том числе после последней итерации). Инвариант нарушается в теле цикла - и восстанавливается к концу тела цикла.
Содержательный инвариант накладывается на меняющиеся в цикле величины / состояния объектов.
У нас это состояние забора и состояние ведра.
Инвариант: все_доски_слева_от_текущей_покрашены_полностью & ( нет_краски_в_ведре => нет_краски_в_сарае )
(т.е. перед циклом и по окончании каждой итерации в ведре может не быть краски только тогда, когда нет краски вообще).
Постусловие: все_доски_покрашены ИЛИ нет_краски_в_ведре (* по причине отсутствия её в сарае *)

С точки зрения физической задачи можно оптимизировать и убрать лишнее действие похода в сарай, если вдруг красить уже нечего.
Код:
IF нет_краски_в_ведре & забор_не_кончился THEN
    Попытаться_набрать_краску_в_сарае
END


Но тогда пустое ведро по окончании цикла перестаёт служить признаком глобального отсутствия краски. Если после цикла нам надо различать эту ситуацию, то потребуется какой-то отдельный флаг вместо признака пустого ведра... Поэтому в алгоритмах, где "поход за краской" ничего не стоит, проще первый вариант.
Инвариант для второго варианта: все_доски_слева_от_текущей_покрашены_полностью & (нет_краски_в_ведре => (нет_краски_в_сарае OR забор_покрашен))

Вообще, просто "ДРАКОНИстое" визуальное мышление очень плохо помогает составлять циклы.
ДРАКОН хорош для декомпозиции алгоритмов, для автоматной логики по состояниям на основе веток - и для условной логики. На самом деле, именно условия, разветвления логики - "ахиллесова пята" по ошибкам и по сложности восприятия алгоритмов. И ДРАКОН тут неплохо помогает.
А циклы со сложными условиями иногда неплохо ложатся на ДРАКОН как окончательное представление (когда выход по каждому конъюкту - отдельная отходящая вниз ось), но чтобы их нормально составлять, нужно мыслить формальнее и "текстовее".
Тогда и, кстати, никакой особой проблемы по риску ошибок на циклах не будет. Правильно составленному циклу уже "по барабану" - 0 или N раз выполняться ))
И мозгу не приходится прогонять комбинаторно все варианты.
В отличие от условной логики, где часто идёт "комбинаторный взрыв" (что хорошо известно при покрытии тестами, конечно).

Ну и на закуску нельзя не упомянуть, что именно в силу вот этих дилемм "вложенный цикл или цикл с IF" Эдсгер Дейкстра и ввёл свой обобщённый многоветочный цикл. WHILE условие_ветки_1 DO .... ELSIF условие_ветки_2 DO .... ELSIF условие_ветки_3 DO .. END (выполняется, пока истинна хотя бы одна из веток).
https://forum.oberoncore.ru/viewtopic.php?f=30&t=1225

Цикл позволяет явно отклассифицировать все возможные варианты итераций в рамках одного циклического процесса. Т.е. "пока возможно каким-то образом, оставаясь в рамках инварианта, продвигаться вперёд, продвигаемся". А постусловие - конъюнкция отрицаний всех веток.
Часто полезно спроектировать циклический процесс как ЦД, хотя иногда реально потом лучше перейти к одному WHILE и поставить вложенные IF (т.к. между вычислениями условий нужны какие-то действия, и т.п.).

Код:
WHILE забор_не_докрашен & есть_краска_в_ведре DO
  Покрасить_текущую_доску;
  Шагнуть_вправо;
ELSIF забор_не_докрашен DO
  Попытаться_набрать_краску_в_сарае
END


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 17 Ноябрь, 2017 16:28 

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 219
Откуда: Казань
С "циклом Дейкстры" тоже не самое лучшее решение. Так как по сути - это не настоящий цикл Дейкстры. Настоящий цикл Дейкстры, который предложил Дейкстра, он недетерминированный и по-хорошему должен применяться тогда, когда порядок выполнения ветвей для нас не важен.
Например, когда надо некое число делить на 2 и 3 до тех пор пока делится, для этого хорошо подходит:
Код:
WHILE число делится на 2 DO
  разделить число на 2;
ELSIF число делится на 3 DO
  разделить число на 3;
END;

В данном случае для нас не важно в каком порядке будет происходить деление, результат будет всегда одинаковым.
Языки программирования же они в большинстве своём строго детерминированные и ветка ELSIF выполняется только в том случае, если первое условие не выполняется. Поэтому лучше писать WHILE и IF ELSIF внутри него, когда порядок важен, иначе кого-то такой "цикл Дейкстры" может ввести в заблуждение, кто привык считать, что настоящий цикл Дейстры недетерминированный.

Ну и только что заметил, что цикл в принципе не совсем правильный. Если забор не докрашен и в сарае нет краски, то ветка забор не докрашен будет выполняться вечно.
Код:
WHILE забор_не_докрашен & есть_краска_в_ведре DO
  Покрасить_текущую_доску;
  Шагнуть_вправо;
ELSIF забор_не_докрашен DO
  Попытаться_набрать_краску_в_сарае
END

Думаю, что можно, конечно, его исправить как-нибудь :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 17 Ноябрь, 2017 18:43 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 631
Откуда: Россия, Орёл
Rifat писал(а):
С "циклом Дейкстры" тоже не самое лучшее решение. Так как по сути - это не настоящий цикл Дейкстры. Настоящий цикл Дейкстры, который предложил Дейкстра, он недетерминированный и по-хорошему должен применяться тогда, когда порядок выполнения ветвей для нас не важен.

Согласен. Согласен. Согласен.

Цитата:
Ну и только что заметил, что цикл в принципе не совсем правильный. Если забор не докрашен и в сарае нет краски, то ветка забор не докрашен будет выполняться вечно.
Код:
WHILE забор_не_докрашен & есть_краска_в_ведре DO
  Покрасить_текущую_доску;
  Шагнуть_вправо;
ELSIF забор_не_докрашен DO
  Попытаться_набрать_краску_в_сарае
END

Думаю, что можно, конечно, его исправить как-нибудь :)

[/quote]

Да, верно.
Тут надо Попытаться_набрать_крааску_в_сарае делать функцией и ставить:
ELSIF забор_не_докрашен & Попытаться_набрать_краску_в_сарае() DO

Я вообще за то своё решение с WHILE - IF внутри ))


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 26 Ноябрь, 2017 10:23 

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

Мне кажется, что в замечаниях Рифата и Ильи Ермакова присутствует неявное предположение, что:
Цитата:
Теория текстового программирования (textual programming) справедлива для случая визуального программирования (visual programming)

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

Уважаемые коллеги привели большое число примеров (спасибо им).
К сожалению, все примеры изложены в классической манере, БЕЗ обращения к графике, то есть без обращения к визуальному программированию.

К сожалению, не приведено ни одного примера на визуальном языке.

Мое разногласие с уважаемыми оппонентами состоит в следующем.

Я считаю, что:

1) Текстовое и визуальное программирование — существенно разные вещи.

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


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

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 219
Откуда: Казань
Владимир Паронджанов писал(а):
Я считаю, что:
1) Текстовое и визуальное программирование — существенно разные вещи.

Более того:
- формула квадратного уравнения и график квадратного уравнения - это разные вещи;
- логическая формула, которая вычисляет выражение, и принципиальная схема, которая состоит из логических элементов и вычисляет выражение, - это разные вещи;
- машина Тьюринга, которая работает по алгоритму, и алгоритм, представленный на языке высокого уровня - это разные вещи;
Но они могут представлять одну и ту же идею. Никто не говорит, что форма записи квадратного уравнения X^2 - 1 = 0 единственно правильная, а, например, фраза "икс умножить на икс вычесть один должно равняться нулю" неправильная. Есть более высокое понятие "уравнение", которое человек понимает, и которое может быть записано в виде формулы, в виде текста или же отображено на графике.
Также и здесь, когда я или Илья Ермаков обсуждаем алгоритм, мы думаем о более высоком понятии "алгоритма", а не думаем о тексте или же о квадратиках и стрелочках между ними.

Поэтому да, "это разные вещи", но эти "разные вещи" описывают одну и ту же идею.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 27 Ноябрь, 2017 12:28 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5846
Откуда: Москва
Rifat писал(а):
когда я или Илья Ермаков обсуждаем алгоритм, мы думаем о более высоком понятии "алгоритма", а не думаем о тексте или же о квадратиках и стрелочках между ними.

Спасибо, Рифат, вы хорошо сформулировали мысль.
Именно эту мысль я и критикую.

Говорить о "более высоком понятии алгоритма", разумеется, можно.
Но это разговор не по теме.

Темой является более низкий уровень, а именно квадратики и стрелочки.
Очень плохо, что "не думаем... о квадратиках и стрелочках между ними".

Ведь суть языка ДРАКОН именно в новом способе выражения с помощью квадратиков и стрелочек между ними


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 27 Ноябрь, 2017 12:50 

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

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

Лично мне проще мыслить в терминах структурного программирования, когда есть всего 3 элемента:
- последовательность;
- условие, когда может выполнится или одна ветка условия или другая, в зависимости от условия;
- цикл, который может выполнится 0 и более раз.
И для того, чтобы понять алгоритм, мне надо разложить его на эти состоявляющие элементы.

В Драконе же можно так провести стрелочки, что понять так сразу его не получится. Легко получится проследить возможные пути, но это не означает, что алгоритм будет понят. Так как есть еще комбинации различных путей и если алгоритм довольно таки сложный, то возникает комбинаторный взрыв и просмотреть все комбинации путей становится невозможно. Соответственно, и возможные ошибки останутся, так как алгоритм будет не до конца понят. Можно, в принципе, разложить Дракон схему на 3 простых состовляющих, но для этого нужно будет делать некоторые эквивалентные преобразования, при которых человек также может совершить ошибку (наиболее яркий пример в этой же теме, когда Илья попытался перевести алгоритм в другую форму). (Человек сам часто совершает ошибки и довольно толерантен к ошибкам других, например, если кто-то не совсем правильно говорит по-русски то, чаще всего, можно понять смысл о чем говорится, или если Дракон схема, не совсем точная, в том плане, что некоторые ситуации являются бредом, например, покрасить еще раз свежевыкрашенную доску, то человек легко понимает, что этого делать не следует. Если же говорить про какие-то автоматизированные устройства: робот или космический аппарат, то им нужна безошибочность во всех ситуациях, так как заранее не известно какая ситуация может встретится.)


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

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 219
Откуда: Казань
Для того, чтобы легче было понять нужен определенный базис.
Если, например, вы придете в магазин, а там цены будут в различных системах счисления, например, одни помидоры стоят 88 в 9-ти значной системе счисления, а другие 99 в 11 значной системе счисления. То, думаю, для покупателей было бы удобно сначала привести цены в одну систему счисления, а именно в 10-ти значную.
Также и с алгоритмами, если много разных алгоритмов, и понимать их проще, если сначала разложить на 3 базовых элемента.
В принципе, то чем вы занимаетесь: визуализацией - это шаг в правильном направлении. Визуализация позволяет легче понять что либо. Но, то что в Драконе нет маленького базиса, на который можно разложить алгоритм - это пол шага в обратном направлении. Вообще интересно было бы подсчитать из скольки элементов состоит базис Дракон-схем.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 01 Декабрь, 2017 18:59 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5846
Откуда: Москва
Rifat писал(а):
Ну и только что заметил, что цикл в принципе не совсем правильный. Если забор не докрашен и в сарае нет краски, то ветка забор не докрашен будет выполняться вечно.
Код:
WHILE забор_не_докрашен & есть_краска_в_ведре DO
  Покрасить_текущую_доску;
  Шагнуть_вправо;
ELSIF забор_не_докрашен DO
  Попытаться_набрать_краску_в_сарае
END

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

Рифат, если вы не согласны, то надо показать ваш маршрут на моем рисунке.

Вложение:
Рис. 83 Рифат вСараеКраскиНетДоср ОДНА стрелка  — копия.png
Рис. 83 Рифат вСараеКраскиНетДоср ОДНА стрелка — копия.png [ 166.3 КБ | Просмотров: 13010 ]


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

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


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

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


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

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