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

Алгоритм "Смерть Кощея" от Петра Алмазова
https://forum.drakon.su/viewtopic.php?f=147&t=4216
Страница 1 из 1

Автор:  Илья Ермаков [ Вторник, 15 Январь, 2013 10:01 ]
Заголовок сообщения:  Алгоритм "Смерть Кощея" от Петра Алмазова

Сам алгоритм/постановка задачи:
http://oberspace.dyndns.org/index.php/topic,425.0.html

Моё решение на ДРАКОНе:
Вложение:
Koschej-DRAKON.png
Koschej-DRAKON.png [ 31.3 КБ | Просмотров: 18180 ]


Пояснения:
Цитата:
Про что я всегда и пытался говорить - такие случаи разруливаются на плоскости безболезненно.

Посмотрите на вертикальный блок, проверяющий все !null и между проверками добывающий очередной объект.
Это наглядное выражение проверки конъюнкции условий с промежуточными действиями.
Два исхода - когда конъюнкция истинна (мы обладаем иглой) и когда она ложна (и мы продолжаем цикл).

И у самого цикла два исхода - "нашли"-"не нашли".

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


Одно из возможных решений на обычном ЯП:
Код:
PROCEDURE Store (obj: ANYPTR; VAR ptr: ANYPTR): BOOLEAN;
BEGIN
   ptr := obj;
RETURN obj # NIL
END Store;

i := 0;
WHILE (i < сундуки.length) &
   ~( Store(ЗАЯЦ(сундуки[i]), заяц)) & Store(УТКА(заяц(Заяц)), утка)) &
      Store(ЯЙЦО(утка(Утка)), яйцо)) & Store(ИГЛА(яйцо(Яйцо)), игла)) )
DO
   INC(i)
END

Единственное, чтобы передать переменную по VAR-параметру, она должна иметь тип ANYPTR. Отсюда потом каждый раз приведение типа.

Автор:  Владимир Паронджанов [ Вторник, 15 Январь, 2013 10:29 ]
Заголовок сообщения:  Re: Алгоритм "Смерть Кощея" от Петра Алмазова

Илья Ермаков писал(а):
Моё решение на ДРАКОНе:
Вложение:
Koschej-DRAKON.png


У меня есть небольшое возражение.

1. Язык ДРАКОН (точнее, дракон-редактор) гарантирует безошибочность графики.
В данном случае это не так. Ниже объясню почему.

2. Правильный дракон-редактор http://drakon.su/_media/biblioteka/chas ... isanie.pdf работает по другому. Он не может (и не должен) рисовать дракон-схему, которую изобразил Илья Евгеньевич.

3. Ошибка в том, что четыре петли цикла сливаются в одну стрелку. Правильный дракон-редактор так не умеет и не должен. Потому что он работает методом вложения.

4. Исправить эту неточность очень легко. Надо удалить слияние 4-х линий в одну и нарисовать не одну стрелку, а четыре.

5. Дракон-редактор создает графический узор методом логического вывода согласно исчислению икон. Отступления от этого недопустимы.

6. Такие отступления «выбивают» из-под дракон-редактора математическое обоснование. Это недопустимо.

7. Причина ошибки в том, что редактор Степана Митькина не реализует логический вывод. И в этом смысле является «недоделанным».

8. Разумеется, редактор Степана Борисовича Митькина обладает многими хорошо известными достоинствами. Но (в существующей версии) он не является гарантоспособным.

9. Когда дракон-редактор Митькина будет доведен до конца, он просто не позволит нарисовать такую (ошибочную) дракон-схему. И тем самым освободит пользователя от необходимости размышлять над пустяками (над правилами языка ДРАКОН). В этом случае пользователь будет думать не над мелочами (что можно и что нельзя), а над смыслом задачи. Над творческими, то есть наиболее важными операциями разработки алгоритмов.

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

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

Подсказка для тех, кто хочет попробовать свои силы:


Ну и конечно, надо детально изучить книгу:
Цитата:
Паронджанов В. Д. Учись писать, читать и понимать алгоритмы. Алгоритмы для правильного мышления. Основы алгоритмизации. — М.: ДМК Пресс, 2012. — 520 с. — ISBN 978-5-94074-800-7

Автор:  Владислав Жаринов [ Вторник, 15 Январь, 2013 11:10 ]
Заголовок сообщения:  Re: Алгоритм "Смерть Кощея" от Петра Алмазова

А эта структура маршрутов вообще выводима только вложением (вводом атома)?..

Кстати, опять лучше всего изображается в скобках с "витком Донского"... где явно разрешено пересечение...

Да, не пропущен ли инкремент в начале той самой четверной петли?..

Автор:  Владислав Жаринов [ Вторник, 15 Январь, 2013 11:32 ]
Заголовок сообщения:  Re: Алгоритм "Смерть Кощея" от Петра Алмазова

Кстати, вопрос к желающим попробовать силы: сколько раз надо употребить инкремент в схеме Ильи и в "доделанной" и в каких местах?..

Автор:  Илья Ермаков [ Вторник, 15 Январь, 2013 14:25 ]
Заголовок сообщения:  Re: Алгоритм "Смерть Кощея" от Петра Алмазова

Я там по невнимательности упустил инкремент в цикле. Потому и слилось всё против правил... См. исправленную схему.

Автор:  SergeyNK [ Вторник, 15 Январь, 2013 19:31 ]
Заголовок сообщения:  Re: Алгоритм "Смерть Кощея" от Петра Алмазова

Владимир Паронджанов писал(а):

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


Вот получил в редакторе Тышова:

Вложения:
D.PNG
D.PNG [ 18.62 КБ | Просмотров: 18148 ]

Автор:  Илья Ермаков [ Среда, 16 Январь, 2013 02:12 ]
Заголовок сообщения:  Re: Алгоритм "Смерть Кощея" от Петра Алмазова

Это уже исправленная схема :)

Автор:  SergeyNK [ Среда, 16 Январь, 2013 10:40 ]
Заголовок сообщения:  Re: Алгоритм "Смерть Кощея" от Петра Алмазова

Илья Ермаков писал(а):
Это уже исправленная схема :)

К сожалению, после исправления в этой ветке часть постов выглядит совершенно бессмысленно. Если бы исправленная схема была помещена там, где об этом сказано, то логика сохранилась бы.
У нас на предприятии запрещено вносить изменения в выпущенные документы/изделия. Это считается серьезным преступлением. Только новая версия, чтобы можно было посмотреть логику изменений.

Автор:  Илья Ермаков [ Среда, 16 Январь, 2013 10:41 ]
Заголовок сообщения:  Re: Алгоритм "Смерть Кощея" от Петра Алмазова

Да, каюсь, я об этом уже подумал.

Автор:  Alexey_Donskoy [ Четверг, 17 Январь, 2013 11:01 ]
Заголовок сообщения:  Re: Алгоритм "Смерть Кощея" от Петра Алмазова

Владислав Жаринов писал(а):
Кстати, опять лучше всего изображается в скобках с "витком Донского"... где явно разрешено пересечение...
Пардон, а можно узнать, о чём речь? :D

Автор:  Владислав Жаринов [ Четверг, 17 Январь, 2013 11:15 ]
Заголовок сообщения:  Re: Алгоритм "Смерть Кощея" от Петра Алмазова

Пока рисовал только "в карандаше"... Если Вы об общем, то см. здесь: viewtopic.php?p=76385#p76385. Как реализовано - см. техпроцесс исключения в этом примере: viewtopic.php?p=76208#p76208.

Автор:  Владислав Жаринов [ Четверг, 17 Январь, 2013 16:07 ]
Заголовок сообщения:  Re: Алгоритм "Смерть Кощея" от Петра Алмазова

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

Автор:  Kemet [ Пятница, 18 Январь, 2013 10:16 ]
Заголовок сообщения:  Re: Алгоритм "Смерть Кощея" от Петра Алмазова

Вариант Р-схемы:
Код:
$==========================================================================$
!                                                                          !
!НЕ Нашли И                                                                !
!ЕСТЬ(сундуки)  ПУСТО(заяц)                                                !
!------------->$---------------------------------------------------------->!
 ВЗЯТЬ(сундук) !                                                           !
 ЗАЯЦ(сундук)  !           ПУСТО(утка)                                     !
               !--------->$----------------------------------------------->!
                УТКА(заяц)!                                                !
                          !           ПУСТО(яйцо)                          !
                          !--------->$------------------------------------>!
                           ЯЙЦО(утка)!                                     !
                                     !           ПУСТО(игла)               !
                                     !--------->$------------------------->!
                                      ИГЛА(яйцо)!                          !
                                                !             ПУСТО(смерть)!
                                                !----------->$------------>!
                                                 СМЕРТЬ(игла)!             !
                                                             !             !
                                                             !------------>!
                                                              Нашли := ДА

Автор:  Владислав Жаринов [ Пятница, 18 Январь, 2013 11:18 ]
Заголовок сообщения:  Re: Алгоритм "Смерть Кощея" от Петра Алмазова

Да, кстати, тоже рисовал "рокированный" маршрут в теле цикла... нагляднее...
А инкремент здесь подразумевается?..

Автор:  Дмитрий Дагаев [ Пятница, 18 Январь, 2013 12:10 ]
Заголовок сообщения:  Re: Алгоритм "Смерть Кощея" от Петра Алмазова

Достаточно одну иконку УСЛОВИЯ со строкой на Прологе внутри:
Код:
смерть_кощея :- сундук(заяц(утка(яйцо(игла)))).


1) Алгоритм унификации соптимизирует поиск.
2) Одна иконка на Драконе - одно условие на человеческом языке, без лишней детализации.

Автор:  Kemet [ Пятница, 18 Январь, 2013 12:35 ]
Заголовок сообщения:  Re: Алгоритм "Смерть Кощея" от Петра Алмазова

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

Если вопрос ко мне, то инкремент здесь не нужен, подразумевается что это вроде списка и проблема обхода решается через
ЕСТЬ(сундуки)
------------------>
ВЗЯТЬ(сундук)
аналог:
WHILE list.HasMoreElements() DO сундук := list.GetNext() END;
как здесь

Автор:  Владислав Жаринов [ Суббота, 19 Январь, 2013 05:43 ]
Заголовок сообщения:  Re: Алгоритм "Смерть Кощея" от Петра Алмазова

А, форич... я так и подумал, но, не будучи Р-(и вообще)программистом, всё-таки нуждался в уточнении... :)

Вот, кстати, это интересно:
Дмитрий Дагаев писал(а):
...
1) Алгоритм унификации соптимизирует поиск.
2) Одна иконка на Драконе - одно условие на человеческом языке, без лишней детализации.
- хотя исходная постановка, как я понял, предполагала написание императива человеком, без перекладывания его генерации на процесс разбора логической модели... Но главное - если модель неимперативная, то техноязык здесь если и нужен - то только в понимании как импер-ЯУЗа, т.е. формы записи пакетника для логической среды... если она такой язык управления заданиями поддерживает...

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

Между прочим, в Р-схеме (как и в скобочной) границы цикла далеко не так скрыты, как в Д-схеме...

Автор:  Владимир Паронджанов [ Вторник, 30 Апрель, 2013 15:47 ]
Заголовок сообщения:  Re: Алгоритм "Смерть Кощея" от Петра Алмазова

В сообщении viewtopic.php?p=77169#p77169 SergeyNK писал(а):
Вот получил в редакторе Тышова:


Дракон-схема, которую создал SergeyNK с помощью редактора Тышова, очень интересная и (как будто) правильная.

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

Хочу подчеркнуть, что сам факт того, что данная схема получена с помощью редактора Тышова не является доказательством. Это необходимое, но не достаточное условие.
Иными словами, я ставлю вопрос о том, чтобы получить достаточное условие.

Необходимо найти и представить математическое доказательство того, что дракон-схема (алгоритм) нарисованная SergeyNK с помощью редактора Тышова является правильной.

До сих пор подобные математические доказательства на нашем форуме не приводились.

Приглашаю желающих, которые пожелают выполнить эту отнюдь не простую работу.

Подсказка для тех, кто хочет попробовать свои силы:


Ну и конечно, надо детально изучить книгу:
Цитата:
Паронджанов В. Д. Учись писать, читать и понимать алгоритмы. Алгоритмы для правильного мышления. Основы алгоритмизации. — М.: ДМК Пресс, 2012. — 520 с. — ISBN 978-5-94074-800-7

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