scilab учебник. Учебник Scilab. Учебник Для студентов по дисциплин Базовые средства математических пакетов
Скачать 5.73 Mb.
|
sca ). При работе с графическими объектами можно также использовать сле- дующие функции: scf – установить текущий рисунок(окно); 142 delete – удаление графического объекта и его дочерних элементов; copy – копирование графического объекта; move– перемещение, перевод, графического объекта и его дочерних элементов; gdf – возвращение дескриптора по умолчанию фигура; gca – возвращение дескриптора текущих осей; gce – получение дескриптора текущего объекта; get – получение значения свойства графических объектов или объект пользовательского интерфейса; set – установка значения свойства графических объектов или объектов пользовательского интерфейса. 1.4.3. Построение графических интерфейсов пользователя (GUI) Графический интерфейс пользователя В Scilab, так же, как и в других программных системах, можно создавать Windows-приложения, которые состоят из различных оконных интерфейсов и их компонентов для реализации ввода/вывода данных или любой другой гра- фической информации. Средством для построения таких оконных интерфей- сов в Scilab является графический интерфейс пользователя (GUI) Простейшие предопределенные оконные интерфейсы (GUI) будут кратко описаны в п. 1.5.4. Подробно с предопределенными GUI waitbar, x_choices, x_choose, x_dialog, x_matrix, x_mdialog можно ознакомится на стра- нице Scilab по GUI. Далее рассмотрим средства Scilab для построения графических интер- фейсов, разрабатываемых пользователем для решения своих задач. Построение графического интерфейса пользователя Функция Scilab uicontrol позволяет отображать в графическом окне ин- терактивные компоненты (Style) GUI такие как ползунки, числовые поля, из- меняемые кнопкой мыши, редактируемые таблицы, редактируемые текстовые поля в графических элементах, флажки, группы кнопок, выпадающие списки, выпадающие меню кнопки и др. Эти объекты являются прямыми потомками графического окна, в которой они определены. Их свойства (допустимые зна- чения) могут быть установлены и настроены как в функции uicontrol , так и в функции set через их указатели также, а также с помощью точечной нотации, как и для других графических объектов. 143 Функция uicontrol имеет следующие форматы: h=uicontrol("Компонент1","Значение1",...,"Свойствоn","Значениеn"); h=uicontrol(h,"Компонент1","Значение1",...,"Свойствоn","Значениеn"); где: Компонентn – название n -го компонента GUI ; Значениеn – значение n -го компонента GUI ; h – переменная типа handle , которая связана с соответствующей компонентой и ее набором свойств; Эта функция устанавливает свойства различных компоненты (Style) и их значения графического окна. Естественно предварительно должно быть за- дано свойство Style, значениями которого могут быть допустимые имена ком- понет. Если дескриптор задан, как первый параметр ( h ), то uicontrol создает новый элементы GUI, определяемый дескриптором – h Если дескриптор не да- ется, то uicontrol создается на текущем рисунке (который может быть получен с помощью вызова к функции gcf ). Затем при создании элемента управления, устанавливаются свойства, за- данные в качестве соответствующих значений. Это эквивалентно созданию с помощью uicontrol какого-либо компонента, а затем установка его свойств с помощью функции set Таким образом, Scilab и все графические объекты (компоненты) связы- вают между собой через механизм свойства. Таким образом, чтобы создать адаптированный uicontrol , нужно знать допустимые значения используемых свойств, причем всем неиспользуемым свойствам присваиваются значения по умолчанию. Описание всех доступных компонентов и их свойств приведены на стра- нице справки по uicontrol и uicontrol_properties [ ]. В Приложении 1.4.3, табл. 1.4.3-1 перечислены наиболее используемые компоненты GUI и их свой- ства. Рассмотрим в качестве примера, создание в графическом окне с именем МТУСИ компоненты Командная кнопка ( PushButton) . По умолчанию эта кнопка не снабжается никакой надписью, имеет серый цвет и располагается в левом нижнем углу фигуры figure Модифицируем код создания кнопки, задав дополнительно значения следующих свойств: месторасположение и заголовок окна; надпись на кнопке; месторасположение кнопки. 144 Текст программного кода приведен на рис. 1.4.3-1, а справа на этом же рисунке можно увидеть графическое окно, которое было получено в резуль- тате работы соответствующего программного кода. Этапы Программный код Графическое окно Создание figure с именем МТУСИ и pushbutton с именем Кнопка1 // Создать окно f = figure(); // Определить положение окна set(f, 'position', [0,0,220,100]) // Определить имя окна set(f, 'figure_name','МТУСИ'); // Создать кнопку c // надписью – Кнопка1 и определить // ее позицию на figure МТУСИ B1=uicontrol('style','pushbutton',… 'string','Кнопка1',… 'position',[50,50,100,20]); Создание listbox L1=uicontrol(f,'style','listbox', 'position', [50 20 100 20]); Определе- ние Callback при нажатии на кнопке B1=uicontrol('Style', 'Pushbutton', 'String', 'Кнопка1', 'Callback', 'Fun1'); Переход на выполнение функции Fun1 Выполнение функции Fun1 Function Fun1() set(h,'string',sprintf("%s\n",… 'Привет!)) endfunction Рис. 1.4.3-1. Этапы создание простейшего GUI При щелчке на кнопку вокруг ее надписи появляется пунктирный пря- моугольник , свидетельствующий о том, что кнопка «находится в активном со- стоянии». Щелчок за пределами поверхности кнопки выведет ее из активного состояния, и пунктирная рамка пропадет. Основное назначение командной кнопки – является вызов функции, реагирующей на щелчок по кнопке. Щелчок по кнопке генерирует событие Callback, которое указывается как имя свойства функции uicontrol . Значением свойства Callback является строка с именем функции – Fun1 , вызываемой при щелчке по кнопке. Рассмотрим пример создания графического интерфейса для исследова- ния функции f(x)=x 2 на отрезке [1;2] , для чего выведем на экран с шагом h=1 ее значения, а также значения ее первой ( f1(x) ) и второй ( f2(x) ) производных. На рис. 1.4.3-2 представлен сценарий, в котором создается графический интерфейс, предназначенный для решения следующей задачи: 145 Создать приложение, которое при задании исходных данных из графиче- ского окна GUI и выполнения функции по вычислению значений функций и ее первой и второй производных, выводит в тоже самое окно. Причем в GUI необходимо предусмотреть заголовки полей ввода исходных данных, общие и частные заголовки для полей вывода результатов и две кнопки, при нажатии на которые происходит, в соответствии с их назначением, выполнение указан- ных функций или очистка числовых полей. // Сценарий РИС14302: Создание графического интерфейса пользователя // для ввода исходных данных и // вывода результатов работы созданного приложения clear // очистка памяти clc // очистка командного окна // Создание итерфейса пользователя // Создать графическое окно figure t = figure('position',[20,40,1110,290],... 'figure_name','Пример создания интерфейса формы в Scilab'); // Текст задания варианта zadanie = uicontrol('Style','text','Position',[20,220,890,50],... 'FontSize', 28,... 'BackgroundColor',[1 1 1],... 'HorizontalAlignment','center',... 'String',' Таблица значений x, f(x), f1(x) и f2(x) '); // Создать объект Кнопка: Вычислить bt1 = uicontrol('style','pushbutton','string','Вычислить',... 'position',[20,120,90,40],'CallBack','Y'); // Создать объект Кнопка: Очистить bt2 = uicontrol('style','pushbutton','string','Очистить',... 'position',[20,20,90,40],'CallBack','C'); // Создать объек Текстовое поле: X text1 = uicontrol(t,'style','text','String','',... 'position',[140,180,150,20],... 'String',' X '); h1 = uicontrol(t,'style','listbox','position', [140 20 150 160]); // Создать Текстовое поле: f(x) text2 = uicontrol(t,'style','text','string','',... 'position',[310,180,150,20],... 'String',' f(x) '); // Создать объект listbox: f(x) h2 = uicontrol(t,'style','listbox','position', [310 20 150 160]); // Создать Текстовое поле: f1(x)) text3 = uicontrol(t,'style','text','string','',... 'position',[480,180,200,20],... 'String',' f1(x) '); // Создать объект listbox: f2+x) h3 = uicontrol(t,'style','listbox','position', [480 20 200 160]); // Создать Текстовое поле: f2(x)) 146 text4 = uicontrol(t,'style','text','string','',... 'position',[700,180,200,20],... 'String',' f2(x) '); // Создать объект listbox: f2(x)) h4 = uicontrol(t,'style','listbox','position', [700 20 200 160]); // Текстовое поле, Ввод исходных данных text5 = uicontrol(t,'style','text','string','',... 'position',[920,240,150,20],... 'String',' Ввод исходных данных'); // Поле ввода a texta = uicontrol(t,'style','text','string',... 'a','position',[920,170,40,20]); edit_1 = uicontrol(t,'style','edit','string','1',... 'position',[950, 170, 150, 20]); sa1 = get(edit_1,'string'); // Считывание a и преобразование в строку sa1 = evstr(sa1); // Преобразование a к типу double // Поле ввода b textb = uicontrol(t,'style','text','string','b',... 'position',[920,140,40,20]); edit_2 = uicontrol(t,'style','edit','string','5',... 'position',[950,140, 150, 20]); sb1 = get(edit_2,'string'); // считывание b и преобразование в строку sb1 = evstr(sb1); // преобразование b к типу double // Поле ввода h texth = uicontrol(t,'style','text','string',... 'h','position',[920,110,40,20]); edit_3 = uicontrol(t,'style','edit','string','1',... 'position',[950, 110, 150, 20]); // Поле ввода исходной фукции f textf = uicontrol(t,'style','text','string','f',... 'position',[920,80,40,20]); edit_f = uicontrol(t,'style','edit','string','x^3',... 'position',[950, 80, 150, 20]); // Поле ввода первой производной f1 функции f textf1 = uicontrol(t,'style','text','string','f1',... 'position',[920,50,40,20]); edit_f1 = uicontrol(t,'style','edit','string','2*x^2',... 'position',[950, 50, 150, 20]); // Поле ввода второй производной f2 функции f textf2 = uicontrol(t,'style','text','string','f2',... 'position',[920,20,40,20]); edit_f2 = uicontrol(t,'style','edit','string','4*x',... 'position',[950, 20, 150, 20]); function C() // Функция С очищает все listbox set(h1,'string'," "); // очистка listbox set(h2,'string'," "); // очистка listbox set(h3,'string'," "); // очистка listbox 147 set(h4,'string'," "); // очистка listbox endfunction function Y() // Функция Y вычисляет и выводит в графическое окно значения x, f, f1, f2 sa1 = get(edit_1,'string') // считывание a и преобразование в строку aa = strtod(sa1) // преобразование a к типу double sb1 = get(edit_2,'string') // считывание b и преобразование в строку bb = strtod(sb1) // преобразование b к типу double sh1 = get(edit_3,'string'); // считывание h и преобразование в строку hh = strtod(sh1); // преобразование h к типу double sf = get(edit_f,'string') // считывание f и преобразование в строку sf1 = get(edit_f1,'string') // считывание f1 и преобразование в строку sf2 = get(edit_f2,'string') // считывание f2 и преобразование в строку n = int((bb - aa) / hh) + 1 //n=5; x=1; aa=1; bb=5, hh=1 // Значения по умолчанию x = aa; for i = 1:n arg(i) = x fx(i) = evstr(sf); f1x(i) = evstr(sf1); f2x(i) = evstr(sf2); x = x + hh end //Вывод полученных данных set(h1,'string', sprintf("%1.2f\n",arg)) // Вывод в 1 listbox set(h2,'string', sprintf("%4.8f\n",fx)) // Вывод во 2 listbox set(h3,'string', sprintf("%4.8f\n",f1x)) // Вывод в 3 listbox set(h4,'string', sprintf("%4.8f\n",f2x)) // Вывод в 4 listbox endfunction // Конец сценария Рис. 1.4.3-2. GUI для вывода таблицы значений функции и ее производных и результат работы созданного приложения 148 Рис. 1.4.3-2. GUI для вывода таблицы значений функции и ее производных и результат работы созданного приложения 1.4.5 Контрольные вопросы 1) Какие способы представления графиков используются в Scilab? 2) Что такое графическое окно Scilab? 3) Что такое дескриптор графического окна ? 4) Какое назначение имеет функция scf(n) ? 5) Какой номер у первого графического окна? 6) Можно ли создать графическое окно с определенным номером? 7) Какое назначение имеют элементы меню графического окна: Файл, Инструменты, Правка, Справка? 8) Каким образом можно закрыть графическое окно? 9) Какое назначение имеет функция xdel(id) ? 10) Какое назначение имеет команда winsid ? 11) Как выполнить настройку элементов графики (оси, толщина линий, шрифты и т.д.)? 12) Какие графические объекты имеются в Scilab? 13) Какова иерархия графических объектов ? 14) Что представляет собой графический объект Legend ? 15) Что определяют свойства графических объектов? 16) Что такое графический редактор? 17) Какие инструкций для установки цвета и типа линии известны? 18) Для чего используются функции plot2d2, plot2d3 и plot2d4 ? 19) Можно ли с использованием одной функции plot построить не- сколько графиков? 20) Можно ли в одном графическом окне построить несколько графи- ков одного типа? 21) Можно ли в одном графическом окне построить несколько графи- ков разных типов? 22) Каким образом в операторе указывается цвет и символ отображения графика? 149 23) Что такое пояснительная информация графического окна? 24) Назначение и формат функций xtitle и legend ? 25) Каково назначение функции mtlb_hold ? 26) Каково назначение функции meshgrid ? 27) Какие типы графиков позволяют строить встроенные функции: plot , contour , surf и plot3 ? 28) Что такое контурные линии, и на каком графике их можно увидеть? 29) Что такое глобальное свойство графических объектов? 30) Для чего используется Редактор объектов? 31) Какая функция используется для создания графического окна? 32) Что такое дескриптор? 33) Для чего используются функции get и set? 34) Какие предопределенные оконные интерфейсы известны? 35) Для чего используется функция uicontrol? 150 1.5. Средства программирования Scilab 1.5.1. Общие понятия идеологии программирования Программирование – процесс создания компьютерных программ с по- мощью языков программирования. В узком смысле программирование рассматривается как кодирование – реализация одного или нескольких взаимосвязанных алгоритмов на языке про- граммирования. В широком смысле программирование – это процесс создания компью- терных программ, то есть разработка Программного Обеспечения (ПО), в нашем случае разработка Прикладных Программ (ПП). Причем один из ос- новных этапов разработки ПП связан с написанием исходного кода проекта на языке программирования. Рассмотрим средства разработки ПП, которые помогают разработчикам в решении их профессиональных задач. Прежде всего, это Система программирования – это программная си- стема для разработки ПП средствами конкретного языка программирования. Современные системы программирования обычно предоставляют поль- зователям мощные и удобные средства разработки ПП. В них входят: средства создания и редактирования исходных текстов программ (исходного программ- ного кода); трансляторы; библиотеки стандартных процедур; отладочные средства, помогающие находить и устранять ошибки в программе и другие. Создать ПП – означает |