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

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

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

print(Unquoted," - не знаю такого цвета") end_case

У функции GetColor() один аргумент – предполагается, что он числовой. Основу кода функции составляет оператор выбора case, в котором проверяется значение аргумента функции. Если аргумент равен 1, командой print(Unquoted,"1 - означает КРАСНЫЙ") выводится сообщение

1 – означает КРАСНЫЙ. Первым аргументом функции print() передается инструкция Unquoted, которая означает, что при отображении сообщения в области вывода его не нужно заключать в двойные кавычки. Чтобы после вывода сообщения работа оператора выбора завершалась, после команды с функцией print() указана инструкция break.

На заметку

Последовательность команд в MuPAD разделяется точкой с запятой (то есть ;).

Для значений аргумента функции 2 и 3 также предусмотрены свои сообщения. Каждый из соответствующих блоков заканчивается инструкцией break – в силу той же причины, что и для первого блока. Блок otherwise выполняется, если не найдено ни одно совпадение. В этом случае командой print(NoNL,x) выводится значение аргумента, переданного функции GetColor() при вызове. Инструкция NoNL в аргументах функции print() означает, что после вывода соответствующего сообщения переход к новой строке не выполняется.

На заметку

Ключевое слово NoNL является аббревиатурой от No New Line (означает нет новой строки).

Следующей командой print(Unquoted," – не знаю такого цвета") к выведенному числовому значению (мы предполагаем, что числовому) добавляется текстовое сообщение.

На заметку

Поскольку блоком otherwise оператор выбора завершается, нет необходимости указывать в конце этого блока инструкцию break.

На рис. 9.36 показано рабочее окно среды MuPAD с кодом функции

GetColor().

Примеры вызова функции GetColor() с разными числовыми аргументами (в диапазоне натуральных значений от 1 до 4) представлены на рис. 9.37.

391

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

Рис. 9.36. Программный код функции с оператором выбора case

Рис. 9.37. Результат вызова функции GetColor()

392

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

Еще одна функция, в которой использован оператор выбора case, представлена в документе на рис. 9.38.

Рис. 9.38. В функции TestNumber() использован оператор выбора case

Программный код этой функции приведен ниже:

TestNumber:=x-> case x

of 1 do of 2 do of 3 do of 5 do of 8 do

print(Unquoted,"Это число Фибоначчи!"); break

of 6 do

393

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

print(Unquoted,"Совершенное число: 6=1+2+3 и 6=1*2*3"); break

otherwise

print(Unquoted,"Ничего интересного!") end_case

Особенность этого кода состоит в том, что он содержит пустые блоки ofdo – то есть блоки, которые не содержат команд для выполнения. Такой подход используется, если одни и те же действия нужно выполнять для нескольких значений проверяемого выражения. Что касается функции TestNumber(), то у нее один аргумент, который проверяется на предмет принадлежности к последовательности Фибоначчи.

На заметку

Последовательность Фибоначчи формируется так. Первые два числа последовательности равны 1, а каждое следующее равно сумме двух предыдущих. Таким образом, получаем числа 1, 1, 2, 3, 5, 8, 13, 21 и так далее.

Для нас интерес представляют числа в пределах первого десятка. В этом диапазоне к последовательности Фибоначчи имеют отношение числа 1, 2, 3, 5 и 8. Именно эти значения проверяются в начальных of-do блоках оператора выбора. Все эти блоки, кроме блока, соответствующего значению 8, пустые – то есть не содержат команд для выполнения. Поэтому если имеет место совпадение в одном из таких пустых блоков, сразу выполняются команды первого непустого блока – в данном случае блока для значения аргумента 8. Благодаря этому для значений 1, 2, 3, 5 и 8 аргумента функции TestNumber() выполняются одни и те же команды. А именно командой print(Unquoted,"Это число Фибоначчи!") выводится сообщение

Это число Фибоначчи!, а затем благодаря инструкции break работа оператора выбора (а с ним и все функции) завершается.

Отдельно обрабатывается значение аргумента 6. Число 6 – так на-

зываемое совершенное. Совершенные числа

имеют особенность –

он равны сумме своих делителей (чисел, на

которые делится чис-

ло). Делителями числа 6 являются числа 1, 2 и 3. Сумма этих чисел также равна 6. Если аргумент функции TestNumber() равен 6, командой print(Unquoted,"Совершенное число: 6=1+2+3 и 6=1*2*3") выводится сообщение о том, что число 6 - совершенное. Во всех прочих случаях появляется сообщение Ничего интересного!. На рис. 9.39 приведен фрагмент документа с примерами вызова функции TestNumber().

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

394

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

Рис. 9.39. Результат вызова функции TestNumber()

Помимо условных операторов, важное место в программировании занимают операторы цикла, которые позволяют многократное повторение определенных действий. В MuPAD используются операторы цикла for, while и repeat. Рассмотрим каждый из этих операторов.

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

for переменная from значение_1 to значение_2 step значение_3 do команды

end_for

Выполняется оператор цикла for следующим образом. Индексная переменная, указанная после ключевого слова for, последовательно пробегает значения от значение_1 (указано после ключевого слова from) до значения (не превышая значения) значение_2 (указано после ключевого слова to) с приращением на каждом шаге, равном значение_3 (указано после ключевого слова step). При каждом фиксированном значении индексной переменной выполняются команды, размещенные после ключевого слова do

идо окончания тела оператора цикла (инструкция end_for).

На заметку

Шаг приращения (инструкция step) указывать не обязательно. В этом случае индексная переменная изменяется на единицу. Если изменение индексной переменной в процессе выполнения оператора цикла уменьшается, вместо инструкции to используют инструкцию downto.

395

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