Читайте также:
|
|
Лабораторная работа №12
Файловые операции в Matlab
Цели работы:
· изучение структур и массивов структур;
· обработка информации, содержащейся в полях структуры.
Необходимое оборудование и материалы.
· ОС Windows XP, Vista, 7;
· Matlab 6.5 или 7.x;
· ПК класса не ниже Pentium II, RAM 128Mb.
Трудоемкость: 4 академических часов.
Структуры
Структура представляет собой элемент данных, содержащий разнотипные поля, например, числа, массивы и строки.
Создание простой структуры осуществляется командой 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. Создайте структуру (запись) СТРАНА со следующими полями: название, площадь, численность населения, число регионов.
Посчитайте плотность населения, среднюю площадь региона, среднее население региона.
Дата добавления: 2015-07-15; просмотров: 75 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Схемы управления электростартерами | | | Массив структур |