В 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, просмотров: 329.