Скачиваний:
99
Добавлен:
06.03.2016
Размер:
1.13 Mб
Скачать

Блок-диаграмма

    1. Создадим блок-диаграмму, как показано на рисунке

Поместим на блок-диаграмму функцию Quotient & Remainder (Частное и остаток), расположенную на палитре Функций в разделе Function»Numeric. Эта функция формирует на R-поле вывода (верхнее поле подсоединения проводника данных) остаток от деления двух чисел, а на Q-поле вывода (нижнее поле для подсоединения проводника данных) частное.

Создадим константу для данного узла. Для этого следует навести курсор на поле ввода данных функции Quotient & Remainder (Частное и остаток), щелкнуть по нему правой кнопкой мыши и выбрать в контекстном меню пункт Create»Constant. С помощью инструмента ВВОД ТЕКСТА присвоим ей значение 10.

Выберем цикл For, расположенный в палитре Функций в разделе Function»Structures. Поместим внутрь цикла узел Quotient & Remainder (Частное и остаток) с узлом функции Add (Сложение).

Создадим константу для определения числа итераций цикла. Для этого следует навести курсор на поле числа итераций, щелкнуть по нему правой кнопкой мыши и выбрать в контекстном меню пункт Create»Constant. С помощью инструмента ВВОД ТЕКСТА присвоим ей значение 10.

Добавим сдвиговый регистр, он выглядит как пара терминалов, показанных слева. Они расположены непосредственно друг против друга на противоположных вертикальных сторонах границы цикла. Правый терминал содержит стрелку «вверх» и сохраняет данные по завершению текущей итерации. LabVIEW передает данные с этого регистра в следующую итерацию цикла. Сдвиговый регистр создается щелчком правой кнопки мыши по границе цикла и выбором из контекстного меню пункта Add Shift Register.

Инициализируем сдвиговый регистр, расположенный выше, для этого передадим на его левый терминал 0, а правый соединим с индикатором вывода значения суммы цифр. Заметим, что так как этот индикатор находится в цикле, то его значение будет меняться от итерации к итерации.

Сдвиговый регистр, расположенный ниже будет передавать от итерации к итерации значение частного при делении текущего значения на число 10. Инициализируем сдвиговый регистр, для этого передадим на его левый терминал значение из элемента управления ЗАДАННОЕ ЦЕЛОЕ ЧИСЛО (НЕ БОЛЕЕ 10 ЗНАКОВ) извне цикла.

Поместим функцию Wait Until Next ms Multiple, показанную слева. Она обеспечивает интервал между итерациями, равный интервалу времени, необходимому для того, чтобы миллисекундный счетчик достиг значения, кратного введенному пользователем. Эта функция используется для контроля скорости выполнения цикла.

3. Сохраним ВП под именем Сумма цифр.vi

Запуск ВП

  1. Перейдем на лицевую панель и изменим значение элемента ЗАДАННОЕ ЦЕЛОЕ ЧИСЛО (НЕ БОЛЕЕ 10 ЗНАКОВ).

  2. Запустим ВП..

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

Конец упражнения 6-2

Упражнение 6-3. Доступ к данным предыдущих итераций

Цель: Использование сдвиговых регистров для организации доступа к значениям на предыдущих итерациях цикла While

Рассмотрим полезный пример, иллюстрирующий использование оператора While. Найдем так называемое «машинное епсилон» - такое минимальное, неравное нулю вещественное число, которое после прибавления его к 1.0 еще дает результат равный единице. Тех, кто привык к непрерывной вещественной арифметике, может повергнуть в недоумение утверждение о том, что в дискретной машинной арифметике всегда существуют такие числа, 0 < X < eps, что 1.0 + X = 1.0 . Дело в том, что внутреннее представление чисел вещественного типа с двойной точностью в отведенных для него 8 байтах может дать «лишь» приблизительно 1016 возможных комбинаций значащих разрядов. Конечно же, это очень большое число, но оно несопоставимо с бесконечным множеством вещественных чисел. Представление бесконечного непрерывного множества вещественных чисел конечным (пусть даже очень большим) множеством их машинного представления и приводит к появлению «машинного эпсилон».

Итак, задача ставится таким образом: найти значение «машинного эпсилон» и за какое число итераций оно находится. Начальное приближение «машинного эпсилон» задается пользователем в элементе управления заданное начальное приближение. Затем в цикле уменьшаем это значение в 2 раза и сравниваем, если прибавить его к 1, будет ли сумма больше 1? Если да, то уменьшаем его значение в 2 раза, а если нет – заканчиваем вычисления. Повторяем эти операции в цикле. Используем признак выхода из цикла Continue if True (Продолжение если Истина).

Лицевая панель

    1. Откроем новый ВП. Создадим лицевую панель, разместив на ней элементы управления и отображения, как показано ниже на рисунке.

Установка количества знаков после запятой

    1. Щелкнем правой кнопкой мыши по элементу Заданное начальное приближение и выберем в контекстном меню пункт Format&Precision. Появится следующее диалоговое окно Format&Precision.

    2. Сделаем настройки, показанные ниже.

В поле ввода Digits of Precision следует ввести значение 0.

    1. Повторим шаги 2 и 3 для элемента отображения число итераций.

    2. Для элемента отображения машинный epsilon сделаем настройки

Блок-диаграмма

    1. Отобразим блок-диаграмму, показанную ниже. Разместим лицевую панель и блок-диаграмму на экране так, чтобы они не перекрывали друг друга. Переместим палитры Tools и Functions, если это необходимо.

Поместим на блок-диаграмму функцию Divide (Деление), расположенную в палитре Функций в разделе Function»Numeric. Эта функция делит текущее значение «машинного эпсилон» на 2.

Создадим константу 2 . Для этого следует навести курсор на поле ввода данных функции Divide (Деление), щелкнуть по нему правой кнопкой мыши и выбрать в контекстном меню пункт Create»Constant. С помощью инструмента ВВОД ТЕКСТА присвоим ей значение 2.

Поместим на блок-диаграмму функцию Increment (Приращение на 1), расположенную в палитре Функций в разделе Function»Numeric. Эта функция добавляет 1 к значению текущего «машинного эпсилона», которое мы ищем. Таким образом, мы составили выражение 1 + eps , которое нужно сравнить с единицей.

Поместим на блок-диаграмму функцию Greater? (>), расположенную в палитре Функций в разделе Function»Comparison. Эта функция предназначена для сравнения полученного выражения с 1. Если выражение больше 1 , то функция выдает значение TRUE.

Поместим на блок-диаграмму цикл While, расположенный в палитре Функций в разделе Function»Structures. Наведите курсор на терминал условия выхода, щелкните по нему правой кнопкой мыши и выберите пункт Continue if True (Продолжение если Истина).

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

Поместим на блок-диаграмму функцию Increment (Приращение на 1), расположенную в палитре Функций в разделе Function»Numeric. Эта функция добавляет 1 к значению счетчика итераций после завершения выполнения цикла. Напомним, что отсчет итераций начинается с 0, и реальное число итераций всегда на 1 больше.

Добавим сдвиговый регистр, он выглядит как пара терминалов, показанных слева. Они расположены непосредственно друг против друга на противоположных вертикальных сторонах границы цикла. Правый терминал содержит стрелку «вверх» и сохраняет данные по завершению текущей итерации. LabVIEW передает данные с этого регистра в следующую итерацию цикла. Сдвиговый регистр создается щелчком правой кнопки мыши по границе цикла и выбором из контекстного меню пункта Add Shift Register.

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

Последнее вычисленное значение «машинного эпсилона» передадим через правый терминал сдвигового регистра на элемент отображения, расположенный вне цикла.

    1. Сохраним ВП под именем Машинный эрсилон.vi

Запуск ВП

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

Соседние файлы в папке Лабораторная работа №1