Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Структуры

Читайте также:
  1. III. Органы и структуры эмбриона
  2. Адаптивные структуры управления
  3. Адхократические (гибкие структуры) управления
  4. Анализ величины материально-вещественного состава и структуры имущества предприятий.
  5. Анализ величины, состава и структуры источников средств предприятия.
  6. Анализ динамики и структуры предлагаемых вакансий организацией ГКУ ЦЗН СЗАО г. Москвы
  7. Анализ издержек предприятия и их структуры

Лабораторная работа №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 | Нарушение авторских прав


Читайте в этой же книге: Запись строк | Пример 2. | Запись данных массивов структур в текстовый файл | Считывание информации из текстового файла |
<== предыдущая страница | следующая страница ==>
Схемы управления электростартерами| Массив структур

mybiblioteka.su - 2015-2024 год. (0.013 сек.)