Управляющие структуры. Диалоговый ввод.
Помимо программ с линейной структурой, инструкции которых исполняются строго по порядку, существует множество программ, структура которых нелинейна. При этом ветви программ могут выполняться в зависимости от определенных условий, иногда с конечным числом повторений – циклов, иногда в виде циклов, завершаемых при выполнении заданного условия. Практически любая серьезная программа имеет нелинейную структуру. Для создания таких программ необходимы специальные управляющие структуры. Они имеются в любом языке программирования, и в частности в MATLAB.
Диалоговый ввод
Приведем простой пример диалоговой программы, которую легко поймут приверженцы доброго старого Бейсика:
% Вычисление длины окружности с диалоговым вводом радиуса r=0; while r>=0, r=input('Введите радиус окружности r='); if r>=0 disp(' Длина окружности l='); disp(2*pi*r), endendЭта программа служит для многократного вычисления длины окружности по вводимому пользователем значению радиуса г. Обратите внимание на то, что здесь мы впервые показываем пример организации простейшего диалога. Он реализован с помощью команды:
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. – Примеч. ред.].
