ЗАДАНИЕ XXII

Тема: Условные операторы. Порядок вычисления имиджей. Двухфазность переменных.
Цель: Краткое знакомство с условными оператором и оператором выбора в среде Stratum Computer. Изменение порядка имиджей. Две фазы переменных в среде Stratum Computer.

Перед началом работы необходимо:

pin2.gif (1000 bytes) владеть работой с клавиатурой и мышкой;
pin2.gif (1000 bytes) владеть основными приемами работы в системе Stratum.

 

Условный оператор if.

Условный оператор в среде Stratum Computer имеет следующий вид:

if(<условие>)

...

[else]

...

endif

Если значение выражения в условии оператора if больше 0, то происходит переход на блок команд, следующий непосредственно за условием. Иначе выполняется блок присвоений следующий, за ключевым словом else. Конец области действия оператора if помечается ключевым словом endif. Допускается вложенность одной конструкции if в другую.

Оператор switch. Применяется  в среде Stratum Computer для выбора одного или нескольких из нескольких блоков команд в зависимости от условий.

switch

case (условие)

....

[case (условие)]

...

[default]

endswitch

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

 

Порядок вычислений имиджей. В Stratume вычисление имиджей происходят последовательно, поэтому часто является важным в каком порядке происходит вычисление имиджей.

Порядок вычисления имиджей определяется от нижних к верхним уровням иерархии. На одном уровне (схеме) порядок вычисления можно редактировать (Команда меню Формат | Редактировать порядок вычислений).

Для редактирования порядка вычислений на схеме нажмите на кнопку "Редактирование порядка вычислений", или в меню "Формат" выберите пункт "Редактировать порядок вычислений".

После этого схема переходит в состояние "Редактирования порядка вычислений", при этом у каждого имиджа появится изображение его порядкового номера и курсор изменится на изображение цифр с перекрестием.

Теперь кликните мышкой на тот имидж, который должен выполняться первым. Далее кликните на второй и т.д.

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

Для прекращения редактирования порядка вычислений нажмите ESC, правую кнопку мышки или перейдите в любой другой режим работы схемы.

Для изменения порядка вычислений из модели можно использовать функции: SetCalcOrder и GetCalcOrder.

Двухфазность переменных. Значения различных переменных синхронизированы, так как сущности проявляют себя параллельно во времени. Но компьютер обрабатывает математические модели имиджей по очереди, остальные ждут очереди на обработку, не изменяясь. Таким образом, у переменной существует значение до и после обработки, но до окончания шага обработки всех переменных. Это называется двумя фазами одной переменной. Значение переменной в общем случае (стандартно) доступно для наблюдения после ее изменения, а другим переменным - на начале следующего шага. Если переменную - источник информации пометить знаком “~”, то ее новое значение другим переменным будет доступно еще до конца шага. Следует иметь в виду, что в последнем случае на конечный результат влияет порядок изменения (вычисления) переменных, который может быть дополнительно определен пользователем.

Задание 1.

       1. Создайте новый проект. Скопируйте здесь нужные для работы имиджи здесь. Они содержаться в zip-файле который нужно развернуть в рабочий директорий проекта. Из скопированных имиджей вставьте имидж Interface в схему проекта.

      2. Создайте новый имидж, который будет определять, попадает ли точка на плоскости с координатами x,y в замкнутую область, ограниченную фигурами: квадратом и окружностью. Квадрат зададим координатами двух противоположных вершине xmin , xmax , ymin , ymax. Окружность зададим координатами центра (x1,y1)и радиусом R.

Введите текст имиджа

if (~Pressed)
if ((~x-~x1)^2+(~y-~y1)^2<=~R^2 && ~x<=~xmax && ~y<=~ymax && ~x>=~xmin && ~y>=~ymin)
in_figure:=1
else
in_figure:=0
endif
Pressed:=0
endif

Первое условие проверяет поступили ли координаты с имиджа Interface, который реализует ввод координат в диалоговом режиме. Внутреннее условие проверяет, принадлежит ли точка области, ограниченной двумя фигурами кругом и окружностью. В зависимости от проверки принадлежности устанавливается переменная in_figure в 0 если не принадлежит, 1 если принадлежит.(Рис 1)

Gr1.GIF (31923 bytes)

Рис 1.

    3. Соедините связью переменные созданного вами имиджа x, y, x1, y1, R, Pressed, xmin, xmax, ymin, ymax, In_figure c одноименными переменными имиджа Interface.

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

Задание 2.

Пусть в данном проекте нужно определять, к области ограниченной какой конкретно фигурой, квадратом или окружности принадлежит точка. Тогда можно воспользоваться и несколькими операторами if,  но проще воспользоваться оператором выбора Switch. Введите в имидж следующий текст

if (~Pressed)
Switch
case ((~x-~x1)^2+(~y-~y1)^2<=~R^2)
in_figure:=1
case (~x<=~xmax && ~y<=~ymax && ~x>=~xmin && ~y>=~ymin)
in_figure:=2
default
in_figure:=0
endswitch
Pressed:=0
endif

Здесь производиться выбор из трех вариантов: принадлежит ли точка квадрату(первое case-условие), принадлежит ли точка кругу(второе case-условие) или не той не другой области(под ключевым словом default).

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

Задание 3.

Наглядно покажем, как влияет  использование оператора  "~"  на значения переменных

       1. Создайте новый проект. Скопируйте здесь нужные для работы имиджи здесь. Они содержаться в zip-файле который нужно развернуть в рабочий директорий проекта. Из скопированных имиджей вставьте имидж Interface13 в схему проекта. Этот имидж отвечает за вывод двух графиков.

     2. Создайте новый имидж, который будет содержать в тексте следующие уравнения.

t:=~t+dt
v:=~v+~a*dt
SN:=~SN+~v*dt
SO:=~SO+v*dt

Здесь SN и SO реализуют одинаковые зависимости. Отличие в том, что SN использует значение переменной v c оператором "~", а SO использует значение переменной без оператора тильда

   3. Соедините переменные t , SN и SO созданного вами имиджа с одноименными переменными имиджа Interface13

Тогда в окне вы увидите графики зависимости SN(t) и SO(t). График SN(t) будет выше, чем SO(t). (Рис 2)

Gr2.GIF (13379 bytes)

Рис 2.

Дополнительное задание.

pin2.gif (1000 bytes) Попробуйте написать условие, проверяющее, попадает ли точка на границу области. Тем самым можно включать или не включать границы фигур в область ограниченную фигурами