Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

конспект Гугнин

.pdf
Скачиваний:
83
Добавлен:
10.02.2016
Размер:
3.18 Mб
Скачать

 

 

Not Exclusive Or

Истина

Истина

Истина

 

 

Исключающее

 

Истина

Лож

Лож

 

 

ИЛИ-НЕ

 

Лож

Истина

Лож

 

 

 

 

Лож

Лож

Истина

 

 

Boolean To (0,1) –

Преобразует логическую истину

 

 

в единицу, а ложь в ноль.

 

 

 

 

Compound Arithmetic – Операция над несколькими

 

 

величинами. Используя инструмент Перемещение

 

 

можно изменить количество входных терминалов.

 

 

Через пункт контекстного меню Change mode (из-

 

 

менить действие) можно выбрать сложение, умно-

 

 

жение, логическое И, логическое ИЛИ,

 

 

 

Исключающее ИЛИ

 

 

7.3. Функции сравнения

 

 

 

 

 

 

Функции сравнения находятся на палитре

 

 

Functions Programming Comparison (рис.

 

 

7.2). Они позволяют проверять различные соот-

 

 

ношения между скалярными и векторными пере-

 

 

менными и константами (равно, не равно, боль-

 

 

ше, меньше, больше 0, меньше 0 и т. п.), прове-

 

 

рять наличие информации, определенного числа

 

 

или символа, а также выбирать одно из двух зна-

 

 

чений, выбирать максимальное и минимальное

 

 

значения, а также проверять нахождение числа в

Рис.7.2. Палитра функций

заданном диапазоне.

 

аргументов,

сравнения

Функции

сравнения

двух

 

 

расположенные в верхней строке палитры (рис.

7.2), рассмотрены ниже.

 

 

 

 

 

Equal? – Равно? – Функция возвращает значение ИСТИНА, если x равно y, иначе возвращается значение ЛОЖЬ. Функция является полиморфной и позволяет сравнивать скаляры, массивы и кластеры констант и переменных числового, логического и строкового типа, пути, ссылки, данные типа Variant, отметки времени (time stamp), а также структуры на их основе, в частности таблицы, деревья и т. п.

Not Equal? – Не равно? – Функция возвращает значение ИСТИНА, если x не равно y, иначе возвращаетсязначение ЛОЖЬ.

Greater? – Больше? – Возвращает значение ИСТИНА, если x больше y, иначе возвращается значение ЛОЖЬ.

Less? – Меньше? – Возвращает значение ИСТИНА, если x меньше y, иначе возвращается значение ЛОЖЬ.

67

Greater Or Equal? – Больше или равно? – Возвращает значение ИСТИНА, если x больше или равно y, иначе возвращается значение ЛОЖЬ.

Less Or Equal? – Меньше или равно? – Возвращает значение ИСТИНА, если x меньше или равно y, иначе возвращается значение ЛОЖЬ.

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

Equal To 0? – Равно 0? – Возвращает значение ИСТИНА, если x равно 0, иначе – ЛОЖЬ.

Not Equal To 0? –

Не равно 0? –

Возвращает значение ИСТИНА, если x

не равно 0, иначе –

ЛОЖЬ.

 

Greater Than 0? –

Больше 0? –

Возвращает значение ИСТИНА, если x

больше 0, иначе –

ЛОЖЬ.

 

Less Than 0? –

Меньше 0? –

Возвращает значение ИСТИНА, если x

меньше 0, иначе –

ЛОЖЬ.

 

Greater Or Equal To 0? – Больше или равно 0? – Возвращает значение ИСТИНА, если x больше или равно 0, иначе – ЛОЖЬ.

Less Or Equal To 0? – Меньше или равно 0? – Возвращает значение ИСТИНА, если x меньше или равно 0, иначе – ЛОЖЬ

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

Select – Выбрать – Функция возвращает значение, подключенное ко входам t или f в зависимости от состояния входа s. Если на входе s установлено состояние ИСТИНА, то функция возвращает значение, подключенное ко входу t. Если же на входе s установлено состояние ЛОЖЬ, то функция возвращает значение, подключенное ко входу f. Функция является полиморфной.

Max & Min – Максимум и минимум – Функция сравнивает x и y и возвращает большее значение на верхнем выходе, а меньшее значение – на нижнем. Данная функция воспринимает зна-

чения отметок времени (time stamp), если эти значения поданы на оба входа. В этом случае функция возвращает на верхнем выходе более

позднее время, на нижнем – более раннее. Функция является полиморфной.

In Range and Coerce – Нахождение в диапа-

зоне и ограничение – Функция определяет нахождение x в диапазоне, заданном входами верхний предел (upper limit) и нижний предел (lower limit), и дополни-

тельно ограничивает выходное значение указанным диапазоном, то есть если число выходит за верхнюю границу, то на выход coerced(x) подаётся число срезанное сверху до верхнего придела, если за нижний – до нижнего придела. Нахождение в диапазоне приводит к появлению на выходе In

68

Range? значения ИСТИНА. Данная функция воспринимает значения отметок времени, если эти значения поданы на все входы

7.4. Цикл по условию While Loop

Цикл While Loop (по условию) работает до тех пор, пока логическое условие выхода из цикла не примет значение ИСТИНА. Во всем, что касается принципа работы цикла While Loop, а также работы с объектами в цикле While Loop , их размещения внутри цикла, использования сдвиговых регистров и узлов обратной связи цикл While Loop аналогичен циклу For Loop. Принципиальное различие этих циклов заключается в том, что цикл For Loop выполняется некоторое число раз, задаваемое явно через терминал общего числа итераций или задаваемое неявно как число элементов индексируемого на входе цикла массива. Цикл же While Loop выполняется неопределенное число раз, пока не будет выполнено заданное условие. В отличие от цикла For Loop цикл While Loop выполняется всегда. В случае если условие с самого начала выполнено, цикл выполняется 1 раз.

7.4.1. Элементы цикла While Loop

Терминал условия. Блок-диаграмма цикла While Loop выполняется до тех пор, пока не выполнится условие выхода из цикла. По умолчанию, терминал условия выхода имеет вид . Это значит, что цикл будет выполняться до поступления на терминал условия выхода значения True. В этом случае терминал условия выхода называется терминалом Stop If True (остановить, если ИСТИНА).

Предусмотрена возможность изменения условия выхода и соответствующего ему изображения терминала условия выхода. Щелчком правой кнопки мыши по терминалу условия выхода или по границе цикла необходимо вызвать контекстное меню и выбрать пункт Continue If True (продолжить, если ИСТИНА).

Также можно воспользоваться инструментом Управление, щелкнув им по терминалу условия. Изображение терминала поменяется на ] Continue If True (продолжить, если ИСТИНА). В результате условием выхода из цикла становится поступающее на терминал условия значение False.

Терминал счетчика итераций содержит номер текущей итерации, начиная с 0.

7.4.2. Доступ к значениям предыдущих итераций цикла

Как уже было ранее упомянуто, сдвиговый регистр и узел обратной связи в цикле по условию (While Loop) используются аналогично циклу с фиксированным числом итераций (For Loop).

7.4.3. Автоиндексирование в цикле по условию

69

Рис. 8.1. Пример цикла по условию

В основном автоиндексирование в цикле по условию (While Loop) имеет тот же смысл что и в цикле с фиксированным числом итераций (For Loop).

Надо заметить, что в цикле While Loop (в отличие от цикла For Loop) по умолчанию автоиндексирование для массивов выключено, т.е. массив не разбирается на элементы, а поступает в каждую итерации целиком.

Следует учесть, что цикл While Loop может прекратить выполнение только при заранее определенном значении логической переменной, присоединенной к терминалу условия выхода из цикла, и не зависит от размера разбираемого (Indexing) массива. Т.е. выполнение цикла может закончиться раньше или позже, чем закончатся элементы массива. Очевидно, что в первом случае из массива будут извлечены не все элементы, а во втором, при попытке считывания после конца массива, в цикл будет поступать значение по умолчанию для данного типа (0 для чисел, пустой массив, пустая строка для массивов и строк соответственно и т.д.)/

Пользуясь пунктом контекстного меню Replace можно изменить структуру цикла по условию (While Loop) на цикл с фиксированным числом итераций

(For Loop).

7.4.4. Примеры использования цикла по условию

Самый простой пример использования цикла по условию уже собран в палитре

Functions Express Execution Control While Loop. Поместите этот цикл на блокдиаграмму. Появится структура, показанная на рис. 8.1.

Кроме собственно структуры While Loop на диаграмме имеется терминал кнопки останова цикла. В данном случае этот цикл отвечает за выполнение блок-диаграммы,

собранной внутри него. Остановить запущенную программу можно будет, нажав на клавишу STOP на лицевой панели ВП. Практически любую программу рекомендуется собирать внутри цикла While Loop. Известно, что на инструментальной панели блок-диаграммы и лицевой панели имеются кнопки непрерывного запуска программы Run Continuously и немедленной остановки выполнения программы Abort Execution. Данный пример иллюстрирует возможность программного непрерывного запуска программы и ее остановки. Однако есть, и в некоторых случаях существенная, разница между этими двумя способами выполнения программы. В случае использования цикла While Loop и кнопки STOP блок-диаграмма внутри цикла всегда полностью завершит все положенные операции. В случае немедленной остановки выполнения программы через инструментальную панель выполнение программы обрывается немедленно. Это может повлечь за собой непредвиденную ошибку.

В качестве примера использования цикла While Loop соберём программу по численному решению нелинейных уравнений методом бисекции (деления

70

пополам). При решении нелинейного уравнения методом бисекции предполагается, что на некотором отрезке [xmin, xmax] располагается только один корень уравнения f(x) = 0. В таком случае значения функции на границе отрезка будет иметь противоположные знаки. Если вычислить середину текущего отрезка и определить, какой знак принимает значение функции в этой точке, можно судить о том, в какой половине оказался корень уравнения. Таким образом, определяется новый отрезок. Процедура повторяется до тех пор, пока длина получаемого отрезка не станет меньше некоторого наперед заданного числа ε. В качестве корня уравнения принимается среднее значение последнего отрезка.

Чтобы получить значения функций f(xmin) и f(xmax) воспользуемся функци-

ей Functions Mathematics Scripts & Formulas 1D & 2D Evaluation Eval Single-Variable Scalar.VI. На вход этой функции подается строка с формулой и значение х. На выходе получаем значение функции в точке х.

Поместим на блок-диаграмму цикл While Loop . Т.к. границы отрезка от итерации к итерации будут изменяться, необходимо использовать сдвиговый регистр. Создадим в цикле два сдвиговых регистра для границ отрезка. Внутри цикла вычислим середину отрезка, а также значение функции в середине отрезка. Определим условие выхода из цикла: длина отрезка должна быть меньше наперед заданного числа ε.

Теперь разберемся в том, как реализовать процесс выбора текущего отрезка.

Если значение функции в точке xmin и в середине отрезка одновременно больше или меньше нуля, то корень уравнения находится в другой половине отрезка. Если же знак функции в этих точках различен, то они и образуют новый отрезок. Это показано на рис. 8.2. На рисунке значение функции на правой границе отрезка [0,1] положительно, а в середине отрезка в точке 0,5 отрицательно. Это означает, что новым отрезком должна стать правая половина отрез-

ка [0,5; 1].

 

 

 

 

 

 

 

 

 

 

 

 

Здесь

следует

напомнить,

 

 

 

 

 

 

 

 

 

 

 

 

что палитры функций для работы

1,0

 

 

 

 

 

 

 

 

 

 

 

с логическими переменными на-

 

 

 

 

 

 

 

 

 

 

 

ходятся по пути Functions

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0,5

 

 

 

 

 

 

 

 

 

 

 

Programming

 

Boolean

и

 

 

 

 

 

 

 

 

 

 

 

Functions

 

Programming

 

 

 

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

 

 

Comparison.

В

первой

палитре

 

 

 

 

 

 

 

 

 

 

 

представлены

основные

логиче-

 

 

 

 

 

 

 

 

 

0,25

0,5

0,75

 

 

1,0 ские операции, а во второй - опе-

-0,5

 

 

 

 

 

 

 

 

 

 

 

рации сравнения.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Итак, перед циклом необхо-

-1,0

 

 

 

 

 

 

 

 

 

 

 

димо определить знак функции на

 

 

 

 

 

 

 

 

 

 

 

одной из границ (в нашем примере

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

это будет правая граница). Для

 

 

 

 

 

Рис. 8.2. График функции

 

 

этого воспользуйтесь операцией

 

 

 

 

 

 

 

 

 

 

 

 

Greater Then 0? палитры Functions

71

Programming Comparison. Получившуюся логическую переменную подадим на вход в цикл (рис. 8.3). В соответствии с нашим предположением о том, что на данном отрезке корень есть и при этом единственный, правая граница всегда будет либо положительной (как это показано на рис. 8.2), либо отрицательной.

Рис. 8.3. ВП для решения уравнения

Далее уже внутри цикла знак функции необходимо определить для середины текущего отрезка. Здесь уже в зависимости от того, в левой или правой половине отрезка находится корень, знак функции будет меняться. Далее эти логические переменные необходимо сравнить. Если они обе имеют значение ИСТИНА или ЛОЖЬ, то следует выбирать правую половину отрезка. Если они одна из них ИСТИНА, а другая ЛОЖЬ, то следует выбирать левую половину отрезка. Логическая операция, которая выдает значение ЛОЖЬ в первом случае, и значение ИСТИНА во втором, называется Exclusive Or и находится в па-

литре Functions Programming Comparison.

В палитре Functions Programming Comparison находится еще одна необходимая нам функция - Select. Используйте две функции Select для определения левой и правой границы нового отрезка. На вход s в обоих случаях следует подать значение полученной на выходе функции Exclusive Or. Как уже разбиралось, если на выходе Exclusive Or переменная принимает значение СТИНА, то правая граница сохраняет текущее положение. Значит, вход t соединяйте с соответствующим сдвиговым регистром правой границы. Вход f соединяйте с серединой отрезка. Во второй функции Select подключайте вход t к середине отрезка, а f – к левой границе. Выход функций Select подводите к сдвиговым регистрам.

Итак, блок-диаграмма готова. Осталось вывести результат вычислений на элемент индикации лицевой панели. Середину отрезка подводим к правой границе цикла. Образуется туннель, к которому и подключается элемент индикации. Окончательное решение этой задачи показано на рис. 8.3.

72

Рис.8.1. Варианты структуры выбора

Перейдите на лицевую панель. Введите какую-либо функцию. Возьмите, например, классический пример f(x) = exp(x)-l-cos(x). Задайте границы 0 и 1, задайте точность численного решения, например 0,0001. Запустите программу. Если блок-диаграмма построена правильно, то на элементе индикации будет число 0,601349.

Понаблюдайте за ходом выполнения программы.

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

Вопросы для самопроверки к восьмой лекции:

1.На какой панели расположены элементы управления и индикации логического типа?

2.Как можно изменить реакцию элементов управления логического типа на нажатие щелчок кнопкой мышки?

3.На какой панели расположены логические функции?

4.Какие логические функции вы знаете?

5.На какой панели расположены функции сравнения?

6.Какие логические функции сравнения вы знаете?

7.Как осуществляется работа цикла по условию?

8.Какие значения может принимать терминал условия цикла While

Loop?

9.Как определяется число итераций в цикле While Loop?

10.Какие особенности имеет автоиндексирование в цикле по условию? Литература для дополнительного обучения: [1, с. 162 – 173; 2, с.39 – 40;

3, с.65 – 72].

Лекция 9 Цель лекции – получить навыки управления порядком выполнения про-

граммы используя структуры вариант (Case) и последовательность

(Sequence).

8. СТРУКТУРЫ ВЫБОРА И ПОСЛЕДОВАТЕЛЬНОСТИ

8.1. Структура выбора (Case Structuers)

Структура выбора расположена на палитре Functions Programming

Structuers Case Structuere.

Структура Case Structuere имеет две или более поддиаграммы вариантов (рис.8.1). Только одна поддиаграмма варианта видима в данный момент времени и только одна поддиаграмма варианта работает при обращении к этой структуре. Входное значение термина-

73

ла селектора структуры определяет, какая поддиаграмма будет выполняться в данный момент времени. В простейшем случае структура Case Structuers аналогична логическим операторам (if...then...else) в текстовых языках программирования.

Структура Case Structuere имеет два элемента: селектор структуры и терминал селектора варианта.

Селектор структуры Case Structuers , расположен сверху графического изображения структуры, состоит из указателя значения варианта в центре и стрелок прокрутки по сторонам. Эти стрелки используются для просмотра возможных вариантов.

Терминал селектора варианта расположен на рамке структуры Case Structuere. Значение, подаваемое на терминал селектора варианта, определяет, какая именно поддиаграмма структуры (вариант) будет выполняться. Допустимо использовать целочисленный, логический, строковый типы, а также тип перечисления в качестве значения, подаваемого на терминал варианта. Терминал варианта может располагаться в любом месте левой границы структуры Case Structuers. Если терминал варианта логического типа, то структура состоит из двух логических вариантов True и False. Если терминал варианта имеет один из следующих типов: целочисленный, строковый или перечисления, то количество вариантов может достигать 231 – 1 вариантов.

Для использования структуры Case Structuere необходимо отметить вариант по умолчанию. Вариант по умолчанию или поддиаграмма по умолчанию выполняется, если значение терминала варианта выходит за пределы диапазона или не существуют вариантов для возможных значений терминала варианта. Щелчок ПКМ мыши на границе структуры Case Structuere позволяет добавлять, дублировать, перемещать и удалять варианты (поддиаграммы), а также отмечать вариант по умолчанию.

Структура Case Structuere допускает использование входных и выходных терминалов данных. Терминалы входных данных доступны во всех поддиаграммах, но их использование поддиаграммой структуры необязательно. Создание выходного терминала на одной поддиаграмме приводит к его появлению на других поддиаграммах в том же самом месте границы структуры. Если хотя бы в одной поддиаграмме выходной терминал не определен, то поле этого терминала окрашивается в белый цвет, что говорит об ошибке создания структуры. Необходимо определять значения выходных терминалов во всех вариантах (поддиаграммах). Кроме того, выходные терминалы должны иметь значения совместимых типов.

8.2. Примеры использования структуры выбора (Case Structuere)

Рассмотрите пример использования структуры Case Structuere в качестве распределения доступа к каким-либо функциям программы.

Поместите на лицевую панель строковый элемент управления Controls Modern String & Path String Control. Измените его метку на следующую:

74

Введите пароль. Поместите на блок-диаграмму структуру Functions

Programming Structuers Case Structuere.

Соедините терминал элемента управления String Control с терминалом селектора варианта структуры Case Structuere. По умолчанию в структуре было два варианта: “True” и “False”, Default. Применительно к выбору одного их этих двух вариантов по тексту, введенному в поле элемента управления String Control, это означает, что блок-диаграмма первого варианта будет выполняться тогда, когда будет введено слово True, вторая блок-диаграмма будет выполняться в остальных случаях.

Вместо “True” введём предполагаемый пароль, например слово «Пароль». На обе блок-диаграммы поместим стандартное диалоговое окно с одной кноп-

кой (Functions Programming Dialog & User Interface One Button Dialog).

Создадим строковые константы для входной величины message и button name (“OK”) обоих диалоговых окон (в контекстном меню указанного входа выберем Create Constant). На блок-диаграмме в первом варианте структуры выбора в поле строковой константы для входной величины message введем «Пароль верен», входной величины button name (“OK”) – « Продолжить». На блок-диаграмме второго варианта введем значения строковых констант – « Пароль неверен» и «Продолжить», соответственно. Лицевая панель после запуска программы и блок-диаграмма (оба варианта) представлены на рис. 8.2.

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

Рис.8.2. Пример проверки ввода пароля

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

75

Создадим нумерованный элемент управления Controls Modern Ring & Enum Enum. В его свойствах (чтобы попасть на страницу свойств, в контекстном меню выберите пункт Properties) перейдём на вкладку редактирования пунктов Edit Items. И в таблице в колонку пунктов Items введём четыре строки:

«a+b», «a – b», «a*b», « а/b».

Перейдём на блок-диаграмму и поместим на нее структуру варианта

Functions Programming Structuers Case Structuere. При подключении терминала элемента управления Enum к терминалу селектора вариантов он поменяет свой цвет на синий (целочисленный тип), а в селекторе структуры заголовки вариантов “True” и “False” поменяются на «а+b, Default» и «а – b». Выберем в контекстном меню структуры Add Case After. LabVIEW добавит вариант для пункта «a*b», аналогично добавим пункт «а/b» элемента управления Enum. При этом название варианта, отображаемое в селекторе структуры, будет взято из пунктов элемента управления Enum. Для выполнения программы решающую роль имеют номер варианта: 0,1, 2 или 3, на что и указывает синий цвет терминала элемента управления Enum, проводника данных и терминала селектора варианта. Однако для удобства как конечных пользователей ВП, так и программистов, варианты маркируются названиями.

Наберём в каждой поддиаграмме структуры соответствующую блокдиаграмму и выведем результат на элемент индикации. Здесь следует подчеркнуть, что все поддиаграммы структуры вариант находятся внутри одной структуры. Для придания ВП законченного вида добавим структуру Functions Programming Execution Control While Loop. Готовая лицевая панель и блок-диаграмма и представлены на рис. 8.3. На рисунке блок-диаграммы четыре структуры варианта показаны рядом, на самом деле все четыре поддиаграммы находятся внутри первой структуры. Видна может быть всего лишь одна поддиаграмма, а остальные три как в колоде карт сложены позади первой. Переключение между ними осуществляется с помощью стрелок селектор структу-

ры Case Structuere.

Рис. 8.3. Пример использования структур Case Structuere и While Loop

76