8(495)909-90-01
8(964)644-46-00
pro@sio.su
Главная
Системы видеонаблюдения
Охранная сигнализация
Пожарная сигнализация
Система пожаротушения
Система контроля удаленного доступа
Оповещение и эвакуация
Контроль периметра
Система домофонии
Парковочные системы
Проектирование слаботочных сетей
Аварийный
контроль
Раздел: Документация

0 ... 146 147 148 149 150 151 152 ... 365

4 Считывание в строковую переменную операции, введенной пользователем а = input(Введите первое число") ;

i Считывание в строковую переменную операции, введенной пользователем oper = input(Введите арифметическую операцию (+, -, *, / ,Л) , а); % Считывание в строковую переменную операции, введенной пользователем Ь = input[1Введите второе число ); % Преобразование чисел в строки stra = num2str{a); strb = num2str{b);

% Формирование строки с арифметическим выражением (строка завершается ? точкой с запятой для подавления вывода промежуточных результатов % в командное окно

str = strcat(res = , stra, oper, strb, ;); % Вычисление арифметического выражения, % его результат хранится в переменной res eval I str) ,-

% Формирование строки с результатом в виде 4.2 + 3.1 = 4.3" strres = num2str(res); % Сцепление строк

str = strcat(stra, oper, strb, = , strres);

% Вывод строки с результатом в командное окно disp(str)

Интерфейс пользователя, предоставляемый файл-функцией calc2, точно такой же, как в calcl, текст которой приведен в листинге 8.20. Формирование и выполнение команд MATLAB при помощи eval позволило сделать алгоритм калькулятора более компактным и универсальным.

В качестве завершающего упражнения на использование строк и функции eval напишите программу для построения графиков функции одной переменной с интерфейсом пользователя из командной строки. Работа с программой должна выглядеть следующим образом.

1.Запрос функции, график которой требуется построить. Пользователь задает формулу функции без учета поэлементных операций, т. е. например, ехр(х)*sin(х) , а не ехр(х).*sin(х).

2.Запрос границ отрезка. Пользователь вводит левую и правую границы.

3.Запрос цвета, стиля линий и маркеров. Пользователь выбирает номер цвета, стиля и маркера из предлагаемых списков (ограничьте выбор несколькими возможностями для уменьшения объема программы).


4.Вывод графика функции в графическое окно.

5.Запрос на продолжение работы с программой. Пользователь вводит у или п.

Запрограммируйте алгоритм в файл-функции без входных и выходных аргументов. Оформите весь диалог внутри цикла while, который работает, пока некоторая строковая переменная flag равна у. До цикла присвойте flag значение у. В конце цикла получите ответ от пользователя о продолжении работы при помощи input и занесите ответ в переменную flag. Запишите функцию, введенную пользователем, в строковую переменную, а пределы построения графика— в числовые переменные. Замену обычных операций на поэлементные выполните при помощи str rep. Вывод списка возможных цветов, типов линий и маркеров осуществите функцией disp. Используйте операторы переключения switch для формирования строки с командой plot в зависимости от номера цвета и стиля линии, и типа маркера, выбранных пользователем из списка. Возможный вариант текста файл-функции для визуализации функций с интерфейсом командной строки приведен в листинге 8.22.

Заметьте, что при некорректном вводе формулы для отображаемой функции программа myplot прекратит работу. Предположим, что пользователь ввел 1п(х) вместо встроенной log(x). Ошибка возникнет при выполнении строки с командой eval при вычислении вектора у значений функции. Улучшите самостоятельно файл-функцию myplot, заключив блоки с возможными источниками ошибок в конструкцию try.. .catch, которая предназначена для обработки исключительных ситуаций.

........................—...................................••;...........................-..................................................-----------

j Листинг 8.22. Пример файл-функции myplot с интерфейсом командной строки j

function myplot{ )

% Построение графиков функций,

% диалог с пользователем из командной строки

disp(1ПРОГРАММА ДЛЯ ПОСТРОЕНИЯ ГРАФИКОВ") disp(ФУНКЦИЙ ОДНОЙ ПЕРЕМЕННОЙ *] flag = у while flag = у % Запрос функции

strfun = input(Введите функцию, например, exp(х)*sin(х) 1s 1) ; % Запрос левой границы отрезка

left = input(1Введите левую границу отрезка, например, -1.2 ); % Запрос правой границы отрезка

right = input(1Введите правую границу отрезка, например, 1.3 М;


% Запрос типа линии

disp ( Выберите тип линии:)

disp(сплошная1 *)

disp(пунктирная2)

disp(штриховая3)

linetype = input(Введите 1, 2, или 3 );

% Запрос цвета линии

disp(1 Выберите цвет линии:)

disp(1 красная 1)

disp(синяя 2)

di sp(черная 3)

linecolor = input(1 Введите 1, 2, или 3 );

% Запрос маркера

disp(Выберите тип маркера:)

disp(без маркера 0)

disp{звездочка 1)

dispС кружок2)

marker = input(1 Введите 0, 1, или 2 );

% Обработка ввода пользователя, формирование строки

% с командой plot и ее выполнение.

% Замена арифметических операций на поэлементные

strfun = strrep(strfun, *, .*);

strfun = strrep(strfun, /, ./);

strfun = strrep(strfun, Л•, .Л);

i Генерация вектора значений аргумента х = left : (right - left)/30 : right;

i Генерирование строки для вычисления вектора значений функции % строка заканчивается точкой с запятой для подавления вывода % промежуточных результатов на экран strhelp = strcat(у =", strfun, ;); 4 Вычисление вектора значений функции

eval(strhelp); % значения функции теперь хранятся в векторе у % Формирование строки с командой plot strplot = "plot(x, у,; I Добавление информации о типе линии switch linetype case 1

strplot = strcat(strplot, 1-); 15 3ai. 130



0 ... 146 147 148 149 150 151 152 ... 365