DRAKON.SU

Текущее время: Понедельник, 16 Июнь, 2025 22:32

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




Начать новую тему Ответить на тему  [ Сообщений: 23 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Изображение case/switch
СообщениеДобавлено: Вторник, 26 Январь, 2010 13:30 

Зарегистрирован: Четверг, 21 Январь, 2010 18:06
Сообщения: 63
Откуда: Нижний Новгород
Уважаемые Гуру!

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 26 Январь, 2010 16:34 

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 26 Январь, 2010 17:29 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5999
Откуда: Москва
Петр Приклонский писал(а):
Как быть? .


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

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

Спасибо


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Изображение case/switch
СообщениеДобавлено: Вторник, 26 Январь, 2010 18:02 

Зарегистрирован: Четверг, 21 Январь, 2010 18:06
Сообщения: 63
Откуда: Нижний Новгород
Уважаемый Владимир Даниелович!

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Изображение case/switch
СообщениеДобавлено: Вторник, 26 Январь, 2010 19:01 

Зарегистрирован: Четверг, 21 Январь, 2010 18:06
Сообщения: 63
Откуда: Нижний Новгород
Коментарий к выше изложенному.


Вложения:
Case_Default.PNG
Case_Default.PNG [ 7.42 КБ | Просмотров: 24020 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Изображение case/switch
СообщениеДобавлено: Вторник, 26 Январь, 2010 20:03 
Модератор
Аватара пользователя

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Изображение case/switch
СообщениеДобавлено: Вторник, 26 Январь, 2010 20:23 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5999
Откуда: Москва
Петр Приклонский писал(а):

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


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


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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Изображение case/switch
СообщениеДобавлено: Вторник, 26 Январь, 2010 21:11 

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


Последний раз редактировалось ==== Вторник, 26 Январь, 2010 21:32, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Изображение case/switch
СообщениеДобавлено: Вторник, 26 Январь, 2010 21:28 

Зарегистрирован: Четверг, 21 Январь, 2010 18:06
Сообщения: 63
Откуда: Нижний Новгород
С Евгением согласен отчасти. Проверка на допустимость переменной выбора дополнительная нагрузка на схему.

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

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


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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Изображение case/switch
СообщениеДобавлено: Вторник, 26 Январь, 2010 21:48 

Зарегистрирован: Четверг, 21 Январь, 2010 18:06
Сообщения: 63
Откуда: Нижний Новгород
Геннадий Тышов писал(а):
В и.с. 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 КБ | Просмотров: 23995 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Изображение case/switch
СообщениеДобавлено: Вторник, 26 Январь, 2010 22:09 

Зарегистрирован: Четверг, 21 Январь, 2010 18:06
Сообщения: 63
Откуда: Нижний Новгород
Уважаемые оппоненты!
Я понял! У Геннадия Николаевича сделано как раз то, что мне нужно. Левая ветка "вариант" и есть мною искомый "default", только очень не явно. Не кажется ли Вам, что это надо отразить в языке?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Изображение case/switch
СообщениеДобавлено: Вторник, 26 Январь, 2010 22:13 

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

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Изображение case/switch
СообщениеДобавлено: Вторник, 26 Январь, 2010 23:37 

Зарегистрирован: Воскресенье, 04 Ноябрь, 2007 23:01
Сообщения: 511
По-моему, тут просто в трансляторе косяк. Эмуляция switch на последовательных проверках всегда должна заканчиваться безусловным переходом, выносящий управление за пределы тела switch. Посмотреть можно, например, у Касперски.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Изображение case/switch
СообщениеДобавлено: Среда, 27 Январь, 2010 05:42 

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

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Изображение case/switch
СообщениеДобавлено: Среда, 27 Январь, 2010 08:45 

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


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

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5999
Откуда: Москва
Цитата:
Извините, отвечу вопросом на вопрос, действие "идти" и "идти осторожно" одно и тоже?


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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Изображение case/switch
СообщениеДобавлено: Среда, 27 Январь, 2010 18:54 

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Изображение case/switch
СообщениеДобавлено: Среда, 27 Январь, 2010 20:48 

Зарегистрирован: Среда, 06 Май, 2009 21:00
Сообщения: 32
Думаю иконка "иначе" или "иное" необходима и как аналог default и как средство построения двух или трех этажных многовариантных переключателей (например на 10-16 вариантов)
Еще варинт применения - обработка исключений.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Изображение case/switch
СообщениеДобавлено: Среда, 27 Январь, 2010 21:51 

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Изображение case/switch
СообщениеДобавлено: Среда, 27 Январь, 2010 22:09 

Зарегистрирован: Воскресенье, 06 Апрель, 2008 14:43
Сообщения: 1657
Рэйлвэй Каген, если лень, то оставим вопрос о косяке без рассмотрения, Вас здесь не было.


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

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


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

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


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

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