- •Содержание
- •Раздел 1.Подпрограммы Общие сведения
- •Процедуры Описание процедур
- •Вызов процедур
- •Процедуры без параметров
- •Процедуры с параметрами
- •Параметры-значения
- •Параметры-переменные
- •Параметры-константы
- •Параметры-переменные без типа
- •Параметры процедурного типа
- •Использование производных типов в качестве параметров подпрограмм
- •Принцип локализации имен
- •Функции Описание функций
- •Вызов функции
- •Рекурсивные подпрограммы
- •Директивы
- •Библиотечные модули пользователя Общие сведения
- •Структура модуля Unit
- •Особенности работы с модулями
- •Подключение к программе внешнего файла
- •Раздел 2.Простейший ввод-вывод Процедуры ввода из стандартного текстового файла Input
- •248 15 4 70 Значения 1-й строки
- •11 Значения 2-й строки
- •Процедуры вывода в стандартный текстовый файл Output
- •Раздел 3.Записи Структура записи
- •Записи без вариантной части
- •Записи с вариантами
- •Оператор присоединения With
- •Константа-запись
- •Раздел 4.Множества Общие сведения
- •Конструктор множества
- •Задание множественного типа
- •Операции над множествами
- •Ввод / вывод значения множественной переменной
- •Типизованные константы-множества
- •Раздел 5.Файлы Общие сведения
- •Процедура Assign
- •Файлы с типом
- •Процедура Assign
- •Процедура Rewrite (f)
- •Процедура Write (f, v1 [, v2, … , vn])
- •Процедура Reset (f)
- •Процедура Read (f, V [, v2, …, vn])
- •Функция Eof(f)
- •Процедура Seek (f, n)
- •Функция Filepos (f)
- •Функция Filesize(f)
- •Процедура Close (f)
- •Текстовые файлы
- •Процедура Assign (f, Name)
- •Процедура AssignСrt(f)
- •Процедура Append (f)
- •Процедура Rewrite (f)
- •Процедура Reset (f)
- •Процедура Read ([f,] v1 [, v2, …, vn])
- •Процедура Readln [([f] [,] [v1, v2, …, vn])]
- •Процедура Write ([f,] e1 [, e2, …, en])
- •Процедура Writeln([f,][e1,e2, …,en])
- •Процедура Close(f)
- •Процедура SetTextBuf (f, Buf [, Size])
- •Процедура Flush (f)
- •Сравнительная характеристика представления информации в файлах с типом и текстовых файлах
- •I. Представление числовой информации.
- •II. Представление текстовой информации.
- •Файлы без типа
- •Процедуры Reset и Rewrite
- •Процедура Blockread
- •Процедура Blockwrite
- •Проверка операций ввода-вывода
- •Раздел 6.Ссылочный тип (тип указатель) Общие сведения
- •Методы работы с динамическими переменными
- •Процедуры New и Dispose
- •Процедуры Getmem и Freemem
- •Процедуры Mark и Release
- •Раздел 7.Динамические структуры данных Динамические цепочки Структура динамической цепочки
- •Формирование цепочки
- •Поиск элемента в цепочке
- •Удаление элемента из цепочки
- •Вставка элемента в цепочку
- •Линейный однонаправленный список
- •Двунаправленные списки
- •Вставка элемента
- •Создание двунаправленного кольцевого списка с заглавным звеном
- •Удаление элемента
- •Поиск элемента
- •Очереди и стеки
- •Очередь lifo
- •Очередь fifo
- •Общие сведения
- •Способы организации таблиц
- •Однонаправленный список.
- •Однонаправленный список с упорядоченными записями.
- •Однонаправленный список с отдельным хранением текста записи.
- •Представление в виде массива.
- •Двоичное дерево.
- •Двоичные деревья Структура двоичного дерева
- •Построение дерева
- •Поиск записи в дереве
- •Включение записи в дерево
- •Удаление записи из дерева
- •Раздел 8.Оверлеи Общие сведения
- •Правила оформления оверлейных программ
- •Инициализация работы оверлеев
- •Включение администратора оверлеев
- •Обработка ошибок администратора
- •Размещение оверлейного файла в ems-памяти
- •Управление оверлейным буфером
- •Литература Основная и дополнительная литература
- •Перечень наглядных пособий, методических указаний, методических материалов и используемых в учебном процессе технических средств
Раздел 3.Записи Структура записи
Записи называют еще комбинированным типом данных или типом Record.
Запись – это структура данных, состоящая в общем случае из иерархически упорядоченных разнородных компонентов. В отличие от массивов компоненты записей могут иметь различные типы, и доступ к ним осуществляется не по индексам, а по именам.
Компоненты записей называются полями. На тип поля записи никаких ограничений не накладывается, поэтому компонентой записи может быть тоже запись. В этом случае говорят об иерархической записи. Уровень иерархии (вложенности) не должен превышать 9.
Пример простой (не иерархической) записи – представление комплексного числа a + b*i – содержит Рисунок 3 .20.
Рисунок 3.20 – Пример неиерархической записи
Пример иерархической записи Anketa представляет Рисунок 3 .21.
Cинтаксис задания структуры данных типа запись имеет вид, который иллюстрирует Рисунок 3 .22
Список полей определяется с помощью синтаксической диаграммы, которую содержит Рисунок 3 .23.
Из синтаксической диаграммы (см. Рисунок 3 .23) видно, что запись может состоять из общей части и вариантной части. Любая из этих частей является необязательной.
Рисунок 3.21 - Пример иерархической записи Anketa
Рисунок 3.22 – Cинтаксическая диаграмма задания данных типа запись
Рисунок 3.23 – Синтаксическая диаграмма списка полей
Поле записи обозначается идентификатором. К полю обращаются по имени. Областью действия полей записи является сама запись. Имя каждого поля внутри записи должно быть уникальным.
Записи без вариантной части
Такие записи содержат только общую часть.
Cинтаксис задания общей части записи имеет вид, который содержит Рисунок 3 .24.
Рисунок 3.24 – Синтаксическая диаграмма задания общей части записи
Каждому полю записи дается свое имя и задается тип значения этого поля.
Пример 3.1.
Объявление записи, структуру которой представляет Рисунок 3 .20.
Type
Komplex = Record
Re: Real;
Im: Real
End;
или эквивалентно
Type
Komplex = Record
Re, Im: Real;
End;
В разделе Var необходимо ввести переменные типа Komplex:
Var
X, Y: Komplex;
Тип поля записи может быть определен двумя способами: непосредственно задан в описании записи или описан предварительно. В последнем случае указывается имя типа.
Пример 3.2.
Объявление записи, структуру которой представляет Рисунок 3 .21.
Type
Data = Record
God: 1900..2000;
Mes: (Jn, Fb, Mr, Ap, Ma, Jn, Jl, Ag, Sp, Oc, Nv, Dc);
Den: 1..31
End;
Anketa = Record
Fio: Record
Fam: String [20];
Im: String [10];
Ot: String [20]
End;
Pol: (Man,Woman);
Data_R: Data;
Prof: String [20]
End;
В разделе Var необходимо ввести переменную типа Anketa:
Var
An1, An2: Anketa;
D1, D2: Data;
Объем памяти необходимый для записи, складывается из длин полей нижнего уровня.
Переменная, имеющая тип записи верхнего уровня, называется полной переменной.
Обращение к значению поля осуществляется с помощью идентификатора полной переменной, идентификаторов всех полей (с учетом их иерархии), в состав которых входит поле, и имени данного поля, разделенных точкой. Такое имя называется составным именем.
Например, применительно к примерам 3.1 и 3.2, An1, An2, X, Y – это полные переменные (полные имена). Составные имена записываются следующим образом: X.Re, X.Im, An1.Pol, An1.Fio.Fam, An1.Data_R.God и т.д.
Для полных переменных одного и того же комбинированного типа существует только одна операция – операция присваивания (в качестве выражения в правой части оператора присваивания может быть использована только переменная того же типа запись). Например, для примеров 3.1, 3.2 можно записать:
X := Y;
An1 := An2;
К этому моменту записи Y, An2 уже должны быть определены.
Составное имя может использоваться везде, где допустимо применение типа поля. Для присваивания полям значений используется оператор присваивания или ввода.
Пример 3.3.
Присвоение значений полям переменной D1 (к примеру 3.2).
D1.God := 1970;
D1.Mes := Jn;
D1.Den := 15;
Для определения значения полной переменной необходимо присвоить значения всем полям, образующим это значение.
Составные имена можно использовать в операторах ввода-вывода. Например:
Read (D1.God, D1.Den);
Write (A1.Fio.Fam);
Зачастую удобно пользоваться массивами из записей.
Например, применительно к примеру 3.2 может быть объявлен следующий массив:
Var
Spisok: Array [1..100] Of Anketa;
Такое объединение позволяет хранить анкетные данные на 100 человек, выделять и обрабатывать из них нужные. Например, можно вывести значения необходимых полей записи:
For I:=1 To 100 Do
Writeln (Spisok [I].Fio.Fam, Spisok [I].Fio.Im, Spisok [I].Fio.Ot)