Реализовать функцию, которая вычисляет минимальное значение трех выражений r= min (a+b,c2, )(рис. 1.5.4-12).
В функции min Х выбор наибольшего (наименьшего) из значений переменных или выражений числом более двух сводится к последовательному применению усеченных разветвлений. Алгоритм, реализующий эту задачу, относится к числу базовых алгоритмов выбора наименьшего из нескольких значений. Основой алгоритма является усеченное разветвление. Здесь первоначально переменной R присваивается значение первого из выражений. Истинное значение наименьшего значения определяется путем последовательного сравнения со всеми остальными значениями выражений заданной последовательности.
![]() |
![]() |
Рис. 1.5.4-12 Реализация вычисления минимум из элементов массива
Регулярные циклические структуры и оператор for
Оператор цикла for...end обычно используется для организации вычислений с заданным числом повторений циклов. Конструкция такого цикла имеет следующий вид:
forv а r = s : d : e
Оператор1
….
Операторn
End
где s - начальное значение переменной цикла var, d - приращение этой переменной и е – конечное значение управляющей переменной, при превышении которого цикл завершается. Возможна и запись в виде s:е (в этом случае d=1). Список выполняемых в цикле инструкций завершается оператором end.
Рассмотрим пример на рис.1.5.4-13, где при заданных действительных числах a , b ( a < b ) ,и целом числе n, необходимо вычислить выражение s = , где
, если
![]() |
![]() |
Рис. 1.5.4-13. Вычисление выражения
Решение задачи требует разработки 2-х функций: функции slog, предназначенной для вычисления i-го слагаемого и функции summa, которая вычисляет заданное выражение . Функции slog и summa помещены в сценарий, сохраненный в файле с именем главной функции summa. Запуск на выполнение осуществляется из командного окна обращением к функции summa. Предварительно переменным a, bи n присваиваются числовые значения. Проверка правильности ввода исходных данных, предусмотрена в функции summa . В случае если b > a , происходит вычисление значения i -го слагаемого, накапливание суммы и, по окончании цикла, умножение суммы на величину h, с последующим выводом результат в командной строке, иначе в командной строке выводится сообщение «Ошибка в исходных данных b < a».
Необходимо отметить, что наиболее часто оператор цикла for...end используется при обработке векторов и матриц.
В качестве примера использования оператора for ... end вычислим сумму элементов векторах с использованием функции summaи входными параметрами, которые служат вектор xи число элементов n.Значение элементов вектора определены в командном окне (рис. 1.5.4-14).
![]() |
![]() |
Рис. 1.5.4-14 Функция summa, вычисляющей сумму элементов массива,
и обращения к функции summa и встроенной функции sum
Количество элементов массива х определяется функцией length. Кроме обращения к функции summaв командном окне предусмотрена проверка результата вычислений с использованием встроенной функции sum ( x ).
В цикле может быть использован оператор continue, который передает управление в следующую итерацию цикла, пропуская операторы, которые записаны за ним, причем во вложенном цикле он передает управление на следующую итерацию основного цикла. Оператор break может использоваться для досрочного прерывания выполнения цикла (например, при отладке участка программы). Как только он встречается в программе, цикл прерывается. Примеры использование break и continue будут приведены ниже.
Кроме простых регулярных циклов в Scilab имеется возможность организации вложенных циклов. Пример вычисления суммы элементов матрицы а, требующий использования вложенных циклов, приведен на
рис. 1.5.4-15.
![]() |
![]() |
Рис. 1.5.4-15 Использование вложенных циклов для вычисления
суммы элементов двумерного массива
В регулярных циклах число повторений должно быть определено заранее. При этом в одних случаях это число задано явно (константой или вводимым значением переменной), а в других случаях его надо предварительно вычислить.
Возможны и такие случаи, когда число повторений цикла не фиксируется в алгоритме в явном виде, а определяется неявно граничными значениями и шагом изменения некоторых переменных.
Рассмотрим пример реализации функции, которая вычисляет
y ( x )= sin ( x ) при значениях x, изменяющихся на отрезке [ a ; b ] с шагом h(рис.1.5.4-16).
![]() |
![]() |
Рис.1.5.4-16 Вычисление таблицы значений функции y ( x )= sin ( x )
Как уже отмечалось, в циклических структурах часто используются операторы, влияющие на их выполнение. Так, в примере рис. 1.5.4-17 показано применение оператора breakдля досрочного прерывания выполнения цикла. В качестве условия досрочного прерывания цикла используется условие i ==5.
![]() |
Рис. 1.5.4-17 Прерывание программы с применением оператора break
Оператор continue, прерывая цикл, передает управление в следующую итерацию цикла, пропуская операторы, которые записаны за ним, причем во вложенном цикле он передает управление на следующую итерацию основного цикла. На рис.1.5.4-18 приведен пример вычисления суммы и произведения положительных элементов матрицы b(3,3).
![]() |
![]() |
Рис. 1.5.4-18 Прерывание выполнения цикла с применением
оператора continue
Оператор return обеспечивает нормальный возврат в вызывающую функцию и в режим работы с клавиатурой. Пример применения оператора return представлен на рис. 1.5.4-19.
![]() ![]() |
Рис. 1.5.4-19 Применение оператора return
В данном примере показано, что если матрица A пустая, то будет выведено значение 1, иначе, система выводит сообщение:
«Неопределённая переменная ' d ' в функции ' det'».
Базовые алгоритмы регулярной циклической структуры позволяют описать широкий класс задач: формирования значений массивов, вычисление значений функций от одной и более переменных с заданным диапазоном и шагом их изменения; вычисление конечных сумм и произведений значений величин; ввод, формирование, обработка и вывод элементов массива и многие другие.
Рассмотрим несколько простых примеров, реализующие базовые алгоритмы разветвляющих структур.
При з аданных числа х b 1 , b 2 ,…, bn , требуется вычислить их сумму: f ( b 1 )+ f ( b 2 )+…+ f ( bn ),где
Программная реализация задачи приведена на рис.1.5.4-20. Для решения поставленной задачи создадим функцию fb(x), которая реализует алгоритм вычисления значения y = f ( x ) . Функция имеет один входной параметр – х, который при обращении к функции принимает текущее значение элемента массива b(i) , и один выходной параметр y. Обращение к функции происходит в цикле, организованном для вычисления суммы значений fb(x).
![]() ![]() |
Рис. 1.5.4-20. Вычисление сумы элементов массива, используя функцию fb
Для вычисления суммы значений функции fb(х) создан сценарий РИС15420, в котором сначала описывается функцияfb(х), а затем задаются количество чисел (n=10) и вектор их значений (b), и организован регулярный цикл для обращения в функции (f b ) для вычисления суммы.
Перед решением задачи созданный сценарий РИС15420, следует загрузить с использованием команды exec, а затем запустить его на выполнение из
Командного окна.
Сформировать из произвольных чисел матрицу а(3,4) . Вычислить и вывести вектор b , каждый элемент которого есть среднее арифметическое элементов соответствующей строки матрицы а (рис. 1.5.4-21).
На рис. 1.5.4-21 приведен сценарий с именем РИС15421, где определена матрица а, состоящая из 3-х строк и 4-х столбцов и организован цикл по количеству формируемых элементов матрицы b путем обращения к вспомогательной функции sred _ ar. В самой функции sred _ arреализован базовый алгоритм вычисления среднего арифметического значений элементов матрицы. В данном случае под вектором понимается i-я строка матрицы а. Алгоритм заключается в вычислении суммы нужных элементов, реализованный в регулярном цикле, с последующим делением на количество просуммированных значений, то есть на количество элементов в строке (m).
![]() ![]() |
Рис. 1.5.4-21 Сценарий формирования матрицы a,вычисления среднего арифметического значения элементов матрицы и результаты его работы
Создать функцию, которая вычисляет сумму положительных значений элементов матрицы b, при b(i,j)>0 .
На рис. 1.5.4-22 приведено решение задачи, а затем пример вычисления суммы элементов вектора и матрицы с использованием стандартной функции sum. В данном примере элементы матрицы заданы положительными значениями специально, чтобы проверить на совпадение результаты работы созданной функции sumfи встроенной функции sum.
![]() |
![]() |
Рис. 1.5.4-22 Вычисление суммы положительных элементов матрицы с использованием функции пользователя Sumfи встроенной функции sum
Создать функцию, которая формирует из чисел матрицы A размером 3 x 4 одномерный вектор, каждый элемент которого есть сумма элементов соответствующих столбцов матрицы A .
Решение задачи с использованием функции Summ, вычисляющей суммы элементов в столбцах матрицы А(3,4), и формирующий из них элементы вектора Х(4). Вызов функции и результаты выполнения приведено на
рис. 1.5.4-23.
![]() ![]() |
-->//Загрузка сценария РИС15423и выполнение функции Summ , --> //которая формирует массив b из сумм элементов в столбцах массива А --> -->clear --> A = [1 3 4 5; 4 7 8 9; 9 8 7 6]; --> exec('РИС15423.sce', 0); --> X = Summ(A); --> --> X' X = 14. 18. 19. 20. |
Рис. 1.5.4-23 Программа формирования элементов массива Х равным
суммам элементов соответствующих столбцов массива А
Кроме алгоритмов, представленных в приведенных выше примерах, к базовым алгоритмам обработки массивов можно отнести алгоритмы: формирования элементов массива, нахождения количества элементов матрицы при заданном условии, нахождения суммы и произведения значений элементов матрицы при заданном условии, обмен элементов столбцов или строк матрицы, доступ к элементам массива и многие другие.
Дата: 2019-11-01, просмотров: 295.