Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основные понятия среды MATLAB.doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
1.79 Mб
Скачать

2.6 Тип данных структура (struct)

2.6.1 Задание структур

Структура – это сложный тип, позволяющий объединить в себя данные разных типов, и даже другие структуры. Схематическое представление структуры приведено на рис. 1.6.

Рис. 1.6 Графическое представление структуры

Синтаксис

  • S = struct('field1',VALUES1,'field2',VALUES2,...), где field1 – название первого поля структуры; VALUES1 – переменная первого поля структуры, и т.д.

  • struct(OBJ) – конвертирует объект OBJ в эквивалентную структуру или массив структур. OBJ может быть объектом или массивом Java.

Поля могут представлять собой массивы. Также можно создавать массивы структур. Каждое поле имеет свой тип данных и значение. Для того, чтобы записать в эту структуру конкретные значения используется символ ‘.’ (точка) для доступа к тому или иному полю структуры.

Примеры.

  1. Создание структуры с простыми полями.

S = struct('street','','building_number','','project', '','floors',1);

Структура состоит из следующих полей:

  • street – название улицы;

  • building_number – номер здания;

  • project – шифр проекта;

  • floors – количество этажей.

Зададим значения полей структуры:

S.street='Питерская';

S.building_number='3А';

S.project='1.400-15';

S.floors=9;

Для хранения информации о совокупности зданий, создадим массив структур из 500 элементов:

Building(500,1)=struct('street','','building_number','','project', … '','floors',1);

Обратиться к конкретному элементу массива можно следующим образом:

Building(1).street='Питерская';

Building(1).building_number='3А';

Building(1).project='1.400-15';

Building(1).floors=9;

  1. Создание структуры с полями типа матрица и структура (рис. 1.7). Причем, поля также могут быть массивами.

>> A = struct('data',[1 2 3; 4 5 6],... % первое поле структуры

'info', struct('fild_1','val1','fild_2',[7 8 9])) % второе поле структуры

     A =

        data: [2x3 double]

        info: [1x1 struct]

>> A(1).data = [1 2 3; 4 5 6];

>> A(1).info.fild_1 = 'val1'; A(1).info.fild_2 = [7 8 9];

>> A(2).data = [10 11 12; 13 20 30];

>> A(2). info.fild_1 = 'val2'; A(2). info.fild_2 = [30 40 50];

>> A =

        1x2 struct array with fields:

            Data

            info

Рис. 1.7 Структура массива А (пример 2)

На рис. 1.7 видно, что структура А состоит из двух полей: data и info, которые являются векторами размерности 2, где в свою очередь значение первого поля – матрица, а второго – структура, состоящая также из двух полей.

2.6.2 Функции обработки структур

При работе со структурами полезными являются функции, приведенные в таблице 1.10, которые позволяют программно определить всю необходимую информацию о той или иной структуре и корректно выполнять обработку ее полей.

Таблица 1.10. Функции работы со структурами

Функция

Назначение

isstruct(S)

возвращает 1 (истину), если аргумент структура и 0 в противном случае

isfield(S, 'name')

возвращает 1 (истину), если имеется такое поле и 0 в противном случае

fieldnames(S)

возвращает массив строк с именами всех полей

getfield(S, 'field')

getfield(S.{i,j}, 'field', {k})

возвращает содержимое поля структуры S, что эквивалентно S.field

эквивалентно F=S(i J).field(k)

setfield(S. 'field' ,V)

setfie1d(S,{i,j},'field',{k},V)

возвращает структуру S с присвоением полю 'field' значения V, что эквивалентно S.field=V

эквивалентно S(i ,j).field(k)=V

rmfield(S, 'field')

rmfield(S,FIELDS)

возвращает структуру S с удаленным полем S.'field'

возвращает структуру S с несколькими удаленными полями. Список удаляемых полей FIELDS задается в виде массива символов (строки) или строкового массива ячеек

Примеры: 

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

  1. >> fieldnames(S) % определение полей структуры

ans = 

'street' 

'building_number' 

' project' 

' floors' 

  1. >> getfield(S,' street ') % определение значения поля street

ans =

Питерская

  1. >> setfield(Building(1).'street','Тверская') % задание нового значения

 ans =

Building(1).street='Тверская';

Building(1).building_number='3А';

Building(1).project='1.400-15';

Building(1).floors=9;

  1. >> rmfield(S(2).' project ')  % удаление поля

ans =

Building(1).street='Тверская';

Building(1).building_number='3А';

Building(1).floors=9;

Для инициализации структур и считывания значений полей в отдельные переменные можно использовать команду множественного присвоения deal.

Синтаксис.

  • [S.FIELD]=deal(X) – присваивает всем полям FIELD структуры S значения X. Если S не существует, то используется конструкция [S(1:M)*.FIELD]= deal(X).

  • [A,B,C,...]=deal(S.FIELD) – копирует содержимое поля FIELD массива структур S в отдельные переменные А, В, С,....