Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Лабораторная работа № 6. Записи
Записи
В информационно-поисковых системах (таких, как адресное бюро, телефонная справочная служба и т.д.) приходится хранить и обрабатывать большие объемы данных. При решении научно-технических и экономических задач обработки совокупностей большого количества значений используются массивы. Но при работе с массивами основное ограничение заключается в том, что все элементы массива должны иметь один и тот же тип данных. Иногда для решения задач. В которых возникает необходимость хранить и обрабатывать совокупности данных различного типа, используются отдельные массивы для каждого типа данных, а для установления соответствия между ними вводятся соответствующие индексы. Итак, реальные данные об объектах часто описываются величинами разных типов. Например. Товар на складе описывается следующими величинами: наименование, количество, цена, наличие сертификата качество и т.д. в этом примере наименование – величина типа string, количество – integer, цена – real, наличие сертификата качества можно описать величиной типа – boolean. Для записи комбинации объектов разных типов применяется комбинированный тип данных – запись. Запись представляет собой наиболее общий и гибкий структурированный тип данных, так как она может быть преобразована из неоднотипных компонентов и в ней явным образом выражена связь между элементами данных, характеризующими реальный объект Запись (англ. record) - это структурированный тип данных, состоящий из фиксированного числа компонентов одного или нескольких типов. Запись можно назвать наиболее общим сложным типом данных. Определение типа записи начинается идентификатором record и заканчивается зарезервированным словом end. Название "запись" появилось из тех соображений, что данные разного типа можно встретить в таблицах: в каждой строке записаны сразу несколько разных значений. Таким образом, одна запись соответствует одной строке данных: она имеет несколько полей, каждое из которых хранит своё значение. Объем памяти, необходимый для записи, складывается из длин полей. Общий синтаксис объявления этого типа выглядит следующим образом: record fieldnamel: fieldtypel; fieldname2, fieldname3: fieldtype2; case optional tagfield: required ordinal type of 1: variantnamel: varianttype3; 2, 3: variantname2: varianttype4; end;Данное объявление состоит из фиксированной и вариантной частей. Однако вовсе не обязательно вставлять в одно объявление записи обе эти части. Обычно удобнее работать с каждой из этих частей отдельно.
Фиксированные записи В фиксированной части записи определяется одно или несколько независимых полей. Каждому полю обязательно присваивается имя и тип: record fieldnamel: fieldtypel; fieldname2, fieldname3: fieldtype2; end;Имея доступ к информации в записи, можно обрабатывать всю запись целиком (все поля одновременно) или только отдельное поле. Для обращения к отдельному полю наберите имя записи, точку и идентификатор поля, например MyRec.FieldnamelДля доступа ко всей записи просто укажите ее имя. В языке С эквивалентом фиксированного типа record из Delphi является struct. В C++ также определен тип struct, синтаксис которого совместим с типом struct из С. Однако в C++ этот тип имеет дополнительные особенности, благодаря чему напоминает тип Class из Delphi. Вариантные записи Вариантная часть типа record дает возможность по-разному трактовать область памяти, совместно занимаемую вариантами поля: record case optional tagfield: required ordinal type of 1: variantnamel: varianttype3; 2, 3: variantname2: varianttype4; end;Термин вариантный в отношении записей не имеет ничего общего с типом Variant. Вариантные поля, несмотря на свое название, никогда не имеют тип Variant. Объявление этого типа в любом месте вариантной части записи запрещено. Все варианты занимают в памяти одно место. Каждый вариант обозначается некоторой постоянной. При желании можно получать доступ ко всем полям всех вариантов одновременно, однако это может иметь смысл только в наиболее простых случаях, когда точно известно, как именно информация каждого варианта записывается в память. Каждый вариант обозначается минимум одной константой. Все константы должны быть порядковыми и совместимыми по типу с меткой поля. Необязательное поле — это идентификатор дополнительного поля в фиксированной части записи, общий для всех вариантов. Обычно с его помощью определяют, когда к какому варианту обращаться. Необязательное поле можно не указывать, однако порядковый тип необходим. При отсутствии необязательного поля программе придется выбирать подходящий вариант каким-то иным образом.
Пример. Допустим, мы хотим хранить информацию о людях, заполнивших анкету на поступление на работу. Нас интересуют: ФИО человека, возраст, образование (среднее/высшее), владение компьютером, владение иностранными языками. Все эти данные мы можем объединить в запись. Дальнейшее повествование будет основываться на этом примере. Описание записи Чтобы работать в программе с записями, нужно сначала описать соответствующий тип данных. Запись описывается следующим образом: type имя_типа_записи = record {поля записи} end;В блоке полей описание идёт точно так же, как описание переменных: указывается имя поля, далее через двоеточие тип данных этого поля. Сами поля разделяются точкой с запятой. К выбору типов данных для полей записи нужно подходить ответственно. Если при описании переменной она хранится в единственном экземпляре, то записи, как правило, используются для хранения некоторого набора данных (таблицы с несколькими строками, образно говоря). Это значит, что каждое из полей будет храниться в памяти столько раз, сколько строк данных у вас будет. Если в таблице 1000 строк, то объём занимаемой памяти будет немалым, да и скорость работы с данными может заметно уменьшиться из-за выбора избыточных типов данных. Для нашего примера: type TPerson = record Name: String; Age: Byte; Education,PC: Boolean; Foreign: set of TForeignLanguages; end;Разберём поля по порядку. Для ФИО вполне подходит текстовая строка типа String. 255 символов нам хватит сполна. Для хранения возраста целесообразно выбрать тип данных Byte (число от 0 до 255). Не думаю, что на работу будут устраиваться люди, возраст которых превышает 255) Использовать тип Integer в данном случае нецелесообразно - мало того, что у него максимальное значение превышает 32.000, да ещё и отрицательные числа поддерживаются. Для поля " образование " выбран логический тип данных. Условимся, что True - это высшее образование, False - высшего нет (т.е. среднее). PC - владение компьютером, здесь всё понятно. Для хранения иностранных языков здесь используется множество. Ведь человек может знать несколько языков, не так ли? Описание типа данных, на основе которого построено множество, следующее: type TForeignLanguages = (flEnglish, flGerman, flFrench);Как видно, это перечислимый тип данных с тремя возможными значениями. Если вам мало английского, немецкого и французского, можете добавить в список и другие. Так как свойство Foreign нашей записи - множество, то мы сможем легко хранить информацию, например, о том, что человек знает и английский, и немецкий. Удобно, не правда ли? Если человек не знает никаких иностранных языков, множество будет пустое. Итак, наша запись готова. Чтобы работать с ней в программе, разместить её следует в глобальном разделе type. Примеры других записей Существует множество готовых записей в Delphi, которые позволяют хранить некоторые часто встречающиеся данные. TPoint - запись с двумя полями - X и Y - служит для хранения координат точки. Описана эта запись следующим образом: TPoint = record X: Longint; Y: Longint;end;TRect - позволяет хранить данные о прямоугольной области. Свойства Left, Top, Right и Bottom отвечают за координаты сторон прямоугольника, а координаты TopLeft и BottomRight типа TPoint - указывают на левую верхнюю и правую нижнюю вершины соответственно (эти вершины позволяют однозначно определить прямоугольник на плоскости, стороны которого параллельны осям координат). Однако в один момент времени используется только один набор из этих свойств - либо 4 координаты, либо 2 точки. Ещё один пример - хранение даты. Дату можно разбить на число, месяц и год, и хранить каждое значение отдельно:
Работа с записями Чтобы обратиться к конкретному полю записи, применяется стандартная конструкция, с которой вы давно знакомы: имя_переменной.название_поляТ.е. имя переменной или объекта и его поле разделяются точкой. Чтобы работать с записью, нужно определить переменную, тип которой - наша запись. До этого мы всего лишь описали нашу запись, но на самом деле никаких значений ещё нигде нет. Описание происходит стандартным образом: var Person: TPerson;Имя переменной вы можете дать любое, просто логично называть всё своими именами. Вводим анкеты - интерфейс Для начала создадим небольшой интерфейс, который позволит нам вводить информацию из анкет:
Компонент TCheckListBox расположен на странице Additional. Это список, аналогичный TListBox, но в каждой строке есть TCheckBox, т.е. строка либо отмечена, либо нет. В свойство Items сразу занесите наши 3 языка, вводя каждый на отдельной строке Чтобы было удобно вводить возраст, сделаем вот что. На странице Win32 есть компонент TUpDown - это две кнопки ("вверх-вниз" или "влево-вправо"). Если в свойстве Associate выбрать наше поле ввода Edit2, то кнопки автоматически разместятся рядом с полем и нажатие на них, будет автоматически изменять число в поле. В само поле лучше изначально вписать какой-нибудь "реальный" возраст, чтобы не пришлось долго щёлкать, добираясь до нужного значения. Например, можно вписать 25. Осталось добавить кнопку, которая будет выполнять все действия. Общий вид формы получился таким: Теперь перейдём к программной части.
|
|||||||
Последнее изменение этой страницы: 2016-07-16; просмотров: 267; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.226.28.197 (0.013 с.) |