Раздел: Документация
0 ... 145 146 147 148 149 150 151 ... 365 Примечание Часто кроме конвертирования числа в строку требуется обратное преобразование строки в число, которое осуществляется функцией str2num. Во входном аргументе задается строка из символов, например: 423.77, или 1.98е-03,ав выходном аргументе возвращается соответствующее число. Входным аргументом может быть и массив строк, который преобразуется в числовой массив. Если преобразование невозможно, например, а = str2num< 12А99), то результатом работы будет пустой массив (подробно о функциях преобразования сказано в приложении 1). Вышеописанная модификация вида результата требует некоторых изменений в тексте файл-функции calc, приведенном в листинге 8.19. Операторы, реализующие ввод пользователя, остаются без изменений. Попытайтесь самостоятельно модернизировать файл-функцию calc, в случае возникновения вопросов обратитесь к листингу 8.20, в котором приведены операторы, обрабатывающие ввод пользователя и выдающие результат. Диалог файл-функции calc теперь выглядит следующим образом: » calcic Введите первое число 1.2 Введите арифметическую операцию (+, -, *, /) + пользователь получает в стандартной переменной ans. Диалог файл-функции caic приведен ниже: » calc Введите первое число 1.2 Введите арифметическую операцию (+, *, /) + Введите второе число 3.1 ans - 4.3000 Попробуйте изменить файл-функцию calc так, чтобы ответ имел более наглядный вид. Например, если производится сложение 1.2 и 3.1, то в командное окно выводится 1.2 + 3.1 = 4.3. Задача состоит в формировании строки с результатом (из введенных чисел, знака арифметической операции, знака "=", ответа) и выводе ее в командное окно. Обратите внимание, что строка результата формируется как из строк, например,+ и =, так и из чисел 1.2, 3.1,4.3, которые хранятся в переменных. Очевидно, что для получения требуемой строки следует применить сцепление. Перед сцеплением необходимо преобразовать значение переменной в строку при помощи функции num2str, входной аргумент которой является числом или переменной с числовым значением, а выходной — строковой переменной, соответствующей данному числовому значению. Введите второе число 3.1 1.2 + 3.1 = 4.3 Листинг 8.20. Улучшение вида результата работы файл-функции calc function calcl % Калькулятор с интерфейсом командной строки % Считывание в числовую переменную числа, введенного пользователем а = input(Введите первое число ); % Считывание в строковую переменную операции, введенной пользователем oper = input{Введите арифметическую операцию (+, -, *, /) s); % Считывание в числовую переменную числа, введенного пользователем b = input(1Введите второе число ); % Вычисление результата арифметической операции switch oper case + res = a + b; case 1- res - a — b; case * res = a * b; case 1/1 res = a / b; otherwise error(неизвестная арифметическая операция) end % Преобразование чисел в строки stra = num2str(a); strb = num2str(b); strres = num2str(res); % Сцепление стрэк str = strcat(stra, oper, strb, =, strres); i Вывод строки с результатом в командное окно disp(str) Вышеописанные примеры содержат оператор переключения switch, который производит вычисления в зависимости от знака арифметической one- рации, выбранного пользователем. Заметьте, что пользователь вводит числа и арифметическую операцию, которые входят в арифметическое выражение, понятное MATLAB. Рациональнее создать строку с арифметическим выражением, выполнить ее, как команду MATLAB и вывести результат, тем самым избежав перебора. Такой подход позволяет дополнительно использовать возведение в степень, ввод числа п и придает программе более наглядный вид. Действительно незаменимой и очень полезной функцией является eval, которая служит для выполнения команды MATLAB, записанной в строке или строковой переменной. Формирование строки с командой и ее выполнение функцией eval описаны в следующем разделе. Формирование и исполнение команд, функция eval Встроенная функция eval позволяет выполнить строку, которая содержит команду MATLAB. Строка с командой является входным аргументом eval, например: » str = Ч + 2; » eval(str) ans = 3 Перед выполнением команду можно сформировать из нескольких строк: » strl = "у = sin(; » str2 = 3/2*pi; » str3 = ); » str = strcat(strl, str2, str3); » eval(str) У = -1 Используйте функцию eval в файл-программе caici, приведенной в листинге 8.20, для формирования и вычисления результата арифметического выражения без перебора арифметических операций, которое было реализовано оператором switch. Файл-функция caic2, приведенная в листинге 8.21, решает поставленную задачу. . Листинг 8.21. Файл-функция calc2, демонстрирующая использование aval function calc2 % Калькулятор с интерфейсом командной строки 0 ... 145 146 147 148 149 150 151 ... 365
|