- •Содержание
- •Раздел 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-памяти
- •Управление оверлейным буфером
- •Литература Основная и дополнительная литература
- •Перечень наглядных пособий, методических указаний, методических материалов и используемых в учебном процессе технических средств
Оператор присоединения With
При работе с полями в их составном имени необходимо писать путь к полю через все уровни иерархии, начиная от полного имени записи. С учетом того, что количество уровней иерархии может достигать девяти, составное имя поля может содержать девять компонент. Работа с такими именами неудобна, а программа оказывается очень громоздкой.
Для сокращения составного имени поля может быть использован оператор присоединения With. Данный оператор имеет формат, который содержит Рисунок 3 .27.
Рисунок 3.27 – Синтаксическая диаграмма
оператора присоединения
На данном рисунке <Оператор> - это любой оператор языка, допустимый для соответствующих типов полей.
В операторе With указывается список переменных типа Record.
Оператор With облегчает доступ к полям этих записей и минимизирует повторные адресные вычисления. Внутри <Оператора>, вложенного в оператор With, к полям этих записей можно обращаться как к простым переменным.
Пример 3.6.
В примере 3.2 объявлена переменная D1: Data. Используя оператор With, вместо примера 3.3 можно записать:
With D1 Do
Begin
God:=1970;
Mes:=Yan;
Den:=15
End;
Пример 3.7.
Используя оператор With, к полям записи An1 (см. пример 3.2) можно обратиться следующим образом:
With An1 Do
Begin
Fio.Fam := ’Иванов’;
Fio.Im := ’Петр’;
Fio.Ot := ’Степанович’;
Pol := Man;
Data_R.God := 1970;
Data_R.Mes := Yan;
Data_R.Den := 25;
Prof := ’Студент’
End;
Без применения оператора With перед всеми именами полей необходимо было бы написать имя записи An1.
Адрес переменной типа Record вычисляется до выполнения оператора With. Любые модификации переменных, влияющие на вычисленное значение адреса, до завершения оператора With не отражаются на значении вычисленного ранее адреса.
Указание списка переменных типа запись в операторе With (см. предыдущую синтаксическую диаграмму) является сокращенной формой оператора With. Сокращенная форма оператора:
With Z1, Z2, Z3, … , Zn Do <Оператор>
эквивалентна следующей полной форме оператора With:
With Z1 Do
With Z2 Do
With Z3 Do
. . .
With Zn Do <Оператор>
Из полной формы оператора With видно, что идентификатор поля в <Операторе> обозначает компонент записи из ближайшего объемлющего оператора With, в котором указана переменная с таким полем.
Пример 3.8.
Применительно к примеру 3.2 для полного устранения необходимости в составных именах полей (см. пример 3.7) может быть использована следующая сокращенная форма оператора With:
With An1, Fio, Data_R Do
Begin
Fam := ’Иванов’;
Im := ’Петр’;
Ot := ’Степанович’;
Pol := Man;
God := 1970;
Mes := Yan;
Den := 25;
Prof := ’Студент’;
End;
Если две переменные из списка записей оператора With имеют поля с одним и тем же идентификатором, то внутри оператора With этот идентификатор обозначает поле той переменной, которая указана в списке позже.
Имена отдельных полей записи в программе могут совпадать с именами переменных. Имя переменной в операторе With недоступно.
Пример 3.9.
Использование совпадающих идентификаторов.
Var
{Запись}
V: Record
V2: Integer;
V1: Record
A: Real
End;
A: Integer
End;
{Переменная}
A: Char;
. . .
With V, V1 Do
Begin
V2 := 1; {значение поля V.V2 равно 1}
A := 1.0; {значение поля V.V1.A равно 1.0}
V.A := 1; {значение поля V.A равно 1}
End;
A := ’A’;
В данном примере есть три элемента с именем А – поля V.V1.A, V.A и переменная А типа Char. Указание имени поля А в <Операторе> оператора With приведет к обращению к полю V.V1.A, поскольку поле А содержится в записи V1, находящейся в списке записей сокращенной формы оператора With после записи V. Чтобы обратиться к полю V.A, нужно использовать его составное имя или вынести оператор, работающий с данным полем, за пределы оператора With.
За пределами оператора With поля записи становятся недоступными, а переменная А типа Char становится доступной.