"Информатика (базовый уровень)", Семакин И.Г., Хеннер Е.К., Шеина Т.Ю.
Комбинированный тип данных объединяет несколько связанных значений в одну структуру. В Паскале такая структура называется записью и состоит из именованных полей, причём поля могут иметь разные типы. Запись удобна для описания ученика, товара или другого объекта: все его характеристики хранятся вместе, но к каждой можно обращаться отдельно. Главное — сначала описать тип записи, затем объявить переменную и обращаться к полям через точку.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Комбинированный тип данных — тип, объединяющий несколько компонентов, которые могут иметь разные типы. Он позволяет описать один объект сразу всеми необходимыми характеристиками. Например, данные об ученике могут включать текст, целое число и вещественное число.
Запись, или record, — переменная комбинированного типа, состоящая из набора именованных полей. В записи хранятся сведения об одном объекте, поэтому их не приходится связывать только договорённостью между отдельными переменными. Запись делает такую связь частью структуры данных.
Поле записи — отдельный компонент записи, имеющий собственное имя и тип данных. Одно поле хранит одну характеристику объекта: например, Фамилия или СреднийБалл. Имя помогает обратиться именно к нужному значению и не перепутать его с остальными.
Составной идентификатор — обращение к полю записи через имя записи и точку: Ученик.Фамилия. Первая часть указывает, в какой переменной находится значение, а вторая — какое поле нужно выбрать. Такой способ обращения позволяет независимо читать и изменять компоненты одной записи.
Если ученика описывать отдельными переменными, придётся отдельно хранить фамилию, класс и средний балл и следить, чтобы они относились к одному человеку. При обработке нескольких учеников такая связь легко нарушается: например, фамилия одного ученика может случайно оказаться рядом с оценкой другого. Запись объединяет характеристики объекта, поэтому перемещение или обработка одного объекта выполняются как работа с согласованным набором полей.
Тип записи объявляют после служебного слова record: перечисляют имена полей и их типы, а описание завершают словом end. В общем виде это выглядит так: type ИмяТипа = record ИмяПоля1: Тип1; ИмяПоля2: Тип2; end. Отдельное описание задаёт не конкретные данные, а форму будущих переменных.
После описания типа в разделе var объявляют переменные-записи, указывая имя переменной и имя типа. Например, Ученик1: Ученик; Ученик2: Ученик. Для каждой переменной выделяется собственный единый набор полей, поэтому изменение Ученик1.Класс не меняет значение поля Класс у Ученик2.
Поля одной записи могут иметь разные типы, потому что характеристики объекта различаются по смыслу. Фамилия хранится как строка, количество лет или номер класса — как целое число, а средний балл — как вещественное. При этом каждое поле обрабатывается по правилам своего типа, независимо от соседних полей.
Значения полей изменяют оператором присваивания, используют в выражениях, вводят и выводят как обычные переменные. Например, можно выполнить Ученик.Класс := 10, сравнить Ученик.СреднийБалл с порогом или вывести Ученик.Фамилия. Во всех случаях нужен составной идентификатор, иначе программа не поймёт, компонент какой записи используется.
| Элемент | Синтаксис или пример | Назначение |
|---|---|---|
| Описание типа записи | type Ученик = record ... end; | Задаёт структуру будущих переменных |
| Имя поля | Фамилия | Позволяет выбрать характеристику объекта |
| Тип поля | Фамилия: string; Класс: integer; | Определяет вид и допустимые значения данных |
| Объявление переменной-записи | var Ученик1: Ученик; | Создаёт переменную с описанным набором полей |
| Обращение к полю | Ученик1.Фамилия | Получает конкретное поле записи |
| Присваивание значения полю | Ученик1.Класс := 10; | Изменяет содержимое выбранного поля |
| Использование поля в выражении | Ученик1.СреднийБалл > 4.5 | Позволяет вычислять, сравнивать и проверять данные |
Сначала найдите в таблице структуру описания и объявление переменной, а затем выберите нужное действие с полем. В каждом обращении проверяйте две части: имя конкретной записи и имя её поля. Для массива к ним добавляется индекс, например Товары[i].Цена.
Условие. Описать запись Ученик с полями Фамилия, Класс и СреднийБалл, объявить переменную и вывести сведения о ней.
Ответ. Получается запись с тремя разнотипными полями; после присваивания программа может вывести их в одной строке или по очереди.
Условие. Ввести данные о нескольких товарах и определить товар с наименьшей ценой.
Ответ. Минимальная цена определяется последовательным сравнением поля Цена, а сведения о нужном товаре берутся из записи с найденным индексом.
Условие. Для списка учеников найти тех, у кого средний балл выше заданного значения, и вывести их фамилии и класс.
Ответ. Программа выводит только тех учеников, чьё числовое поле СреднийБалл превышает заданный порог, а текстовые данные берёт из той же записи.
Попытка обратиться к записи без имени поля приводит к неоднозначности: запись содержит несколько значений. Ошибку допускают, когда воспринимают её как одно простое число или строку. Проверьте обращение: после имени переменной должна стоять точка и конкретное поле.
Имя типа записи путают с именем переменной, потому что оба идентификатора участвуют в объявлении. Тип описывает форму, но не хранит конкретные данные, поэтому запись.Фамилия использовать нельзя. Убедитесь, что перед точкой стоит имя переменной, например Ученик1.Фамилия.
Несовместимое значение нельзя присвоить полю: строку нельзя записать в целочисленный Класс, если преобразование не выполнено. Причина ошибки — забытый тип именно выбранного поля. Сверьте правую часть присваивания с типом после двоеточия в описании.
В массиве записей иногда забывают индекс элемента и пишут Товары.Цена. Такой идентификатор не указывает, о каком товаре идёт речь. Проверяйте порядок обращения: имя массива, индекс в квадратных скобках, точка, имя поля.
До изучения записей нужны знания о переменных, типах данных, присваивании, вводе и выводе, условном операторе и массивах. Эти понятия используются внутри каждой операции с полями.
Записи пригодятся при обработке таблиц объектов, каталогов, анкет и результатов соревнований. Массив записей позволяет хранить коллекцию однотипных объектов и перебирать её циклом.
Следующий шаг — файловые типы: они позволяют сохранять массивы записей и другие структурированные данные во внешнем файле. Так временная коллекция в памяти превращается в данные, доступные после завершения программы.
Чем запись отличается от массива?
Массив хранит несколько элементов одного типа, доступ к которым выполняется по индексам. Запись объединяет поля, которые могут иметь разные типы, а доступ к ним выполняется по именам.
Можно ли включить в одну запись поля разных типов?
Да, это основное преимущество записи. Например, фамилия может быть строкой, класс — целым числом, а средний балл — вещественным числом.
Зачем описывать отдельный тип записи, а не сразу переменную?
Описание типа задаёт общую структуру, которую можно использовать для нескольких переменных. Это особенно удобно при создании массива записей: все его элементы получают одинаковый набор полей.
Как обратиться к полю записи внутри массива?
Сначала указывают имя массива и индекс элемента, затем через точку — имя поля. Например, Товары[i].Цена обозначает цену товара с индексом i.
Можно ли сравнивать или присваивать записи целиком?
Записи одного и того же типа обычно можно присваивать друг другу целиком. Сравнивать записи операциями равенства или порядка в Паскале обычно нельзя, поэтому сравнивают нужные поля.
§ 29. Комбинированный тип данных