На Горох
Информатика, 11 класс

§ 39. Структуры (записи)

"Информатика (базовый и углублённый уровни) (в 2 частях)", Поляков К.Ю., Еремин Е.А.

Объяснение темы В оглавлении: § 39. Структуры (записи)

Кратко о теме

Запись — составной тип данных, который объединяет в одной переменной несколько связанных именованных полей, например фамилию, возраст и оценку ученика. Поля могут иметь разные типы, потому что описывают разные свойства объекта. Набор полей задают при описании типа-записи, а к каждому значению обращаются по имени поля. Записи удобны для моделирования объектов, а массив записей помогает хранить сведения о множестве однотипных объектов и обрабатывать их циклом.

Объяснение темы

Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.

Определения и обозначения

Запись — составной тип данных, объединяющий в одной переменной несколько именованных полей, которые могут иметь разные типы. Её используют, когда отдельные значения описывают один объект и должны оставаться связанными. Например, имя, возраст и оценку ученика удобнее хранить вместе, чем в несвязанных переменных.

Поле записи — именованная часть записи, предназначенная для хранения значения определённого типа. Имя помогает понять, какую характеристику содержит значение, а тип ограничивает допустимые данные. Благодаря полям можно отдельно читать или менять, например, возраст ученика, не затрагивая его фамилию.

Описание типа-записи — объявление, в котором задаются имя типа и состав его полей. В нём указывают названия полей и их типы, поэтому становится понятно, какие данные может хранить запись. После этого можно создавать переменные такого типа с одинаковым устройством, но разными значениями.

Обращение к полю — способ получить или изменить значение поля через имя переменной-записи и имя поля. Для этого используют составное имя с точкой: сначала указывают запись, затем конкретное поле. Такая запись однозначно показывает, какое значение нужно прочитать или изменить.

Как это устроено

Запись нужна, когда несколько сведений относятся к одному объекту: например, у книги есть название и год издания, а у ученика — фамилия и балл. Если хранить такие сведения в отдельных переменных, легко случайно перепутать значения разных объектов или забыть обновить одно из них. Запись связывает характеристики в единое целое, поэтому обращаться с данными объекта становится удобнее. Она также делает программу понятнее: имя поля показывает смысл хранимого значения.

При объявлении типа-записи перечисляют поля и задают тип каждого из них. Это описание похоже на схему: оно определяет устройство данных, но само по себе не хранит конкретные сведения об объекте. Когда создают переменные объявленного типа, каждая получает такой же набор полей. Поэтому в программе можно одинаково обрабатывать разные объекты, зная, какие поля у них есть.

Поля могут иметь разные типы, потому что характеристики объекта различаются по смыслу и форме. Название книги — текст, год издания — целое число, а цена товара может быть дробным числом. Если бы все поля обязательно имели один тип, пришлось бы либо искажать данные, либо хранить их неудобным способом. Тип поля помогает программе правильно интерпретировать значение и не допускать неподходящих присваиваний.

К конкретному полю обращаются через составное имя с точкой: имя переменной, точка, имя поля. Например, запись товар.цена указывает именно на цену переменной товар, а не на цену всех товаров. Такое обращение позволяет использовать поле в выражении или присвоить ему новое значение независимо от других характеристик. Имя поля без имени записи недостаточно: в программе может существовать несколько записей с одинаковым набором полей.

Массив записей позволяет объединить сведения о многих однотипных объектах. Цикл перебирает элементы массива, а внутри каждого элемента программа обращается к нужному полю, например к баллу ученика. Это удобно для поиска, подсчёта и сортировки: одна и та же операция применяется к каждой записи. В результате массив отвечает за множество объектов, а поля каждой записи — за характеристики отдельного объекта.

Сравнение массива и записи

СвойствоМассивЗапись
Как объединяются данныеВ одну последовательность элементовВ один объект с набором характеристик
Как задаются частиИндексамиИменами полей
Типы частейОбычно элементы имеют один типПоля могут иметь разные типы
Как обратиться к частиПо индексу, например a[i]По имени поля, например книга.год
Типичный пример примененияХранение последовательности оценокХранение характеристик одной книги

Сравнивайте не только способы обращения, но и смысл объединения данных: массив собирает элементы одного вида, а запись описывает один объект через его свойства. Если нужно хранить много объектов с одинаковыми характеристиками, эти структуры можно сочетать, создав массив записей.

Разбор задач

Книга: название и год издания

Условие. Нужно описать тип записи для книги с полями «название» и «год издания», создать переменную и присвоить значения её полям. Сначала определим, что именно будет храниться в каждом поле. Название является текстом, а год — целым числом.

  1. Зададим тип-запись, например Книга, с текстовым полем название и целочисленным полем год.
  2. Объявим переменную мояКнига типа Книга, чтобы в ней хранить данные об одном экземпляре книги.
  3. Присвоим полям значения: мояКнига.название = «Дюна», мояКнига.год = 1965.

Ответ. Создана запись с названием «Дюна» и годом издания 1965. Точка в составном имени показывает, какому полю переменной присваивается значение. При записи реальной программы синтаксис объявления типа может зависеть от языка программирования.

Стоимость запаса товаров

Условие. Запись о товаре содержит название, цену и количество. Требуется вычислить стоимость имеющегося запаса. Смысл расчёта — определить, сколько стоят все единицы товара, поэтому цену одной единицы нужно умножить на их количество.

  1. Определим нужные поля записи: название имеет текстовый тип, а цена и количество — числовые типы.
  2. Обратимся к полям цена и количество одной записи, например товар.цена и товар.количество.
  3. Вычислим стоимость: стоимость = товар.цена × товар.количество. Если цена равна 120, а количество — 8, запас стоит 960.

Ответ. Стоимость запаса равна произведению цены на количество. Название в формулу не входит, потому что оно помогает определить товар, но не участвует в вычислении. При необходимости результат можно сохранить в отдельную переменную.

Поиск ученика с наибольшим баллом

Условие. Дан массив записей об учениках с полями фамилия и балл. Нужно найти ученика с наибольшим баллом и вывести его фамилию. Чтобы не потерять связь между фамилией и результатом, будем сохранять индекс лучшей записи, а не только максимальное число.

  1. Считаем, что массив не пуст, и примем за лучшего первого ученика: индекс максимума = 1.
  2. Переберём остальные элементы массива циклом. Если балл текущего ученика больше балла записи с индексом максимума, запомним индекс текущего элемента.
  3. После цикла обратимся к полю фамилия записи с найденным индексом и выведем его.

Ответ. Выводится фамилия ученика с наибольшим баллом. Начальное значение можно брать из первой записи, чтобы корректно обработать даже ситуацию, когда все баллы отрицательные. Если одинаковый максимум встречается несколько раз, описанный способ сохранит первого найденного ученика.

Типичные ошибки

Считать запись массивом. Их путают, потому что обе структуры объединяют несколько значений. Но в массиве части обычно одного типа и различаются индексами, а в записи поля называются и могут иметь разные типы. Проверьте себя: если у частей есть смысловые имена вроде фамилия и балл, речь идёт о записи.

Путать имя типа записи с именем переменной. Тип описывает устройство данных, а переменная хранит конкретные значения полей. Ошибка возникает, когда объявление принимают за уже созданный объект. Проверьте, указано ли имя переменной, значение полей которой вы хотите получить или изменить.

Обращаться к полю без указания переменной-записи. Одно и то же имя поля может встречаться в нескольких записях, поэтому само по себе оно не определяет источник значения. В результате программа или читатель не поймут, чьи данные используются. Проверьте составное имя: перед точкой должна стоять переменная, после неё — поле.

Присваивать полю значение неподходящего типа. Такая ошибка появляется, если не сверить значение с типом, заданным при описании записи. Например, году нельзя присвоить текстовое название книги, если поле года целочисленное. Перед присваиванием сопоставьте тип поля и тип значения, а затем проверьте, что значение имеет нужный смысл.

Связь с другими темами

Для работы с записями нужны знания о переменных, типах данных, массивах и обращении к элементам составных данных. Запись помогает моделировать объекты и обрабатывать таблицы сведений: например, списки учеников, товаров или книг. Если объектов много, записи объединяют в массив и перебирают циклом. Так сочетаются описания характеристик отдельного объекта и обработка целого набора объектов.

Что запомнить

  • Запись объединяет связанные поля в одну переменную.
  • Каждое поле имеет имя и заданный тип.
  • Поля одной записи могут иметь разные типы.
  • Набор и типы полей задаются при описании типа-записи.
  • К полю обращаются через переменную-запись и имя поля.
  • Массив записей хранит сведения о нескольких однотипных объектах.

Частые вопросы по теме

Чем запись отличается от массива?

В массиве хранят элементы одного типа, которые различают по индексам. В записи объединены поля с именами, причём их типы могут различаться.

Могут ли поля одной записи иметь разные типы?

Да, например, поле с фамилией может иметь строковый тип, а поле с баллом — целочисленный. Тип каждого поля задают при описании типа-записи.

Как обратиться к отдельному полю записи?

Нужно указать имя переменной-записи, точку и имя поля. Например, ученик.балл обозначает поле балл переменной ученик.

Можно ли создать массив записей?

Да, элементы такого массива имеют один тип-запись и одинаковый набор полей. Так удобно хранить данные о нескольких книгах, товарах или учениках.

Когда удобнее использовать запись, а не отдельные переменные?

Запись удобнее, когда несколько значений относятся к одному объекту и их нужно обрабатывать вместе. Например, у товара можно хранить название, цену и количество в одной переменной.

Спросить по теме параграфа

§ 39. Структуры (записи)

Эта же тема в других учебниках

Учебник

Оглавление →
Предмет
Информатика
Класс
11 класс
Учебник
"Информатика (базовый и углублённый уровни) (в 2 частях)", Поляков К.Ю., Еремин Е.А.