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

Схемы Дракона и перевод его в програмный код
https://forum.drakon.su/viewtopic.php?f=62&t=5161
Страница 1 из 1

Автор:  Nikkolay-BIG [ Суббота, 28 Июнь, 2014 15:32 ]
Заголовок сообщения:  Схемы Дракона и перевод его в програмный код

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

ВОПРОС 1.

Вот графическая и его текстовая интерпретация. Правильно ли я его перевел.
Вложение:
dr2.png
dr2.png [ 42.24 КБ | Просмотров: 8348 ]


Код:

{Parondzhanov_V._Uchis_pisat_chitat_i_ponimat_algoritmy.Fragment}

program "Идем за хлебом в любую булочную"

{
Данный алгоритм годится для всех возможных случаев:
   - В продаже есть и черный, и белый хлеб
    - В продаже есть только черный хлеб
   - В продаже есть тоько белый хлеб
   - Никакого хлеба нет.
}

BEGIN
"Зайти в булочную"

IF "В продаже есть белый хлеб ?" {
   IF "В продаже есть черный хлеб ?" {
      "Купи батон белого"
      "Купи батон черного"
   }
   ELSE {
      "Купи два батона белого"
   }
}
ELSE {
   IF "В продаже есть черный хлеб ?" {
      "Купи два батона черного"
   }
   ELSE {
      COMMENT(
      Хлеба нет.
      Придется идти домой с пустыми руками.
      )
   }
}

"Отнести хлеб домой"

END




ВОПРОС 2
На изображении изображены 3 цикла.
Вложение:
dr1.png
dr1.png [ 62.96 КБ | Просмотров: 8348 ]


Вот первую я могу перевести в код:
Код:
repeat {
"Действие"
}
until "вопрос"


А вот с остальными проблема. Покажите и обьясните рисунки 73 и 74.

Если возможно без использования оператора goto.

Автор:  ==== [ Суббота, 28 Июнь, 2014 19:25 ]
Заголовок сообщения:  Re: Схемы Дракона и перевод его в програмный код

Nikkolay-BIG, с практикой программирования на языке Си с использованием ИС Дракон можно познакомиться на сайте http://www.drakon-practic.ru.

Цитата:
Если возможно без использования оператора goto.
Генерируется программный код на языке Си в стиле ассемблера.
Ассемблера без goto не бывает.
Надо понимать логику генерации и принять ее, как данность.
Эта данность определена синтаксисом используемого языка программирования.

Наработались некоторые принципы программирования с использованием ИС Дракон.
Смотрите: http://forum.easyelectronics.ru/viewtopic.php?p=327540#p327540

Автор:  Nikkolay-BIG [ Суббота, 28 Июнь, 2014 21:42 ]
Заголовок сообщения:  Re: Схемы Дракона и перевод его в програмный код

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

За ссылки спасибо, но я их смотрел.

Автор:  ==== [ Воскресенье, 29 Июнь, 2014 06:31 ]
Заголовок сообщения:  Re: Схемы Дракона и перевод его в програмный код

Nikkolay-BIG, ваш код к 1-й схеме неправильный:
исполнителю (возможно ребенку), при отсутствия хлеба, нет необходимости идти домой, возможно он пойдет гулять.

В коде поставьте метку перед оператором END и после комментария "Хлеба нет. ... " поставьте оператор Goto на метку.

Автор:  Nikkolay-BIG [ Воскресенье, 29 Июнь, 2014 10:27 ]
Заголовок сообщения:  Re: Схемы Дракона и перевод его в програмный код

Вот именно что оператор goto используется там где это не нужно. Я разбирал как и что генерирует программа. Оператор ветвеления генерируется вот по такой схеме

if (условие) goto L<NN>;

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

Вот мой код:

if (условие)
{
//если условие истино
}
else
{
// если условие ложно
}

Автор:  ==== [ Воскресенье, 29 Июнь, 2014 12:25 ]
Заголовок сообщения:  Re: Схемы Дракона и перевод его в програмный код

Nikkolay-BIG писал(а):
if (условие) goto L<NN>;

А что нельзя генерить вот по такой схеме. ...

Nikkolay-BIG, да, иначе нельзя.

Любую Дракон-схему преобразовать к структурному виду нельзя.

Почему нельзя?

Для Дракон-схем и структурного программного кода (без goto) имеется принципиальное отличие:

При структурном коде, логический оператор определяют выполнение определенного блока кода (одиночного оператора, begin ... end, { ... }). Логический оператор, при любых условиях, имеет общий выход. Логический оператор может быть вложен в другой логический оператор, уровень вложенности может быть большим.

Для Дракон-схемы, логический оператор определяет выбор направления (маршрута) передачи управления. Для логического оператора, при любых условиях, нет общего выхода, маршруты могут не соединятся, а расходятся. В сгенерированном программном коде нет вложенности операторов, исключение - вложенность в Цикл ДЛЯ.

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

Сгенерированный программный код является структурированным, в смысле такой же упорядоченности, что и размещение графических элементов в Дракон-схеме.

Nikkolay-BIG писал(а):
И вообще генератор кода надо вытащить отдельно
В этом нет необходимости. Реализовано в одном исполнительном файле, т.е. дополнительно ничего не требуется и не потеряете что либо.

Автор:  Владимир Паронджанов [ Вторник, 01 Июль, 2014 16:16 ]
Заголовок сообщения:  Re: Схемы Дракона и перевод его в програмный код

Nikkolay-BIG писал(а):
Здравствуйте, я интересуюсь языком ДРАКОН... Я начал читать книгу Паронджанова "Учись писать, читать, и понимать алгоритмы". У меня возникли некоторые вопросы...

ВОПРОС 2
На изображении изображены 3 цикла.
Изображение

Вот первую я могу перевести в код:
Код:
repeat {
"Действие"
}
until "вопрос"


А вот с остальными проблема. Покажите и обьясните рисунки 73 и 74.

Если возможно без использования оператора goto.


Николай, спасибо за вопрос. На рис. 72, 73 и 74 изображены три классических цикла, которые можно изобразить без goto. Смотри Википедию здесь и далее.

Рис. 72. Цикл ДО — это цикл с постусловием. Постусловие — значит условие нарисовано ПОСЛЕ действия (ниже действия).

Рис. 73. Цикл ПОКА — это цикл с предусловием. Предусловие — значит, условие нарисовано перед действием (выше действия).

Рис. 74. Гибридный цикл — это цикл с выходом из середины

По моим синим ссылкам откройте Википедию и внимательно прочитайте три подраздела. Там подробно описано, как перевести эти три цикла в код — без использования goto.

Автор:  Rifat [ Среда, 02 Июль, 2014 15:25 ]
Заголовок сообщения:  Re: Схемы Дракона и перевод его в програмный код

Гибридный цикл можно записать и в структурном виде. Первое действие назовем Действие1, а второе - Действие2. Тогда можно записать такой код:
Действие1;
WHILE Вопрос DO
Действие2;
Действие1;
END;

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