Объекты типа структур и ячеек
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

В Scilab реализовано два особых типа структур данных, которые созданы скорее для переносимости данных из одной среды в другую.

Первый особый тип данных это s truct (структура), который был введен для переносимости сценариев между Scilab и Matlab. Внешне структура s truct очень похожа на типизированный список. В отличие от типизированного списка, который хранит имя в себе, именем структуры является переменная, в которую эту структуру записывают. В остальном структура похожа на обычный список, в котором есть имена полей и присвоенные им значения
(рис. 1.2.5-7).

 

--> // Создание структуры и доступа к ее элементу

-->

--> s = struct("firstname", "Виктор", "Age", 23)

 s =

firstname:[1x1 string]

Age: [1x1 constant]

 

Рис. 1.2.5-7 Пример создания структуры и доступа к ее элементу

 

При объявлении структуры на нечетных позициях в аргументах всегда стоят имена полей, а на четных – присваиваемые значения. В отличие от списков, у структур сразу удобный для чтения формат вывода.

Неудобства структуры проявляют себя при программировании. В структуре очень просто создаются новые поля (рис 1.2.5-8), однако это заставляет постоянно держать в памяти их имена.

 

 

--> // Пример добавления нового поля в структуру

-->

--> s.address = 'Авиамоторная 8а'

 s =

firstname: [1x1 string]

Age: [1x1 constant]

address: [1x1 string]

Pис.1.2.5-8 Пример добавления нового поля в структуру

 

В структурах нельзя обращаться к полям по индексам. Поэтому, например, если структура хранит в себе данные работников, а работников несколько, то единственный способ их как-то объединить – это записать их в вектор. В Scilab такую операцию удобнее выполнять с помощью mlist-списков.

Другой тип структурных данных это cell (ячейка). Этот тип данных также частично совместим с Matlab. Эта структура сочетает в себе особенности списка и матрицы. Напомним, что в матрицах можно хранить данные только одного типа данных, но в cell это ограничение не действует. Таким образом, cell – это матрица, которая способна хранить данные разных типов.

Чтобы создать cell-матрицу, например, (2х3) нужно использовать одноименную функцию (рис.1.2.5-9).

 

--> // Пример создание и заполнение позиций cell -массива

--> // и обращение к ее элементам

-->

--> c = cell(2,3)

 c =

[0x0 constant] [0x0 constant] [0x0 constant]

[0x0 constant] [0x0 constant] [0x0 constant]

-->

--> c{1,1} = 11; c{1,2} = 12; c{1,3} = 13; c{2,1} = 21;

-->

--> c{:,:}

 ans =

 ans(1)

11.

 ans(2)

21.

 ans(3)

12.

 ans(4)

[]

 ans(5)

13.

 ans(6)

[]

Рис.1.2.5-9 Пример создания и заполнения позиций cell-матрицы,
и обращение к ее элементам

Индексы в cell сами по себе используются исключительно для извлечения ее элементов по правилам матриц.

 

Таким образом, cell удобно использовать, когда необходимо получить объект, обладающий свойствами матриц и list-списков. Если же предполагаются более сложные действия над собственными объектами, но не предполагается переносимость, лучше пользоваться типизированными списками Scilab.

Функция cell , возвращающая массив ячеек пустых матриц, может иметь следующие форматы:

 

с =cell()

с =cell(m1)

с =cell(m1,m2)

с =cell(m1,m2,...,mn)

с=cell(х),

где : х-вектор, содержащий размеры ячейки для создания;

m1,m2,...,mn- размеры создаваемой ячейки.

 

Рассмотрим назначение каждого из перечисленных выше форматов:

сell(0,0)возвращает (0,0) массив ячеек пустых матриц;

cell(m1) возвращает (m1,m1) массив ячеек пустых матриц;

cell(m1,m2)возвращает (m1,m2) массив ячеек пустых матриц;

cell(x)возвращает массив ячеек пустых матриц где: первый;

размер ячейки массива x(1), второе измерение x(2);

cell() эквивалентно cell(0).

 

Если A является массивом ячеек, то можно получить доступ к содержимому элемента A с помощью записи A{m1,m2,...,mn}, где номера ячеек заключены в фигурные скобки. Таким образом, выражение A(1,1) = zeros (2,2) является недопустимым, а правильный синтаксисвыражения -A{1,1}= zeros (2 ,2).

 



Дата: 2019-11-01, просмотров: 297.