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. Вот графическая и его текстовая интерпретация. Правильно ли я его перевел. Вложение: Код: {Parondzhanov_V._Uchis_pisat_chitat_i_ponimat_algoritmy.Fragment} program "Идем за хлебом в любую булочную" { Данный алгоритм годится для всех возможных случаев: - В продаже есть и черный, и белый хлеб - В продаже есть только черный хлеб - В продаже есть тоько белый хлеб - Никакого хлеба нет. } BEGIN "Зайти в булочную" IF "В продаже есть белый хлеб ?" { IF "В продаже есть черный хлеб ?" { "Купи батон белого" "Купи батон черного" } ELSE { "Купи два батона белого" } } ELSE { IF "В продаже есть черный хлеб ?" { "Купи два батона черного" } ELSE { COMMENT( Хлеба нет. Придется идти домой с пустыми руками. ) } } "Отнести хлеб домой" END ВОПРОС 2 На изображении изображены 3 цикла. Вложение: Вот первую я могу перевести в код: Код: 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/ |