Управляющие структуры. Диалоговый ввод.
Помимо программ с линейной структурой, инструкции которых исполняются строго по порядку, существует множество программ, структура которых нелинейна. При этом ветви программ могут выполняться в зависимости от определенных условий, иногда с конечным числом повторений – циклов, иногда в виде циклов, завершаемых при выполнении заданного условия. Практически любая серьезная программа имеет нелинейную структуру. Для создания таких программ необходимы специальные управляющие структуры. Они имеются в любом языке программирования, и в частности в MATLAB.
Диалоговый ввод
Приведем простой пример диалоговой программы, которую легко поймут приверженцы доброго старого Бейсика:
% Вычисление длины окружности с диалоговым вводом радиуса
r
=
0
;
while
r
>
=
0
,
r
=
input(
'Введите радиус окружности r='
);
if
r
>
=
0
disp(
' Длина окружности l='
); disp(
2
*
pi
*
r),
end
end
Эта программа служит для многократного вычисления длины окружности по вводимому пользователем значению радиуса г. Обратите внимание на то, что здесь мы впервые показываем пример организации простейшего диалога. Он реализован с помощью команды:
input: Mnput(Введите радиус окружности r
=
'):
При выполнении этой команды вначале выводится запрос в виде строки, затем происходит остановка работы программы и ожидается ввод значения радиуса г (в общем случае числа). Ввод, как обычно, подтверждается нажатием клавиши Enter, после чего введенное число присваивается переменной г. Следующая строка:
if
r
>
=
0
disp(
' Длина окружности l = '
); disp(
2
*
pi
*
r);
end
С помощью команды disp при r>=0 выводит надпись "Длина окружности 1=" и вычисленное значение длины окружности. Она представляет собой одну из наиболее простых управляющих структур типа if…end. В данном случае она нужна для остановки вычислений, если вводится отрицательное значение г (прием, который любят начинающие программисты).
Приведенные строки включены в управляющую структуру while…end. Это необходимо для циклического повторения вычислений с вводом значений r. Пока r>=0. цикл повторяется. Но стоит задать r<0, вычисление длины окружности перестает выполняться, а цикл завершается.
Если данная программа записана в виде m-файла circ.m, то работа с ней будет выглядеть следующим образом:
>
>
circ
Введите радиус окружности R
=
1
Длина окружности l
=
6.2832
Введите радиус окружности R
=
2
Длина окружности l
=
12.5664
Введите радиус окружности R
=
-
1
>
>
Итак, на примере даже простой программы мы видим пользу применения управляющих структур типа if…end и while…end, а также функций диалогового ввода input('String') и вывода disp. Обратите внимание на завершение работы программы при вводе любого отрицательного числа для радиуса окружности.
Функция Input может использоваться и для ввода произвольных строковых выражений. При этом она задается в следующем виде:
input(
'Комментарий'
, V)
При выполнении этой функции она останавливает вычисления и ожидает ввода строкового комментария. После ввода возвращается набранная строка. Это иллюстрирует следующий пример:
>
>
S
=
input(
'Введите выражение '
,
's'
) Введите выражение (Вводим)
2
*
sin(
1
)
S
=
2
*
sin(
1
)
>
>
eval(S)
ans
=
1.6829
Обратите внимание на то, что функция eval позволяет вычислить выражение, заданное (полученное от функции input) в символьном виде. Вообще говоря, возможность ввода любого символьного выражения в сочетании с присущими языку программирования MATLAB управляющими структурами открывает путь к созданию диалоговых программ любой сложности [Нужно проявлять большую осторожность при применении eval и input, так как программы с их с использованием не всегда возможно компилировать. Впрочем, р-коды таких программ можно использовать с сервером run-time. – Примеч. ред.].