
- •1 Цикл For
- •1.1 Автоматическая индексация
- •1.2 Индексация нескольких массивов в одном цикле
- •1.3 Организация доступа к значениям предыдущих итераций цикла
- •1.3.1 Сдвиговый регистр (Shift Register)
- •1.3.2 Стек сдвиговых регистров
- •1.3.3 Узел обратной связи
- •2 Цикл по условию While
- •2.1 Доступ к значениям предыдущих итераций цикла
- •2.2 Автоиндексирование в цикле по условию
- •3 Структура выбора Case
- •4 Структура последовательности (Sequence)
- •4.1 Структура открытой последовательности (Flat Sequence Structure)
- •4.2 Структура многослойной последовательности (Stacked Sequence Structure)
1.3.2 Стек сдвиговых регистров
Стек сдвиговых регистров представляет собой набор терминалов с левой стороны структуры, сохраняющих значения переменной в различных итерациях выполняемого цикла. Для создания стека сдвиговых регистров достаточно щелкнуть правой кнопкой мыши по левому терминалу и выбрать пункт контекстного меню Add Element.
При добавлении еще двух сдвиговых регистров к левому терминалу данные последних трех итераций переносятся на следующую итерацию. При этом значение последней итерации сохраняется в самом верхнем сдвиговом регистре. Второй терминал сохранят данные, переданные ему с предыдущей итерации, третий терминал хранит данные, полученные две итерации назад и т.д. В буквенных обозначениях это означает, что сохраняются данные i-1, i-2 и i-З итераций.
Пример 4. Стек сдвиговых регистров
Пример иллюстрирует применение стека сдвиговых регистров (рис. 10). В цикле в течение 100 итераций генерируется случайное число. С помощью стека сдвиговых регистров вычисляется среднее арифметическое четырех последних значений. При запуске ВП в режиме отладки можно понаблюдать за выполнением блок-диаграммы.
Рисунок 10 – Использование стека сдвиговых регистров
1.3.3 Узел обратной связи
Узел обратной связи (Feedback Node) также как и сдвиговый регистр отвечает за перевод значения какой-либо переменной из одной итерации в другую. Он появляется в цикле автоматически, когда вы соединяете поле вывода данных какого-либо узла (функции, подпрограммы) с его же полем ввода. Использование узлов обратной связи позволяет избегать большого количества проводников данных и соединений.
Вручную поместить узел обратной связи внутрь цикла можно, выбрав Feedback Node в палитре Structures. В зависимости от положения узла обратной связи относительно функции, которая его использует, стрелка на иконке может быть направлена либо вправо, либо влево. При этом направление передачи данных всегда определяется стрелкой. Таким образом, поля ввода и вывода также могут быть либо справа, либо слева. Наглядно это свойство узла обратной связи показано на рисунке 11. Все три ВП выполняют одно и то же, различие состоит лишь в положении узла обратной связи.
Рисунок 11 – Узел обратной связи
Узел обратной связи и сдвиговый регистр полностью взаимозаменяемы, с помощью пункта контекстного меню replace with... один можно заменить другим. Следующий пример (рис. 12) демонстрирует соответствие узла обратной связи и сдвигового регистра. Оба цикла выполняют одно и то же действие суммируют числа от 0 до 4.
Рисунок 12 – Использование стека сдвиговых регистров
2 Цикл по условию While
Цикл While (по условию) работает до тех пор, пока логическое условие выхода из цикла не примет значение «истина». Во всем, что касается принципа работы цикла While, а также работы с объектами в цикле While, их размещения внутри цикла, использования сдвиговых регистров и узлов обратной связи цикл While аналогичен циклу For. Принципиальное различие этих циклов заключается в том, что цикл For выполняется некоторое число раз, задаваемое явно через терминал общего числа итераций или задаваемое неявно как число элементов индексируемого на входе цикла массива. Цикл же While выполняется неопределенное число раз, пока не будет выполнено заданное условие. В отличие от цикла For цикл While выполняется всегда. В случае если условие с самого начала выполнено, цикл выполняется 1 раз.
Элементы цикла While:
терминал
условия. Блок-диаграмма цикла While
выполняется
до тех пор, пока не выполнится условие
выхода из цикла. По умолчанию, терминал
условия выхода имеет вид, показанный
слева. Это значит, что цикл будет
выполняться до поступления на терминал
условия выхода значения True.
В этом случае
терминал
условия выхода называется терминалом
Stop If True
(остановить,
если «истина»).
Предусмотрена
возможность изменения условия выхода
и соответствующего ему изображения
терминала условия выхода. Щелчком правой
кнопки мыши по терминалу условия выхода
или по границе цикла необходимо вызвать
контекстное меню и выбрать пункт Continue
If True (продолжить,
если «истина»). Также можно воспользоваться
инструментом управление,
щелкнув им
по терминалу условия. Изображение
терминала условия выхода поменяется
на
Continue If True
(продолжить,
если «истина»). В результате условием
выхода из цикла становится поступающее
на терминал условия значение False.
терминал
счетчика итераций. Содержит номер
текущей итерации, начиная с 0.