DRAKON.SU

Текущее время: Вторник, 17 Июнь, 2025 08:05

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




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
СообщениеДобавлено: Суббота, 28 Июнь, 2014 15:32 

Зарегистрирован: Пятница, 27 Июнь, 2014 07:02
Сообщения: 3
Здравствуйте, я интерисуюсь языком ДРАКОН уже давно, вплотную с ним не занимался. Появилось немного времени, я начал читать книгу Параджанова Учимся читать, писать алгоритмы. У меня возникли некоторые вопросы.

ВОПРОС 1.

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


Код:

{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 КБ | Просмотров: 8350 ]


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


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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 28 Июнь, 2014 19:25 

Зарегистрирован: Воскресенье, 06 Апрель, 2008 14:43
Сообщения: 1657
Nikkolay-BIG, с практикой программирования на языке Си с использованием ИС Дракон можно познакомиться на сайте http://www.drakon-practic.ru.

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 28 Июнь, 2014 21:42 

Зарегистрирован: Пятница, 27 Июнь, 2014 07:02
Сообщения: 3
Спасибо что ответили, но мне интересует кодогенерация по схемам ДРАКОН. Как преобразовать схему в исходный код.
Немного разобрался, осталось некоторые заметки. Примерно как я перевел в текстовое описание вопроса 1 см. сверху

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 29 Июнь, 2014 06:31 

Зарегистрирован: Воскресенье, 06 Апрель, 2008 14:43
Сообщения: 1657
Nikkolay-BIG, ваш код к 1-й схеме неправильный:
исполнителю (возможно ребенку), при отсутствия хлеба, нет необходимости идти домой, возможно он пойдет гулять.

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 29 Июнь, 2014 10:27 

Зарегистрирован: Пятница, 27 Июнь, 2014 07:02
Сообщения: 3
Вот именно что оператор goto используется там где это не нужно. Я разбирал как и что генерирует программа. Оператор ветвеления генерируется вот по такой схеме

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

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

Вот мой код:

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 29 Июнь, 2014 12:25 

Зарегистрирован: Воскресенье, 06 Апрель, 2008 14:43
Сообщения: 1657
Nikkolay-BIG писал(а):
if (условие) goto L<NN>;

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

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

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

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

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

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

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

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

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 01 Июль, 2014 16:16 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5999
Откуда: Москва
Nikkolay-BIG писал(а):
Здравствуйте, я интересуюсь языком ДРАКОН... Я начал читать книгу Паронджанова "Учись писать, читать, и понимать алгоритмы". У меня возникли некоторые вопросы...

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

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


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

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


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

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

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

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 02 Июль, 2014 15:25 

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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

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


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

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


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

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