1.7. Структуры в MatLab При разработке программ важным является выбор эффективного способа представления данных. Во многих случаях недостаточно объявить простую переменную или массив, а нужна более гибкая форма представления данных. Таким элементом может быть структура, которая позволяет включать в себя разные типы данных и даже другие структуры. Структуры задаются следующим образом:
S = struct('field1',VALUES1,'field2',VALUES2,...);
где field1 – название первого поля структуры; VALUES1 – переменная первого поля структуры, и т.д.
Приведем пример, в котором использование структуры позволяет эффективно представить данные. Таким примером будет инвентарный перечень книг, в котором для каждой книги необходимо указывать ее наименование, автора и год издания. Причем количество книг может быть разным, но будем полгать, что не более 100. Для хранения информации об одной книге будем использовать структуру, которая задается в MatLab с помощью ключевого слова struct следующим образом:
S = struct('title','','author','','year',0);
В итоге задается структура с тремя полями: title, author и year. Каждое поле имеет свой тип данных и значение.
Для того, чтобы записать в эту структуру конкретные значения используется оператор ‘.’ (точка) для доступа к тому или иному полю структуры:
S.title = 'Евгений Онегин';
S.author = 'Пушкин';
S.year = 2000;
и таким образом, переменная S хранит информацию о выбранной книге.
Однако по условиям задачи необходимо осуществлять запись не по одной, а по 100 книгам. В этом случае целесообразно использовать вектор структур lib, который можно задать следующим образом:
lib(100,1) = struct('title','','author','','year',0);
и записывать информацию о книгах так:
lib(1).title = 'Евгений Онегин';
lib(1).author = 'Пушкин';
lib(1).year = 2000;
Данный пример показывает удобство хранения информации по книгам. Графически массив структур можно представить в виде таблицы, в которой роль столбцов играют поля, а роль строк элементы массива структур (рис. 1.1).
При работе со структурами полезными являются следующие функции:
isstruct( S ) – возвращает истину, если аргумент структура
isfield( S, 'name') – возвращает истину, если имеется такое поле
fieldnames( S ) – возвращает массив строк с именами всех полей
которые позволяют программно определить всю необходимую информацию о той или иной структуре и корректно выполнять обработку ее полей.
название
автор
год издания
lib[1]
lib[1].title
lib[1].author
lib[1].year
lib[2]
lib[2].title
lib[2].author
lib[2].year
lib[3]
lib[3].title
lib[3].author
lib[3].year
lib[100]
lib[100].title
lib[100].author
lib[100].year
Рис. 1.1. Графическое представление массива структур хранения информации по 100 книгам