Материал: Matlab. Практический подход. Самоучитель

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Самоучитель Matlab

Рассмотрим следующий программный код, в котором использован оператор цикла for при определении функции, которой вычисляются числа Фибоначчи:

Fib:=n->( a:=1; b:=1;

for k from 3 to n do b:=a+b;

a:=b-a; end_for; b)

У функции Fib() один аргумент, который определяет номер числа в последовательности Фибоначчи. Поскольку основу тела функции составляют несколько команд, все они объединены в один блок, для чего эти команды заключаются в круглые скобки. Первыми двумя командами переменным a и b присваиваются единичные значения. Эти переменные "помнят" текущие значения предпоследнего и последнего чисел в последовательности. После этого запускается оператор цикла. Его индексная переменная пробегает значения от 3 (первое и второе числа уже "вычислены" – это начальные значения переменных a и b) до n (аргумент функции Fib()). В теле оператора цикла выполняются две команды. Командой b:=a+b вычисляется новое значение для числа в последовательности. После этого в переменную a необходимо записать то значение, что было записано (до выполнения команды b:=a+b) в переменной b. Сделать это можно с помощью команды a:=b-a. Таким образом, после выполнения одной итерации в операторе цикла вычисляется новое число в последовательности и, как и на начальном этапе, в переменной a записано предпоследнее (на данный момент) значение в последовательности, а в переменной b – последнее. После выполнения оператора цикла в переменную b будет записано число в последовательности с порядковым номером n. Чтобы переменная b возвращалась как результат, она указывается последней командой в последовательности команд, определяющих код функции Fib(). Документ с кодом этой функции представлен на рис. 9.40.

Пример использования этой функции приведен в документе на рис. 9.41.

Здесь тоже использован оператор цикла for. В рамках этого оператора индексная переменная пробегает значения от 1 до 20. При фиксированном значении индексной переменной с помощью функции Fib() вычисляется число с соответствующим индексом в последовательности Фибоначчи, и вычисленные числа отображаются в одной строке.

396

Глава 9. Символьные вычисления

Рис. 9.40. Документ с кодом функции Fib()

Рис. 9.41. Использование функции Fib()

На заметку

Для того чтобы между числами добавлялся пробел, помимо команды print(NoNL,Fib(i)) использована еще и команда print(NoNL," ").

В результате в строке отображаются первые двадцать чисел последовательности Фибоначчи.

На заметку

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

397

Самоучитель Matlab

for переменная in множество_значений do команды

end_for

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

Синтаксис вызова оператора while имеет следующий вид:

while условие do

команды end_while

Оператор выполняется следующим образом. Сначала проверяется условие. Если условие истинное, выполняются команды в теле оператора while. Затем снова проверяется условие. Если условие истинно, выполняются команды, и так далее. В документе на рис. 9.42 приведен пример кода, в котором вычисляются числа Фибоначчи, но в отличие от предыдущего случая здесь использован оператор while.

Рис. 9.42. Вычисление чисел Фибоначчи с помощью оператора while

Нами использовался следующий код:

a:=1:

b:=1:

i:=2:

print(NoNL,a);

398

Глава 9. Символьные вычисления

print(NoNL," "); print(NoNL,b); while i<20 do b:=a+b:

a:=b-a: print(NoNL," "); print(NoNL,b); i:=i+1: end_while:

Переменные a и b, в которые будут записываться числа Фибоначчи, а также индексная переменная i, получают свои начальные единичные значения. Текущие единичные значения переменных a и b отображаются в области вывода. После этого запускается оператор цикла while, в котором и происходят все основные события. В операторе проверяется условие i<20. В теле оператора цикла while командами b:=a+b и a:=b-a вычисляется очередное число в последовательности Фибоначчи. Далее в области вывода отображается вновь вычисленное число, после чего командой i:=i+1 вычисляется новое итерационное значение.

На заметку

Начальное значение индексной переменной i равно 2. На момент присваивания значения переменной i известно два числа (единичные значения переменных a и b) из последовательности. В операторе цикла после вычисления нового числа последовательности значение переменной i увеличивается на единицу. Таким образом, перед проверкой условия i<20 в операторе while значение переменной i указывает количество уже вычисленных чисел в последовательности. Поэтому вычисления продолжаются до тех пор, пока количество вычисленных чисел меньше двадцати. Другими словами, будет вычислено двадцать чисел из последовательности Фибоначчи.

На рис. 9.43 показан документ, в котором та же задача решается с помощью оператора repeat.

По сравнению с предыдущим случаем изменения кода минимальные:

a:=1:

b:=1:

i:=2:

print(NoNL,a); print(NoNL," "); print(NoNL,b); repeat

b:=a+b: a:=b-a:

print(NoNL," "); print(NoNL,b);

399

Самоучитель Matlab

Рис. 9.43. Вычисление чисел Фибоначчи с помощью оператора repeat

i:=i+1:

until i>=20 end_repeat:

Общий синтаксис вызова оператора repeat напоминает синтаксис вызова оператора while, но условие проверяется после выполнения команд тела цикла, а истинность условия означает завершение оператора:

repeat

команды

until условие end_repeat

Выполняется оператор так: сначала выполняются команды, затем проверяется условие. Чтобы оператор repeat продолжил работу, необходимо, чтобы условие было ложным. Если условие истинно, работа оператора repeat заканчивается.

Помимо блоков команд, содержащих условные операторы и операторы цикла, в документах MuPAD можно создавать процедуры – именованные блоки программного кода, которые можно вызывать по имени. Синтаксис объявления процедуры такой:

имя_процедуры:=proc(аргументы) local локальные_переменные; begin

команды end_proc

400

Источник: https://studfile.net/preview/16433384/