Mоделирование процессов и систем в Matlab (966709), страница 27
Текст из файла (страница 27)
Обрап(ение к любому полю с именем Р1е) 6 осуществляется так: <инв пораненной-записи».Рте)О Например, выполнение команды » Р681 Гав 'Аврутова' Р681 " тат: 'Аврутова' приводит к автоматическому формированию переменной Р681 класса зсгисс с единственным полем Рав, значением которого является символьная строка Аврутова. Таким же образом к этой переменной можно добавлять другие поля. » Р681.1яуа 'марина': Р681.ьат 'Степановна': » Р681 Р681 Гав: 'Аврутова' 1пуа: 'марина' Ьас; 'Степановна' В результате получим ту же переменную-запись, но уже с тремя полями. Чтобы создать массив переменных, имеющих те же поля и то же имя Р681, достаточно добавлять при обращении к этому имени, как к элементу массива. номер записи в скобках.
» Р681(2).Гав 'Березник': » Р681(2).1ауа 'Апенсей': Р681(2). Ьат 'Иваиович". » Р681(3) Лав 'Попель ". Основные классы объентов » Р681(3).(ауа 'богдан': Р681(З) Ьат 'Тине)еевич': » Р681 Р681- 1хЗ в!гост аггау и!1Ь (1е)г)з: уаа тщуа Ьас Как видим, в этом случае содержимое полей уже не выводится на экрзн.
Отображается лишь информация о структуре массива, его размерах и именах нолей. Для получения информации об именах полей записи можно использовать функцию Т(еЫпапек » Узе)ппщяез(Р681) апз 'уаа' '1щуа' 'Ьа1' Задать переменную-зались можно также с помон(ью функпии 91гпс1 по такой схеме: <иня записи> - зпгос(('<иия поля1>'„ <значение1>. '<иня поля2>'. <значение2>. .). Например, выполнение команды » РБП = втгисе('ущя'.'Сергеев','!щуа'.'Сергей'. 'Ьае'.'Сергеевич'.'(ой'. 1981) приведет к формированию следующей переменной-записи: Рб)гУащ: 'Сергеев' 1щуа: Сергей' Ьа(; 'Сергеевич' йог(: 1981 Используя индексацию, можно легко определить значение любого поля или элемента структуры.
Таким же образом можно присвоить значение любому полю или элементу структуры. Если к одному из элементов массива записей (структуры) добавляется значение нового поля, это поле автоматически появляется во всех остальных элементах массива, но значение поля у других элементов остается пустым. Например: » Р681.Ущз 'Аврутова' т » РБК(.1ауа 'Иарнна"! Р681.Ьвп 'Степановна': » Р681(2).тая 'Березняк' т » Р681(2) !пуа 'Алексей", РББ)(2).Ьае 'Иванович': » Р681(З) . Т - 'И е » Р681(З).!щуа 'Богдан'; Р683(3).Ьат 'Тинофеевич'г » Р681(З) .
9ое 1982 Р681 1хЗ зтгосп аггау и!(Ь !!е)6в: таз 1щуа Ьас йоо 144 Урок и ° Объектно-ориентированное программирование » РИ1(2),до6 аив - [] Чтобы удалить некоторое поле из всех элементов массива записей, нужно использовать процедуру гтвт) е] 6 по такой схеме: 5=(тле]6(5. ' и на поля ' ), где 5 — имя массива записей, который корректируется. Рассмотрим пример: » Р581 гене)6(РИ1.'Ьат') Р881- 1хЗ »1госг аггау нт(Ь (те)6вн (дв (пуа Класс зсгнс1, как видим, имеет небольшое число методов, что делает его непосредственное использование при расчетах довольно проблематичным.
Однако на применении объектов имешю этого класса основана возможность создавать новые классы объектов [см. далее). Поэтому наличие данного класса очень важно для расширения возможностей системы МАТ].АВ. Класс ячеек сеН Массив ячеек состоит нз элементов, которые могут содержать массивы любого типа, в том числе и массив ячеек. Он позволяет хранить массивы с элементами разных типов, имеющие разное количество измерений. Например, одна нз ячеек может содержать матрицу действительных чисел, вторая — массив символьных строк, третья — вектор комплексных чисел. МАТВАВ позволяет строить массивы ячеек любых размеров, имеющие любую структуру, в том числе и многомерные. Создание массива ячеек Создать массив ячеек можно с помощью операторов присваивания и посредством функции се] ], причем перед использованием этой функции необходимо сформировать пустой массив, а потом присвоить значения отделъным ячейкам.
Примвнвниеоператоров присваивания Существует два способа присвоения значений отдельным ячейкам: индексация ячеек и индексация содержимого. Первый способ заключается в следующем. При присваивании значений отдельным элементам массива ячеек индексы ячейки, находящиеся слева от знака присваивания, размещают в скобках, используя стандартные обозначения для массива. Значение, присваиваемое ячейке, которое находится справа от знака присваивания, помещают в фшурные скобки. Для примера рассмотрим создание массива С ячеек размером 2и2. Определим каждый элемент массива, то есть каждую из ячеек, таким образом: » С(1.1) - (' Иванов И. В.']: » с(1.2) [[1 2 3: а 5 5: 7 8 9]]: » С(2,1) [5-3т]; » с(2.2) [-Рт : Рв)5 : РП С - ' Иванов И.
6.' [Зхз 6оъЫе] [5.0000 - 3.00001] [1х11 6оиЫе] 145 Основные классы объектов При использовании второго способа элемент массива ячеек, находящийся слева от знака присваивания, указывается в фигурных скобках, а содержимое соответствующей ячейки, находящееся справа — без скобок. » С(1.Ц 'Иванов И.Ю.", » С(1.2) [1 2 3: 4 5 б: У 8 9Ь » С(2.Ц 5-31; » С(2.2) -р!: Р1/5: р1 С - ' Иванов И.
Ю.' [ЗхЗ ОооЫе) [5.0000 - 3.0000Ц [1х11 ФвЫе) Как видно из примеров, в системе МАТ[.АВ массив ячеек выводится в сокращенной форме. Чтобы отобразить содержимое ячеек, нужно применять функцию сеН01зр. » сеПИ!яр[С) С(1. Ц Иванов И.Ю. С(2.Ц- 5.0000 - 3.0000! С(1.2)- 1 2 3 4 5 б 1 8 9 С(2.2)- Со1онн 1 тигоорн 3 -3.1416 -2.5133 -1.8850 Со1ывн 4 тагоорн 6 -1.2566 -0.6283 0 Со1ыюв 7 Гигаион 9 0.6203 1.2566 1.0850 Со1овив 10 Фгооон 11 2.5133 3.1416 Для вывода на экран структуры массива ячеек в виде графического изображения предназначена функция сеПР101 (рис. 4.1): » се11Р1от(С) Рис. 4Л.
Результат действия функции сейр[от 146 Урок 6 ° 06ьектно-ориентированное програииирование Фигурные скобки являются конструктором массива ячеек, аналогично тому как квадратные скобки — конструктором числового массива Это позволяет приведенный выше массив С ячеек построить таким образом: » С (' Иванна И. Ю.'.
П 2 3: Я 5 6: 7 В 9); 5-3),-р1:р1/5:рг) С - ' Иванов И. Ю.' [ЗхЗ аонЫе) [5.0000 - 3.00001) Пх11 ОоиЫе) Применение функции сей Функция сеИ позволяет создать шаблон массива ячеек путем заполнения его пустыми ячейками. Создадим, например, пустой массив ячеек размером 2нЗ: » А - се11[2.3) АП П П П П П Заполним одну из ячеек с использованием оператора присваивания: » А(2.2) (О: р)/10: 2»р1) А- П П П П Пх21 оию)е) П Извлечение данных из массива ячеек Сформировать новые массивы, используя данные из массива ячеек, можно путем применения фигурных и круглых скобок.
Извлечение содержимого онгдельнык ячеек производится посредством указания индексов нужной ячейки в фигурных скобках. » В С(1,2) В" 1 2 3 4 5 6 ) В 9 » вс С(1.1) вв Иванов И. Ю. Извлечение содержимого отдельных элементов определенной ячейки производится путем дополнительного указания в скобках индексов элемента массива, находящегося в нужной ячейке.
» х - С(1.2)[2.3) х"- 6 » у С(1,Ц[1:5) у - Иван Указывая круглые скобки, можно извлекать из массива ячеек другой массив ячеек, составляющий часть первого. » 0 А[2.2:3) 0 - П»21 сонЫе) П Массивы ячеек используются для объединения массивов данных разных типов, имеющих разные размеры. Удобнее применять массивы ячеек вместо массивов записей (структур) в следующих случаях: О когда нужен доступ одновременно к нескольким полям; О при необходимости доступа к подмножествам данных в виде списка переменных," Прон»званые классы О если число полей не определено; О когда нужно извлекать поля из структуры. Если необходимо установить, к какому классу принадлежит тот или иной вычислительный объект, к имени этого объекта следует применить процедуру с1аззч »х рЧ; » с1азз(х) апз - боыЫе » зт - 'письно': » с1дзз(зг) апэ - спаг » з с!азчгпвв2»сг(хН з - спаг Производные классы Рассмотренные ранее классы объектов построены таким образом, что на их основе пользователь имеет возможность создавать новые собственные классы объектов.
В самой системе МАТЕАВ по этому принципу создан и используется встроенный класс 1п1 чпе, который предоставляет простой способ определения встроенных функций для применения в программах вычисления интегралов, решения дифференциальных уравнений и расчета минимумов и нулей функций.
Пакет символьных вычислений БушЬойс МаЧЬ Тоо!Ьох базируется на классе объектов зугь который позволяет выполнять операции с символьными переменными и матрицами. Пакет Соп(го) Бузсеш Тоо)Ьох использует класс объектов 1СЧ и три его дочерних полкласса — сг, гр)с, зз, которые поддерживают алгоритмы анализа и синтеза линейных стационарных систем автоматического управления. В языке МАТЮКАВ отсутствует необходимость и возможность предварительного объявления типа или класса переменных, которые будут использованы. То же самое относится и к объектам любых создаваемых классов.
Объекты класса создаются в виде структур (записей), то есть относятся к потомкам (наследникам) класса зггисг. Поля структуры и операции с полями являются доступными только внутри методов данного класса. Все М-файлы, определяюпчие методы объектов определенного класса, должны размещаться в специальном каталоге, который называется калииогам класса. Имя этого каталога состоит из знака ч(р (коммерческое хэт») и имени класса: 6<них класса>. Каталог класса должен быль подкаталогом одного из каталогов, описанных в путях доступа системы МАТ1.АВ, но не самим таким каталогом.
Каталог класса обязательно должен содержать М-файл носящий имя, совпадающее с именем класса. Такой файл называют хонсогрухгпорон клосса — он создает объекты этого класса„ используя данные в виде массива записей (структуры) и приписывая им метку класса. Класс 1п6пе В МАТЮКАВ определен класс )п1 чпе. Он предназначен для описания функций в том виде, который соответствует их математическому описанию: Е(х. Р).