Где x и y любые арифметические выражения.
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

Реализовать функцию, которая вычисляет минимальное значение трех выражений r= min (a+b,c2, )(рис. 1.5.4-12).

В функции min Х выбор наибольшего (наименьшего) из значений переменных или выражений числом более двух сводится к последовательному применению усеченных разветвлений. Алгоритм, реализующий эту задачу, относится к числу базовых алгоритмов выбора наименьшего из нескольких значений. Основой алгоритма является усеченное разветвление. Здесь первоначально переменной R присваивается значение первого из выражений. Истинное значение наименьшего значения определяется путем последовательного сравнения со всеми остальными значениями выражений заданной последовательности.

 

--> // Загрузка сценария РИС15412 и выполнение функций minx --> -->clear --> a = 1; b = 5; c = 10; d = 1; --> exec('РИС15412.sce'); -->R = minx(a, b, c, d) // Использование функции пользователя minX R = 1.

 

Рис. 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 = , где , если

 

--> // Загрузка сценария РИС15413 и выполнение функции summa, --> // вычисляющее выражения p --> -->clear -->exec('РИС15413.sce', 0); --> a = 4; b=2; n=5; --> summa(a, b, n) Ошибка в исходных данных b<a --> --> a = 2; b = 4; n = 5; --> p = summa(a, b, n)  p = -0.6114314

 

Рис. 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).

 

-->// Загрузка сценария РИС15414 и выполнение функции summa --> -->clear --> exec('РИС15414.scе'); --> x = [1 2 3 4 5]; n = length(x); -->s = summa(x, n) // Обращение к функции пользователя summa  s = 15. --> --> s = sum(x) // Проверка с использованием встроенной функции sum  s = 15.

 

Рис. 1.5.4-14 Функция summa, вычисляющей сумму элементов массива,
и обращения к функции summa и встроенной функции sum

 

Количество элементов массива х определяется функцией length. Кроме обращения к функции summaв командном окне предусмотрена проверка результата вычислений с использованием встроенной функции sum ( x ).

В цикле может быть использован оператор continue, который передает управление в следующую итерацию цикла, пропуская операторы, которые записаны за ним, причем во вложенном цикле он передает управление на следующую итерацию основного цикла. Оператор break может использоваться для досрочного прерывания выполнения цикла (например, при отладке участка программы). Как только он встречается в программе, цикл прерывается. Примеры использование break и continue будут приведены ниже.

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

 

-->// Загрузка сценария РИС15415 и выполнение функции vzikl --> -->clear --> a = [1,2,3;4,5,6;7,8,9]; n = 3; --> exec('РИС15415.sce'); --> --> s=vzikl(a) s = 45.

 

Рис. 1.5.4-15 Использование вложенных циклов для вычисления
суммы элементов двумерного массива

 

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

Возможны и такие случаи, когда число повторений цикла не фиксируется в алгоритме в явном виде, а определяется неявно граничными значениями и шагом изменения не­которых переменных.

Рассмотрим пример реализации функции, которая вычисляет
y ( x )= sin ( x ) при значе­ниях x, изменяющихся на отрезке [ a ; b ] с шагом h(рис.1.5.4-16).

 

--> // Загрузка сценария РИС15416 и выполнение функции ziklh --> -->clear -->a = 1; b = 2; h = 0.2; // Исходные данные --> x = [a:h:b]       // Формирование массива х --> exec('РИС15416.sce', 0); --> [x, y] = ziklh(a, b, h); --> [x,y]'            // Вывод таблицы значений функции y ( x )= sin ( x ) ans =  1.    1.2    1.4    1.6    1.8    2.  0.841471 0.9320391 0.9854497 0.9995736 0.9738476 0.9092974

 

Рис.1.5.4-16 Вычисление таблицы значений функции y ( x )= sin ( x )

 

Как уже отмечалось, в циклических структурах часто используются операторы, влияющие на их выполнение. Так, в примере рис. 1.5.4-17 показано применение оператора breakдля досрочного прерывания выполнения цикла. В качестве условия досрочного прерывания цикла используется условие i ==5.

 

--> // Пример досрочного прерывания цикла --> -->clear -->fori = 1:10  > if i==5 break, end >end i = 1. i = 2. i = 3. i = 4. i = 5.

 

Рис. 1.5.4-17 Прерывание программы с применением оператора break

 

Оператор continue, прерывая цикл, передает управление в следующую итерацию цикла, про­пуская операторы, которые записаны за ним, причем во вложенном цикле он пере­дает управление на следующую итерацию основного цикла. На рис.1.5.4-18 приведен пример вычисления суммы и произведения положительных элементов матрицы b(3,3).

 

--> // Пример использования оператора continue --> // Загрузка сценария РИС15418 и выполнение функции prer -->clear --> b = [3 6 -1; -3 5 6 ; 2 -2 4]; --> n = 3; --> exec('РИС15418.sce'); --> --> [s, p] = prer(a, n)  p = 362880.  s = 4.

Рис. 1.5.4-18 Прерывание выполнения цикла с применением
оператора continue

Оператор return обеспечивает нормальный возврат в вызывающую функ­цию и в режим работы с клавиатурой. Пример применения оператора return представлен на рис. 1.5.4-19.

 

-->// Пример использования оператора return --> // Загрузка сценария РИС15419 выполнение функции det -->clear --> --> A = []; --> det(A)  ans = 1. --> -->A = [1]; -->det(A) Неопределённая переменная ' d ' в функции ' det '.

Рис. 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).

 

  -->//Загрузка сценария РИС15420 и выполнение функции fb , реализующей --> // вложенное разветвление и вычисление суммы элементов массива -->clear -->b = [3546961012]; --> exec ('РИС15420.sce');  s = 409.66667

 

Рис. 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).

 

  --> // Загрузка и выполнение сценария РИС15421 c встроенной функцией sred _ ar --> -->b = [-1256; 0.60.10.50.55; 12.36.7248]; --> exec('РИС15421.sce', 0); --> a'  ans = 3. 0.4375 7.755

 

Рис. 1.5.4-21 Сценарий формирования матрицы a,вычисления среднего арифметического значения элементов матрицы и результаты его работы

Создать функцию, которая вычисляет сумму положительных значений элементов матрицы b, при b(i,j)>0 .

На рис. 1.5.4-22 приведено решение задачи, а затем пример вычисления суммы элементов вектора и матрицы с использованием стандартной функции sum. В данном примере элементы матрицы заданы положительными значениями специально, чтобы проверить на совпадение результаты работы созданной функции sumfи встроенной функции sum.

 

-->// Загрузка сценария РИС15422и выполнение функции Sumf , --> // вычисляющей сумму положительных элементов массива B --> -->clear -->exec('РИС15422.sce', 0); --> B = [1 2 3; 4 5 6]; --> --> s1 = Sumf(B)  s1 = 21. --> --> s1 = sum(B)  s1 = 21.

Рис. 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, просмотров: 251.