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

Изображение case/switch
https://forum.drakon.su/viewtopic.php?f=78&t=2283
Страница 1 из 2

Автор:  Петр Приклонский [ Вторник, 26 Январь, 2010 13:30 ]
Заголовок сообщения:  Изображение case/switch

Уважаемые Гуру!

Не могли бы Вы ответить на такой вопрос...
Рассматриваю макроикону ДРАКОНА "Переключатель". Икона "Выбор" разделяет программу на ветки "Вариант". А если ни один вариант не совпадает с условием выбора?
Владимир Даниелович вводит "Вариант" "в остальных случааях" - понятно, но...
В редакторе Геннадия Николаевича "в остальных случааях" это тоже один из вариантов. В рельной же трансляции существует неотображаемая ветка помимо веток с вариантами. Как быть? Что-то мой интелект буксует...

Автор:  Рэйлвэй Каген [ Вторник, 26 Январь, 2010 16:34 ]
Заголовок сообщения:  Re: Сравнение Дракона со всякими другими : )

Петр Приклонский писал(а):
..существует неотображаемая ветка помимо веток с вариантами. Как быть?
Если я Вас правильно понял, то речь о пустой ветке "else" внутри конструкций "case"(Delphi) или "switch"(Си). Которую никто и не пишет в сорцах, раз уж она пустая, и при этом все знают как это будет работать.. Но в этом случае Вы совершенно верно рассуждали - в Драконе такой маршрут должен быть указан явно:
Вложение:
case_else.PNG
case_else.PNG [ 5.04 КБ | Просмотров: 24265 ]

Автор:  Владимир Паронджанов [ Вторник, 26 Январь, 2010 17:29 ]
Заголовок сообщения:  Re: Сравнение Дракона со всякими другими : )

Петр Приклонский писал(а):
Как быть? .


Уважаемый Петр Приклонский!

Удовлетворены ли Вы ответом, что дал Рэйлвэй Каген?
Если нет, то как, на Ваш взгляд, следует ответить на Ваш вопрос?
Может быть, на Ваш взгляд, здесь спрятана какая-то ошибка? Если да, то
как Вы предложили бы исправить ошибку?

Спасибо

Автор:  Петр Приклонский [ Вторник, 26 Январь, 2010 18:02 ]
Заголовок сообщения:  Re: Изображение case/switch

Уважаемый Владимир Даниелович!

К сожалению я не удовлетворен ответом.
1. Мне кажется что в блоке "Переключатель" есть место для отдельного "Варианта" "Иначе"( аналог "default:"), т.к. после него может идти новое "Действие". (Прошу меня простить, но я пока еще мыслю в категориях Си).
2. В и.с. DRAKON после трансляции переключателя программа попадает на выполнения "Варианта" в крайней левой ветке, что, мне кажется, совсем не очевидно и не правомерно.

Автор:  Петр Приклонский [ Вторник, 26 Январь, 2010 19:01 ]
Заголовок сообщения:  Re: Изображение case/switch

Коментарий к выше изложенному.

Вложения:
Case_Default.PNG
Case_Default.PNG [ 7.42 КБ | Просмотров: 24259 ]

Автор:  Евгений Темиргалеев [ Вторник, 26 Январь, 2010 20:03 ]
Заголовок сообщения:  Re: Изображение case/switch

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

Если отбраковать аварийную ситуацию заранее (к процессу работы светофора она отношения не имеет) и назвать схему более точно --- "Работающий светофор", то варианту "Иначе" в переключателе места не будет.

Автор:  Владимир Паронджанов [ Вторник, 26 Январь, 2010 20:23 ]
Заголовок сообщения:  Re: Изображение case/switch

Петр Приклонский писал(а):

К сожалению я не удовлетворен ответом.
2. В и.с. DRAKON после трансляции переключателя программа попадает на выполнения "Варианта" в крайней левой ветке, что, мне кажется, совсем не очевидно и не правомерно.


1. Я сделал картинку. Она Вас устраивает?
2. На замечание об и.с. DRAKON ответит Тышов.
3. Замечание Евгения у меня не вызывает возражений. Но, как я понимаю, Петр хочет
получить результат именно о светофоре, а не о Работающем светофоре. Или я не прав?
Вложение:
Комментарий к файлу: ЛЮБОЙ светофор ( в частном случае, не работающий)
Рис. 13.png
Рис. 13.png [ 14.82 КБ | Просмотров: 24232 ]


Наверно, мой рисунок можно упростить. Убрать икону комментарий, а в правой
иконе "вариант" написать "Светофор не работает". В этом случае "Иначе" не нужно.
Или я не прав?

Автор:  ==== [ Вторник, 26 Январь, 2010 21:11 ]
Заголовок сообщения:  Re: Изображение case/switch

Петр Приклонский писал(а):
2. В и.с. DRAKON после трансляции переключателя программа попадает на выполнения "Варианта" в крайней левой ветке, что, мне кажется, совсем не очевидно и не правомерно.
В и.с. DRAKON блок "Переключатель" транслируется (Си) в набор if () then goto, а не в switch. Каждый "Вариант" блока "Переключатель" имеет свой шампур.

Автор:  Петр Приклонский [ Вторник, 26 Январь, 2010 21:28 ]
Заголовок сообщения:  Re: Изображение case/switch

С Евгением согласен отчасти. Проверка на допустимость переменной выбора дополнительная нагрузка на схему.

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

Наверно, мой рисунок можно упростить. Убрать икону комментарий, а в правой
иконе "вариант" написать "Светофор не работает". В этом случае "Иначе" не нужно.
Или я не прав?


Извините, отвечу вопросом на вопрос, действие "идти" и "идти осторожно" одно и тоже?

Автор:  Петр Приклонский [ Вторник, 26 Январь, 2010 21:48 ]
Заголовок сообщения:  Re: Изображение case/switch

Геннадий Тышов писал(а):
В и.с. DRAKON блок "Переключатель" транслируется (Си) в набор if () then goto, а не в switch. Каждый "Вариант" блока "Переключатель" имеет свой шампур.


Посмотрите, пожалуйста текст.

// 12. Выбор // Светофор
......
if Usl=15 then goto L19; // Красный
if Usl=16 then goto L20; // Зеленый
****** обратите внимание если светофор не "красный" и не "зеленый"
****** выполниться действие по ветке "красный"
// 15. Вариант // Красный
L19:
// 19. Действие // ждать
......
L11:
// 11. Конец // Конец
......
//
// ==================== Шампур
// 16. Вариант // Зеленый
L20:
// 20. Действие // идти
......
goto L11;
end;

Вложения:
Светофор.png
Светофор.png [ 4.08 КБ | Просмотров: 24234 ]

Автор:  Петр Приклонский [ Вторник, 26 Январь, 2010 22:09 ]
Заголовок сообщения:  Re: Изображение case/switch

Уважаемые оппоненты!
Я понял! У Геннадия Николаевича сделано как раз то, что мне нужно. Левая ветка "вариант" и есть мною искомый "default", только очень не явно. Не кажется ли Вам, что это надо отразить в языке?

Автор:  ==== [ Вторник, 26 Январь, 2010 22:13 ]
Заголовок сообщения:  Re: Изображение case/switch

В вашей схеме нет варианта "если светофор не "красный" и не "зеленый"" следовательно такая ситуация не возникает.

Сгенерированный код полный и при этом избыточный. Код "if Usl=15 then goto L19; // Красный" может отсутствовать в языке СИ, а в языке КП он обязательный.

В справке сказано В иконе «Выбор» переменой «Условие» должно присваиваться значение номера иконы «Вариант» для передачи на нее управления. Анализ должен быть полным и обеспечивать передачу управления ко всем иконам «Вариант» блока «Переключатель»..

Автор:  Рэйлвэй Каген [ Вторник, 26 Январь, 2010 23:37 ]
Заголовок сообщения:  Re: Изображение case/switch

По-моему, тут просто в трансляторе косяк. Эмуляция switch на последовательных проверках всегда должна заканчиваться безусловным переходом, выносящий управление за пределы тела switch. Посмотреть можно, например, у Касперски.

Но правило Дракона об отсутствии обрывов маршрутов последняя схема всё-таки нарушает. Для всех непредусмотренных вариантов маршрут выполнения обрывается.

Автор:  ==== [ Среда, 27 Январь, 2010 05:42 ]
Заголовок сообщения:  Re: Изображение case/switch

Рэйлвэй Каген писал(а):
По-моему, тут просто в трансляторе косяк.
Нет, все без косяка.
Повторю еще раз. В и.с. DRAKON блок "Переключатель" транслируется (Си) в набор if () then goto, а не в switch. Каждый "Вариант" блока "Переключатель" имеет свой шампур. Конструкция языка Си switch не используется.
Так как в наборе if выполнена проверка для каждого варианта, то нет передачи управления ниже набора.

Цитата:
Но правило Дракона об отсутствии обрывов маршрутов последняя схема всё-таки нарушает. Для всех непредусмотренных вариантов маршрут выполнения обрывается.
В Драконе не бывает непредусмотренных маршрутов и нет обрывов маршрута.

Петр Приклонский, Вы ведете разговор о трансляции в язык Си и о switch, а в http://forum.oberoncore.ru/viewtopic.php?p=41221#p41221 предлагаете смотреть на код Delphi.

Автор:  Рэйлвэй Каген [ Среда, 27 Январь, 2010 08:45 ]
Заголовок сообщения:  Re: Изображение case/switch

Геннадий Тышов писал(а):
Так как в наборе if выполнена проверка для каждого варианта, то нет передачи управления ниже набора.
Спасибо, что лишний раз подтвердили. Вот в этом-то и состоит косяк.

Автор:  Владимир Паронджанов [ Среда, 27 Январь, 2010 11:00 ]
Заголовок сообщения:  Re: Изображение case/switch

Цитата:
Извините, отвечу вопросом на вопрос, действие "идти" и "идти осторожно" одно и тоже?


Конечно, нет. Иди - это одно.
А "Иди осторожно" - совсем другое.

Когда я перехожу оживленный перекресток, на котором светофор сломался (не работает),
я буду крутить головой налево и направо (то есть проводить дополнительные проверки),
чтобы не угодить под машину

Автор:  ==== [ Среда, 27 Январь, 2010 18:54 ]
Заголовок сообщения:  Re: Изображение case/switch

Рэйлвэй Каген писал(а):
Спасибо, что лишний раз подтвердили. Вот в этом-то и состоит косяк.
Извините меня, я Вас не понял, утверждение без аргументации. Какие основания для утверждения о косяке? Может, что-то я не смог объяснить?

Автор:  and007 [ Среда, 27 Январь, 2010 20:48 ]
Заголовок сообщения:  Re: Изображение case/switch

Думаю иконка "иначе" или "иное" необходима и как аналог default и как средство построения двух или трех этажных многовариантных переключателей (например на 10-16 вариантов)
Еще варинт применения - обработка исключений.

Автор:  Рэйлвэй Каген [ Среда, 27 Январь, 2010 21:51 ]
Заголовок сообщения:  Re: Изображение case/switch

Геннадий Тышов писал(а):
.. утверждение без аргументации.
В качестве аргументации я выше приводил работу Касперски. Если это считается "без аргументации", то искать ещё что-то ещё мне просто лень. Спасибо.

Автор:  ==== [ Среда, 27 Январь, 2010 22:09 ]
Заголовок сообщения:  Re: Изображение case/switch

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

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