Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Текст лекций.doc
Скачиваний:
3
Добавлен:
01.04.2025
Размер:
1.59 Mб
Скачать

9.2. Записи

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

В языке Турбо-Паскаль различают фиксированные (обычные) и вариантные записи. В данной главе мы рассмотрим только фиксированные записи. После получения опыта их использования, читатель может самостоятельно ознакомиться по литературе и с вариантными записями.

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

В качестве примера приведем запись, описывающую сведения о студенте.

Frame135

В приведенной записи есть группа полей, несущих одинаковую смысловую нагрузку (MatAnal, LinAlg, Prog, Phys). С точки зрения удобства работы с текстом программы и удобства выполнения групповых операций, такие поля целесообразно объединить в отдельную структуру данных типа record.

В результате тип TStudent примет такой вид:

Frame136

А еще лучше сделать это следующим образом:

Frame137

В программе обращение к полям записей выполняется с помощью квалифицируемых (уточненных) идентификаторов, в которых указывается вся цепочка имен от идентификатора переменной типа record до идентификатора требуемого поля. Имена полей в такой записи разделяются точками.

Покажем это на примере, в котором используется приведенное выше объявление записи TStudent.

Frame138

9.3. Оператор with

Для упрощения работы с записями и придания тексту программы большей наглядности в Турбо Паскале имеется специальный оператор присоединения with. С использованием этого оператора приведенный выше фрагмент присвоения значений полям первого элемента массива Group будет иметь следующий вид:

Frame139

При заполнении информацией структур данных типа record необходимо помнить, что с клавиатуры и из текстовых файлов допускается вводить данные только некоторых стандартных типов данных. Поэтому, в операторах Read и Readln могут располагаться только идентификаторы самых внутренних полей, которые имеют допустимые для ввода типы, например:

Frame140

К переменным типа «запись» могут в особых случаях применяться и групповые операции присваивания, когда одновременно присваиваются новые значения всем внутренним полям. Это, в частности, имеет место при работе с типизированными файлами (будет рассматриваться отдельно).

Пример использования переменной типа «запись» будет приведен в разделе «Динамические структуры данных».

Вопросы для самоконтроля

  1. Как задать множество?

  2. Каковы особенности работы с множествами?

  3. Что такое запись?

  4. Для чего используются уточненные идентификаторы?

  5. Зачем используется оператор присоединения with ?

  6. Каковы особенности ввода с клавиатуры значений для полей записи?

10. Файлы

    1. Введение

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

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

Примечание. В данном пособии указанные действия будут записываться по правилам операционной системы MS DOS.

Итак, с одной стороны, файл – это именованная область внешней памяти, содержащая какую-либо информацию. В таком понимании это – физический файл, то есть существующий физически на некотором материальном носителе информации и доступный из программы с одного из внешних устройств компьютера: магнитного или оптического дисковода, клавиатуры и ряда других.

Структура физического файла представляет собой простую последовательность байтов информации:

байт

байт

байт

. . .

. . .

байт

байт

С другой стороны, файл – это одна из многих структур данных, используемых в программировании. В таком понимании речь идет о логическом файле, то есть существующим только в нашем представлении с позиций программы. В программе файл представляется файловой переменной определенного типа.

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

file of byte (файл, состоящий из байтов)

байт

байт

байт

. . .

. . .

байт

Eof

file of integer (файл, состоящий из чисел типа «целые» во внутримашинных кодах)

целое со знаком

целое со знаком

. . .

. . .

целое со знаком

Eof

file of T, (файл, состоящий из записей типа Т)

где T = record

a : byte;

b : char;

c : integer;

end;

первый элемент

. . .

последний элемент

байт

код символа

целое со знаком

. . .

байт

код символа

целое со знаком

Eof

Примечание. Последний элемент файла, Eof (от слов End of file), обозначает физический конец файла, за которым нет ни одного элемента, принадлежащего ему. В старых версиях MS DOS для обозначения физического конца файла использовался специальный однобайтовый код. В последних версиях конец файла никак не кодируется, а файловая система своими средствами определяет, когда достигнут конец файла.

Логическая структура файла очень похожа на структуру массива. Различия между массивом и файлом заключается в следующем:

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

  • Файл располагается на внешнем носителе информации. Количество элементов файла не фиксировано. В процессе работы программы оно может изменяться и в каждый момент времени неизвестно. Зато, как уже упоминалось выше, известно, что в конце файла располагается специальный символ конца файла Eof. А определить длину файла и выполнить другие часто необходимые операции с ним можно с помощью стандартных процедур и функций, предназначенных для работы с файлами. Нумерация элементов файла выполняется слева направо, начиная с нуля (исключая текстовые файлы).

В любой момент из программы файл доступен («виден») не целиком. Доступен только один его логический элемент (байт, целое число в машинной форме, запись и т.п.). В этом контексте можно говорить о том, что из программы в любой момент времени «файл виден через логическое окно», ширина которого точно равна размеру одного элемента файла. Отметим также, что в литературе часто вместо термина «элемент файла» употребляется также термин «запись», смысл которого в общем случае не совпадает с термином record.