Обращение к конкретным полям записи. Оператор присоединения. Здравствуйте! Меня зовут
Скачать 16.81 Kb.
|
Здравствуйте! Меня зовут ……. Тема моего доклада: Обращение к конкретным полям записи. Оператор присоединения. Примеры использования оператора присоединения в программах на Турбо Паскале В информационно-поисковых системах приходится хранить и обрабатывать большие объемы данных. При решении научно-технических и экономических задач обработки совокупностей большого количества значений используются массивы. Но при работе с массивами основное ограничение заключается в том, что все элементы массива должны иметь один и тот же тип данных. Иногда для решения задач, в которых возникает необходимость хранить и обрабатывать совокупности данных различного типа, используются отдельные массивы для каждого типа данных, а для установления соответствия между ними вводятся соответствующие индексы. Реальные данные об объектах часто описываются величинами разных типов. Например, товар на складе описывается следующими величинами: наименование, количество, цена, наличие сертификата качества и т. д. В этом примере наименование - величина типа string количество - integer, цена - real, наличие сертификата качества можно описать величиной типа Boolean. Для записи комбинации объектов разных типов в Pascal применяется комбинированный тип данных - запись. Запись представляет собой наиболее общий и гибкий структурированный тип данных, так как она может быть образована из разнотипных компонентов и в ней явным образом выражена связь между элементами данных, характеризующими реальный объект. 1. Тип «Запись» (Record) и оператор присоединения With Запись - это структурированный тип данных, состоящий из фиксированного числа компонентов одного или нескольких типов. Определение типа записи начинается идентификатором record и заканчивается зарезервированным словом end. Между ними располагается список компонентов, называемых полями, с указанием идентификаторов полей и типа каждого поля. Тип «запись» определяется конструкцией RECORD Поле1: ТипПоля1; Поле2: ТипПоля2; ПолеМ : ТипПоляМ END; Если тип нескольких полей совпадает, то имена полей могут быть просто перечислены, например: Type PointRecType = record x, y: Integer end; Пример. Type Car=Record Идентификатор поля должен быть уникален только в пределах записи, однако во избежание ошибок лучше делать его уникальным в пределах всей программы. Порядок описания полей в определении записи задает их порядок хранения в памяти. Объем памяти, необходимый для записи, складывается из длин полей. Значения полей записи могут использоваться в выражениях. Имена отдельных полей не применяются по аналогии с идентификаторами переменных, поскольку может быть несколько записей одинакового типа. Обращение к значению поля осуществляется с помощью идентификатора переменной и идентификатора поля, которые разделены точкой. Такая комбинация называется составным именем. Например, чтобы получить доступ к полям записи Car надо написать: M.Number, M.Marka, M.FIO, M.Address. Составное имя можно использовать везде, где допустимо применение типа поля. Для присваивания полям значений используется оператор присваивания. Пример. M.Number:=1678; M.Marka:= `Газ_24'; M.FIO:='Иванов И. И.' M.Address:='ул. Пушкина 12-31'; Составные имена можно использовать, в частности, в операторах ввода-вывода: Read(M.Number, M.Marka, M.FIO, M.Address); Write(M.Number:4, M.Marka:7, M.FIO:12, M.Address:25); Допускается применение оператора присваивания, и к записям в целом, если они имеют одинаковый тип. Например, V := М; После выполнения этого оператора значения полей записи V станут равными значениям соответствующих полей записи М. В ряде задач удобно пользоваться массивами из записей. Их можно описать следующим образом: Type Person= record FIO: string[20]; Age : 1..99; Prof: string[30]; End; Var List: array[1..50] of Person; Обращение к полям записи имеет несколько громоздкий вид, что особенно неудобно при использовании мнемонических идентификаторов длиной более пяти символов. Для решения этой проблемы в языке Pascal предназначен оператор with, который имеет следующий формат with ИмяПеременной_Записи DO Оператор; Указав один раз переменную типа запись в операторе with, можно работать с именами полей как с обычными переменными, т. е. без указания перед идентификатором поля имени переменной, определяющей запись. Пример: Присвоить значения полям записи Саг с помощью оператора with with M do begin Number:=1678; Marka:= `Газ_24'; FIO:='Петров В. И.' Address:='ул. Остужева 2-31'; end; Внутри области действия оператора with могут указываться и переменные, не имеющие отношения к записи. Но в этом случае надо следить, чтобы они не совпадали по написанию с полями записи. Действия внутри оператора with проводятся только над полями записи RecXY. Чтобы сохранить оператор with и «развязать» имена X и Y, надо к переменным X и Y приписать так называемый квалификатор - имя программы или модуля (UNIT), в которой они объявлены (для этого программа должна иметь заголовок). Так, оператор присоединения можно исправить следующим образом: with RecXY do begin X: = 3.14 * Main.X; Y: = 3.14 * Main.Y end; и проблема исчезнет. В Pascal допускает вложение записей (т.е. поле записи само является записью), соответственно оператор with тоже может быть вложенным. with RV1 do with RV2 do with RVn do… что эквивалентно конструкции with RV1, RV2, …, RVn do... Уровень вложенности записей не должен превышать 9. |