Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Структуры



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

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

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

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

transaction = struct ('time', [10,20,46], 'stock1', 'EESR1', 'volume',...

10000, 'price', 0.23, 'currency', 'USD', 'bid', 0.21, 'ask1', 0.27)

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

transaction =

time: [10 20 46]

stock1: 'EESR1'

volume: 10000

price: 0.2300

currency: 'USD'

bid: 0.2100

ask1: 0.2700

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

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

Рис. 1. Значения полей структуры transaction

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

>> exchange =28.5214;

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

settlement =

6.5599e+004

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

>> transaction = struct('time', [10,20,46],'stock', 'EESR', 'volume',...

10000, 'strike', struct('currency', 'USD', 'price',0.23, 'bid', 0.21,...

'ask', 0.27))

transaction =

time: [10 20 46]

stock: 'EESR'

volume: 10000

strike: [1x1 struct]

Для доступа к полю второй структуры следует использовать составное имя, включающее имя основной структуры, имя вложенной структуры и имя поля, разделенные точкой. Цена сделки теперь вычисляется по формуле:

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

settlement =

6.5599e+004

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

>> A=struct('currency', 'USD', 'price',0.23, 'bid', 0.21,'ask', 0.27)

A =

currency: 'USD'

price: 0.2300

bid: 0.2100

ask: 0.2700

>> transaction = struct('time', [10,20,46],'stock', 'EESR', 'volume',...

10000, 'strike',A)

transaction =

time: [10 20 46]

stock: 'EESR'

volume: 10000

strike: [1x1 struct]

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

>> transaction.strike

ans =

currency: 'USD'

price: 0.2300

bid: 0.2100

ask: 0.2700

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

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

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

>> A.exchange = 28.5214

A =

currency: 'USD'

price: 0.2300

bid: 0.2100

ask: 0.2700

exchange: 28.5214

При этом не происходит автоматического изменения структуры transaction:

>> transaction.strike.exchange

??? Reference to non-existent field 'exchange'.

Для внесения изменений в структуру transaction следует изменить поле strike:

>> transaction.strike = A;

>> transaction.strike.exchange

ans =

28.5214

Удаление поля осуществляется с помощью функции rmfieid. Удалите, к примеру, поле time

>> transaction = rmfield(transaction,'time')

transaction =

stock: 'EESR'

volume: 10000

strike: [1x1 struct]

Возникает вопрос, как по имени структуры узнать названия ее полей и сохранить их в строковых переменных. Для этой цели служит встроенная функция fieldnames:

>> names = fieldnames(transaction)

names =

'stock'

'volume'

'strike'

Посмотрите в окне Workspace браузера переменных рабочей среды информацию о переменной names. Она представляет собой не массив строк, а относится к типу cell array (массив ячеек).

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

≫ f2 = names{2}

f2 =

volume

приводит к записи содержимого второго элемента массива ячеек names в строковую переменную f2, которую можно теперь использовать для доступа к нужному полю структуры transaction

>> v = transaction.(f2)

Просмотр и редактирование содержимого полей структуры transaction удобно производить в редакторе массивов (Array Editor), который открывается двойным щелчком кнопкой мыши по имени структуры в окне Workspace.

Редактор массивов позволяет обратиться к значениям полей структуры, в том числе и к полю со вложенной структурой strike, при помощи двойного щелчка мыши по названию поля в столбике Field. Содержимое поля открывается в новом окне редактора массивов, причем окно снабжено вкладкой с именем поля. Итак, двойной щелчок мышью приводит к отображению содержимого поля. Обычный щелчок по имени поля в столбике Field делает это поле текущим, а повторный щелчок позволяет изменить название поля. Ввод нового имени поля завершается нажатием <Enter> или щелчком мыши по другому полю. Кнопка Up на панели инструментов редактора массивов служит для перехода вверх по уровням вложенности, т. е. при активном окне с содержимым некоторого поля структуры transaction, например, поля strike, нажатие на Up приведет к отображению структуры transaction.

Задание 1. Создайте структуру (запись) СТРАНА со следующими полями: название, площадь, численность населения, число регионов.

Посчитайте плотность населения, среднюю площадь региона, среднее население региона.





Дата публикования: 2014-12-11; Прочитано: 237 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.012 с)...