8(495)909-90-01
8(964)644-46-00
pro@sio.su
Главная
Системы видеонаблюдения
Охранная сигнализация
Пожарная сигнализация
Система пожаротушения
Система контроля удаленного доступа
Оповещение и эвакуация
Контроль периметра
Система домофонии
Парковочные системы
Проектирование слаботочных сетей
Аварийный
контроль
Раздел: Документация

0 ... 136 137 138 139 140 141 142 ... 365

I 1.57ц

1.00001

I 3.1421

0.00001

I 4.7121

1.00001

I 6.2831

0.00001

Простые структуры

Структура представляет собой элемент данных, содержащий разнотипные поля, например, числа, массивы и строки. Вам уже приходилось иметь дело со структурами при чтении главы 6, в которой была описана генерация структуры options специальными функциями optimset и odeset с целью управления процессом вычислений. Решение уравнений при помощи fzero потребовало задания значений полей Tolx, ToiFun, Display, причем сами значения были как числами, так и строками. Научимся теперь создавать собственные структуры и оперировать данными, хранящимися в их полях.

Создание простой структуры осуществляется командой struct, имеющей формат:

имя структуры = struct(имя поля1,значение1,имя поля2,значение2,...]

где именами полей являются строки или строковые переменные, а значениями — данные любых типов, включая числовые массивы, строки, массивы строк и структуры. Следующая команда создает структуру transaction, содержащую параметры сделки по ценным бумагам (можно набирать в одну строку без символа переноса строки ..., используемого в MATLAB):

» transaction = struct{1 time, [10,20,46], stock, EESR, volume,... 10000, price1, 0.23, currency, USD, bid, 0.21, ask, 0.27)

Результат сразу же вывелся в командное окно в форме таблицы, каждая строка которой содержит название поля и его значение:

transaction =

time:[10 20 46]

stock:EESR1

volume:10ООО

price:0.2300

currency:USD

Поля стуктуры transaction имеют следующий смысл: time— время совершения сделки, stock — код ценной бумаги, volume — объем сделки, price — цена исполнения сделки, currency — код валюты расчетов по сделке, bid — цена спроса на момент совершения сделки, ask — цена предложения на мо-

bid: 0.2100

ask: 0.2700


мент совершения сделки. В рассматриваемой структуре значениями полей являются числа, строки и массив чисел. Значения полей можно посмотреть и в окне Workspace.

Примечание

До глоеы 20, где будут детально рассмотрены способы представления даты и времени и функции для работы с ними, мы будем записывать эти данные в собственном формате. В данном случае время задается массивом из трех чисел: часы (от 0 до 24), минуты и секунды (от 0 до 60).

Обращение к значению поля обеспечивается идентификатором, состоящим из имени структуры и имени поля, разделенных точкой. Такое составное имя всегда интерпретируется как обращение к полю структуры.

Сумма сделки в рублях может быть вычислена с использованием содержимого полей структуры и курса ЦБ РФ на дату совершения сделки exchange:

» exchange = 28.5214,-

>> format bank

>> settlement = exchange * transaction.price * transaction.volume settlement =

65599.22

Изменение формата вывода результата желательно для получения ответа в форме, удобной при проведении финансовых вычислений.

Полями структуры могут быть другие структуры. В структуре transaction имеются три однотипых поля — это цена исполнения, цена предложения и цена спроса. Все они связаны с валютой. Изменим структуру transaction, выделив эти поля в одну новую структуру strike:

» transaction = struct(time, [10,20,46],stock, EESR1, volume, ... 10000, "strike", struct(currency, USD, price,0.23, bid", 0.21, ... ask, 0.27)) transaction -

time: [10 20 46] stock: 1EESR volume: 10000 strike: [lxl struct]

Для доступа к полю второй структуры следует использовать составное имя, включающее имя основной структуры, имя вложенной структуры и имя поля, разделенные точкой. Цена сделки теперь вычисляется по формуле: >> settlement = exchange*transaction.strike.price*transaction.volume


Выражения для задания вложенной структуры можно (и нужно для упрощения) разбить на части, результат получится тот же самый

>> ft = struct(currency", USD, price, 0.23, bid, 0.21, ... 1 ask 1, 0 .27);

>> transaction = struct(time, [10, 20, 46], stock, EESR,... volume1, 10000, strike, A) transaction =

time: [10 20 46] stock: 1EESR volume: 10000, strike: [lxl struct]

Обратите внимание, что при выводе структуры transaction в командное окно поля вложенной структуры strike не отображаются. Для того чтобы посмотреть значения полей вложенной структуры, следует обратиться именно к ней:

» transaction.strike ans =

currency: USD1 price: 0.2300 bid: 0.2100 ask: 0.2700

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

Примечание J

Присвоение полю значения позволяет создавать структуры. Например, если в рабочей среде нет переменной S, или она есть, но не является структурой, то оператор присваивания S.h = 17 приводит к созданию структуры S с полем h, в котором записано число 17

Добавим поле exchange в структуру а.

» A.exchange= 28.5214 а =

currency:USD1

price:0.23

bid:0.21

ask:0.27

exchange:28.5214



0 ... 136 137 138 139 140 141 142 ... 365