DRAKON.SU

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

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




Начать новую тему Ответить на тему  [ Сообщений: 172 ]  На страницу Пред.  1, 2, 3, 4, 5 ... 9  След.
Автор Сообщение
СообщениеДобавлено: Воскресенье, 12 Май, 2013 00:44 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 189
Откуда: Россия, Санкт-Петербург
Илья Ермаков писал(а):
В пользу фиксации "да"-"нет" - что скользить взглядом как-то будет быстрее, если знать, где "да".
Но тогда часто придётся ставить отрицание к вопросу.
Предлагаю ещё вариант: отметить только одну из ветвей текстом "да", а ветвь "нет" никак не отмечать. Тогда с первого взгляда будет видно, где "да", а где нет ничего.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 12 Май, 2013 01:07 

Зарегистрирован: Понедельник, 09 Ноябрь, 2009 17:29
Сообщения: 904
Откуда: Россия, Питер
Илья Ермаков писал(а):
В пользу свободных "да" - "нет" - большая свобода "красиво сформулировать вопрос".

Мне ближе этот вариант.
Красиво сформулированный вопрос повышает человекопонимаемость алгоритма, имхо.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 12 Май, 2013 01:21 
Аватара пользователя

Зарегистрирован: Пятница, 11 Май, 2007 21:57
Сообщения: 234
Откуда: Украина, Киев
В моём ДРОН-трансляторе, в случае необходимости инверсии условия развилки, это выполняется транслятором автоматически в получаемом исходном коде. На схеме же условие записывается без каких-либо инверсий и расстановка Да/Нет может быть произвольной.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 12 Май, 2013 10:38 

Зарегистрирован: Воскресенье, 06 Апрель, 2008 14:43
Сообщения: 1657
http://forum.oberoncore.ru/viewtopic.php?p=79999#p79999

Ответил В.Д. Паронджанову
http://forum.oberoncore.ru/viewtopic.php?p=80017#p80017
"ИС Дракон. Реализация Маршрутного транслятора."


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 12 Май, 2013 11:19 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5999
Откуда: Москва
Ильченко Эдуард писал(а):
            Илья Ермаков писал(а):
            В пользу свободных "да" - "нет" - большая свобода "красиво сформулировать вопрос".
Мне ближе этот вариант.
Красиво сформулированный вопрос повышает человекопонимаемость алгоритма, имхо.

Согласен


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 12 Май, 2013 11:39 
Аватара пользователя

Зарегистрирован: Вторник, 04 Октябрь, 2011 17:45
Сообщения: 586
Ильченко Эдуард писал(а):
Илья Ермаков писал(а):
В пользу свободных "да" - "нет" - большая свобода "красиво сформулировать вопрос".

Мне ближе этот вариант.
Красиво сформулированный вопрос повышает человекопонимаемость алгоритма, имхо.

присоединяюсь


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 12 Май, 2013 11:46 
Аватара пользователя

Зарегистрирован: Вторник, 04 Октябрь, 2011 17:45
Сообщения: 586
Alexey_Donskoy писал(а):
- Во-первых, само понятие "главного маршрута" достаточно размытое.

Понятие главного маршрута не размытое.
Оно означает "happy path - по центру, нежелательный путь - справа".
Такая ассиметрия есть почти всегда.


Но!
Правило главного маршрута ("чем правее, тем хуже") не действует для выхода из цикла.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 12 Май, 2013 11:59 
Аватара пользователя

Зарегистрирован: Вторник, 04 Октябрь, 2011 17:45
Сообщения: 586
Маршрутный транслятор - интересная и сложная алгоритмическая задача.
В старых версиях для этих целей использовался поиск.
Но потом от поиска удалось отказаться в пользу "обычного" алгоритма.

Во вложении находится алгоритм трансляции, применяемый в настоящее время в DRAKON Editor.
Само собой, на ДРАКОНе. Сгенерённый код на Tcl прилагается.

Он работает со слепышом, а не с самой схемой.

Это довольно хитрый алгоритм. Хорошая проверка для ДРАКОНа.
Для тех, кто будет смотреть: центральная процедура называется generate3.


Вложения:
Комментарий к файлу: Перевод ДРАКОН-схемы в исходный код в DRAKON Editor.
nogoto.zip [75.55 КБ]
Скачиваний: 433
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 12 Май, 2013 13:52 
Аватара пользователя

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 1097
Откуда: Россия, Чебоксары
Илья Ермаков писал(а):
От сюда волкосыто-овцецелое предложение: просто повысить "скользимость взглядом" по развилкам каким-то образом.
В который раз уже по кругу.
Ну было же, было лет пять как такое предложение, не помню даже чьё, может, и моё - уйти от идиотской формы развилки, которая никакого визуального намёка на маршрут не даёт, а просто придумана для простоты черчения НА БУМАГЕ стандартными ЧЕРТЁЖНЫМИ ИНСТРУМЕНТАМИ ТОГО ВРЕМЕНИ!
Это может быть, например, треугольник с закруглёнными верхними (или левыми) углами, направление острого угла которого покажет маршрут ДА.

Взял бы Тышов или Митькин, попробовали бы - и все бы увидели, что это хорошо, на том бы и вопрос закрыли.
Ан нет, авторский стандарт неприкосновенен, и в очередной раз обсуждаем "проблему да/нет" - высосанную из пальца...

Степан Митькин писал(а):
Понятие главного маршрута не размытое.
Оно означает "happy path - по центру, нежелательный путь - справа".
Такая ассиметрия есть почти всегда.
Я повторяю конкретный вопрос - что считать "желательным" - то, что выполняется в тысячу раз чаще, или то, что выполняется редко, но совершает некую важную (для автора) работу)?!


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 12 Май, 2013 14:17 

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


Степан Борисович, у меня просьба.

1. Возьмите какой-нибудь сложный слепыш.

2. Подайте его на вход Вашего Маршрутного транслятора.

3. Зафиксируйте результат маршрутной трансляции.

4. Выложите здесь:

          4.1. Слепыш (подаваемый на вход маршрутного транслятора) png.
          4.2. Результат маршрутной трансляции слепыша (код программы ).

Пример сложного слепыша:

Вложение:
6. Рис. 218 Лист 1                (1)..png
6. Рис. 218 Лист 1 (1)..png [ 208.82 КБ | Просмотров: 17384 ]


Я выложил этот слепыш просто для примера. Копировать его НЕ нужно.
Возьмите любой слепыш из собственных запасов.

Спасибо


Последний раз редактировалось Владимир Паронджанов Воскресенье, 12 Май, 2013 14:28, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 12 Май, 2013 14:27 

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 12 Май, 2013 14:35 
Аватара пользователя

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 1097
Откуда: Россия, Чебоксары
Владимир Паронджанов писал(а):
Пример сложного слепыша
Кстати, опять заметка по поводу.
На мой взгляд, вопиющее нарушение когнитивной эргономики:
Вложение:
bad-for.png
bad-for.png [ 3.41 КБ | Просмотров: 17379 ]

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 12 Май, 2013 14:37 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5999
Откуда: Москва
Геннадий Николаевич, Вы правы. Результат будет (в строгом смысле слова) НЕКОРРЕКТНЫМ.

Но здесь корректность не нужна.

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

Мои пять примеров представляют большой интерес.
Они наглядно показывают, что СУЩЕСТВУЕТ ПРИНЦИПИАЛЬНАЯ ВОЗМОЖНОСТЬ МАРШРУТНОЙ ТРАНСЛЯЦИИ СЛЕПЫШЕЙ.

Обратите внимание на желтые прямоугольники.
viewtopic.php?p=79978#p79978
Они указывают на НЕзаполненные места в программе.

После того как желтые прямоугольники будут заполнены (правильным) кодом, некорректная (незавершенная) программа превратится в корректную.
viewtopic.php?p=79978#p79978


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 12 Май, 2013 15:00 

Зарегистрирован: Понедельник, 09 Ноябрь, 2009 17:29
Сообщения: 904
Откуда: Россия, Питер
Alexey_Donskoy писал(а):
На мой взгляд, вопиющее нарушение когнитивной эргономики:

Это да.
Интересно, в каком разгонном блоке работает эта программа : )


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 12 Май, 2013 15:05 

Зарегистрирован: Воскресенье, 06 Апрель, 2008 14:43
Сообщения: 1657
Alexey_Donskoy писал(а):
В данном случае для цикла FOR это означает, что его начало и конец обязаны находиться на одном "шампуре".Прошу включить это в правила.
Правильное замечание.

В ИС Дракон иконы ЦиклДляНачало и ЦиклДляКонец находятся на одном шампуре.

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

=========

ГОСТ позволяет расширить использование указанных икон, в ГОСТе они именуются "Границы цикла", их можно использовать в качестве границ циклов WHILE и DO WHILE, тогда снимаются ограничения для выхода из внутренних циклов.

Выходы из циклов вправо снимают противоречие отмеченное С. Митькиным "Но! Правило главного маршрута ("чем правее, тем хуже") не действует для выхода из цикла.".

Данное предложение было сделано Приклонским.


Последний раз редактировалось ==== Воскресенье, 12 Май, 2013 15:14, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 12 Май, 2013 15:09 

Зарегистрирован: Понедельник, 09 Ноябрь, 2009 17:29
Сообщения: 904
Откуда: Россия, Питер
Владимир Паронджанов писал(а):
1. Возьмите какой-нибудь сложный слепыш.

У меня есть пример для DRAKON Editor.
Вложение:
dummy.drn [17 КБ]
Скачиваний: 695

Вложение:
dummy.png
dummy.png [ 8.89 КБ | Просмотров: 17372 ]

Трансляция в C++
Код:
/* Autogenerated with DRAKON Editor 1.17 */
#include "dummy.h"





static void Untitled();

static void Untitled() {
    item_69 :
    d0
   
    item_35 :
    if (q4) {
        goto item_68;
    } else {
    }
   
    // item 22
    if (q1) {
    } else {
        goto item_270001;
    }
   
    // item 16
    if (q2) {
    } else {
        goto item_63;
    }
   
    // item 19
    if (q3) {
        goto item_68;
    } else {
    }
   
    // item 40
    if ((q5) || (q6)) {
        goto item_69;
    } else {
    }
   
    // item 420001
    if (c2 == v4) {
        goto item_63;
    } else {
    }
   
    // item 420002
    if (c2 == v5) {
    } else {
        // item 420003
        UnexpectedBranch(c2);
    }
   
    // item 560001
    if (c3 == v6) {
        goto item_500001;
    } else {
    }
   
    // item 560002
    if (c3 == v7) {
    } else {
        // item 560003
        UnexpectedBranch(c3);
    }
   
    // item 48
    if (q9) {
        goto item_69;
    } else {
    }
   
    item_500001 :
    if ((c4 == v8) || (c4 == v9)) {
    } else {
        // item 500003
        UnexpectedBranch(c4);
    }
   
    item_63 :
    if ((q10) && (q11)) {
        goto item_63;
    } else {
        return;
    }
   
    item_270001 :
    if (((c1 == v1) || (c1 == v2)) || (c1 == v3)) {
    } else {
        // item 270004
        UnexpectedBranch(c1);
    }
   
    // item 25
    if (q7) {
    } else {
        goto item_270001;
    }
   
    item_68 :
    d1
   
    // item 38
    if (q8) {
        goto item_35;
    } else {
        goto item_69;
    }
   
}


Трансляция в Python
Код:
# Autogenerated with DRAKON Editor 1.17

def Untitled():
   
    _next_item_ = 69
    while True:
        if _next_item_ == 69:
            d0
            _next_item_ = 35
   
        elif _next_item_ == 35:
            if q4:
                _next_item_ = 68
            else:
                _next_item_ = 22
   
        elif _next_item_ == 22:
            if q1:
                _next_item_ = 16
            else:
                _next_item_ = 270001
   
        elif _next_item_ == 16:
            if q2:
                _next_item_ = 19
            else:
                _next_item_ = 63
   
        elif _next_item_ == 19:
            if q3:
                _next_item_ = 68
            else:
                _next_item_ = 40
   
        elif _next_item_ == 40:
            if (q5) or (q6):
                _next_item_ = 69
            else:
                _next_item_ = 420001
   
        elif _next_item_ == 420001:
            if c2 == v4:
                _next_item_ = 63
            else:
                _next_item_ = 420002
   
        elif _next_item_ == 420002:
            if c2 == v5:
                _next_item_ = 560001
            else:
                #item 420003
                raise Exception("Not expected:  " + str(c2))
                _next_item_ = 560001
   
        elif _next_item_ == 560001:
            if c3 == v6:
                _next_item_ = 500001
            else:
                _next_item_ = 560002
   
        elif _next_item_ == 560002:
            if c3 == v7:
                _next_item_ = 48
            else:
                #item 560003
                raise Exception("Not expected:  " + str(c3))
                _next_item_ = 48
   
        elif _next_item_ == 48:
            if q9:
                _next_item_ = 69
            else:
                _next_item_ = 500001
   
        elif _next_item_ == 500001:
            if (c4 == v8) or (c4 == v9):
                _next_item_ = 63
            else:
                #item 500003
                raise Exception("Not expected:  " + str(c4))
                _next_item_ = 63
   
        elif _next_item_ == 63:
            if (q10) and (q11):
                _next_item_ = 63
            else:
                return None
   
        elif _next_item_ == 270001:
            if ((c1 == v1) or (c1 == v2)) or (c1 == v3):
                _next_item_ = 25
            else:
                #item 270004
                raise Exception("Not expected:  " + str(c1))
                _next_item_ = 25
   
        elif _next_item_ == 25:
            if q7:
                _next_item_ = 68
            else:
                _next_item_ = 270001
   
        elif _next_item_ == 68:
            d1
            _next_item_ = 38
   
        elif _next_item_ == 38:
            if q8:
                _next_item_ = 35
            else:
                _next_item_ = 69


В связи с чем возникает вопрос:
Как убедиться в адекватности полученного текста оригинальной дракон-схеме?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 12 Май, 2013 16:12 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5999
Откуда: Москва
Ильченко Эдуард писал(а):
У меня есть пример для DRAKON Editor.

Трансляция в C++


Цитата:
/* Autogenerated with DRAKON Editor 1.17 */
#include "dummy.h"

static void Untitled();

static void Untitled() {
item_69 :
d0

item_35 :
if (q4) {
goto item_68;
} else {
}

Спасибо, конечно. Но Ваш результат не "чистый".

Ваш слепыш — не совсем слепыш.
Я пометил для примера красным "незаконные" (для слепыша) обозначения , которые в полноценном слепыше должны отсутствовать.

Погрешности объясняются тем, что Вы не стерли надписи в иконах, а уменьшили их в размере.
Я даже сумел разглядеть эти крохотные надписи внутри икон.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 12 Май, 2013 16:36 
Аватара пользователя

Зарегистрирован: Пятница, 11 Май, 2007 21:57
Сообщения: 234
Откуда: Украина, Киев
Пример маршрутной трансляции слепыша ДРОН-транслятором (http://sage.com.ua/ru.shtml?e6l0)
Вложение:
Slepish_0.png
Slepish_0.png [ 31.41 КБ | Просмотров: 17348 ]
Код:
MODULE Slepish;

CONST
  Dr000VtkExit = 0;
  Dr000Vtk0002 = 2;
  Dr000Vtk0013 = 13;
  Dr000Vtk0027 = 27;
  Dr000Vtk0036 = 36;
  Dr000Vtk0008 = 8;

PROCEDURE 0;
VAR
  Dr000Vtk: INTEGER;
BEGIN
  Dr000Vtk := Dr000Vtk0002;
  WHILE Dr000Vtk # Dr000VtkExit DO
    CASE Dr000Vtk OF
    | Dr000Vtk0002: (* 1 *)
      6
      Dr000Vtk := Dr000Vtk0013
    | Dr000Vtk0013: (* 2 *)
      IF 7 THEN
        8
        IF 9 THEN
          10
          (* 11 *)
          IF 12 THEN
            Dr000Vtk := Dr000Vtk0027
          ELSE
            Dr000Vtk := Dr000Vtk0013
          END; (* IF *)
        ELSE
          Dr000Vtk := Dr000Vtk0013
        END; (* IF *)
      ELSE
        Dr000Vtk := Dr000Vtk0008
      END; (* IF *)
    | Dr000Vtk0027: (* 3 *)
      13
      IF 14 THEN
        (* 15 *)
        IF 16 THEN
          Dr000Vtk := Dr000Vtk0036
        ELSE
          Dr000Vtk := Dr000Vtk0013
        END; (* IF *)
      ELSE
        CASE 17 OF
        | 18:
          20
          IF 21 THEN
            22
          END; (* IF *)
        | 19:
          23
        ELSE (* CASE *)
        END; (* CASE *)
        Dr000Vtk := Dr000Vtk0013
      END; (* IF *)
    | Dr000Vtk0036: (* 4 *)
      IF 24 THEN
        IF 44 THEN
          45
        END; (* IF *)
      ELSE
        IF 25 THEN
          26
          CASE 27 OF
          | 28:
            29
            IF 30 THEN
              33
            ELSE
              IF 31 THEN
                32
              END; (* IF *)
            END; (* IF *)
          | 34:
            35
          | 36:
            37
            IF 38 THEN
              39
            END; (* IF *)
          | 40:
            41
            IF 42 THEN
              43
            END; (* IF *)
          ELSE (* CASE *)
          END; (* CASE *)
        END; (* IF *)
      END; (* IF *)
      Dr000Vtk := Dr000Vtk0013
    | Dr000Vtk0008: (* 5 *)
      46
      Dr000Vtk := Dr000VtkExit
    ELSE (* CASE *)
    END (* CASE *)
  END (* WHILE *)
END 0;

END Slepish.


Вложения:
Slepish.drt [5.7 КБ]
Скачиваний: 683
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 12 Май, 2013 16:40 
Аватара пользователя

Зарегистрирован: Пятница, 11 Май, 2007 21:57
Сообщения: 234
Откуда: Украина, Киев
Владимир Паронджанов писал(а):
Ваш слепыш — не совсем слепыш.
Я пометил для примера красным "незаконные" (для слепыша) обозначения , которые в полноценном слепыше должны отсутствовать.
Погрешности объясняются тем, что Вы не стерли надписи в иконах, а уменьшили их в размере.
Я даже сумел разглядеть эти крохотные надписи внутри икон.
Так если поудалять все надписи в результирующем коде вообще ничего не будет видно :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 12 Май, 2013 16:45 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5999
Откуда: Москва
В ЧЕМ СОСТОИТ МОЯ ЦЕЛЬ В ДАННОЙ ТЕМЕ?

В том, чтобы подчеркнуть важность слепыша.

Соображения Сергея Дмитриевича Ефанова (Россия, город Липецк) заслуживают глубокого анализа. Проанализировав созданные им материалы (в том числе 4 видеоролика общей длительностью 60 минут) я попробовал сформулировать их в такой форме:

Цитата:
1. Надо разграничить две проблемы:
— проблему управления и декомпозиции (алгоритмов и программ);
— проблему линейных участков (в алгоритмах и программах).

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

3. При этом решение второй проблемы (проектирование и кодирование линейных участков) заметно облегчается.


Я хочу — с помощью участников форума — доказать (или опровергнуть) тезис о том, что слепыш языка ДРАКОН почти полностью решают проблему управления и декомпозиции, превращая сложную проблему императивного программирования в относително простую проблему проектирование и кодирование линейных участков программы.


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

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


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

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


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

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