- •Р.К. Ахмадулин технология программирования
- •Оглавление
- •§1. Основные понятия
- •Основные символы языка Паскаль
- •Элементарные конструкции языка Паскаль
- •Примеры записи чисел и выражений на языке Паскаль
- •Вопросы для самопроверки
- •§2. Типы данных
- •Целые типы
- •Вещественные типы
- •Символьный тип
- •Логический тип
- •Скалярные типы, определяемые пользователем
- •Вопросы для самопроверки
- •§3. Операции и выражения
- •Приоритет операций и отношений в выражениях
- •Стандартные (встроенные) функции
- •Вопросы для самопроверки
- •§4. Структура программы
- •Комментарии
- •Директивы компилятора
- •Оформление исходного текста
- •Вопросы для самопроверки
- •§5. Переменные и константы. Оператор присваивания
- •Понятие константы
- •Понятие переменной
- •Оператор присваивания
- •Совместимость типов данных
- •Понятие типизированной константы
- •Вопросы для самопроверки
- •§6. Процедуры ввода и вывода
- •Процедуры вывода
- •Форматированный вывод
- •Процедуры ввода
- •Вопросы для самопроверки
- •§7. Условный оператор и оператор выбора. Оператор перехода
- •Условный оператор if
- •Понятие составного оператора
- •Оператор выбора
- •Оператор перехода
- •Вопросы для самопроверки
- •§8. Операторы цикла
- •Циклы с заданным числом итераций
- •Циклы с предусловием
- •Циклы с постусловием
- •Вопросы для самопроверки
- •§9. Пример использования циклов
- •Вычисление факториала
- •Вычисление суммы по заданной формуле
- •Вычисление суммы по формуле с заданной точностью
- •Вычисление максимального элемента последовательности
- •Вычисление длины последовательности элементов
- •Вопросы для самопроверки
- •§10. Массивы
- •Описание массива
- •Обращение к элементам массива
- •Многомерные массивы
- •Допустимые операции с массивами
- •Инициализация массива
- •Вопросы для самопроверки
- •§11. Алгоритмы сортировки
- •Сортировка выбором
- •Сортировка вставкой
- •Пузырьковая сортировка
- •Улучшенные сортировки
- •Вопросы для самопроверки
- •§12. Строковый тип
- •Описание строковых переменных
- •Операции над строками
- •Процедуры и функции для работы со строками
- •Вопросы для самопроверки
- •§13. Записи
- •Объявление записи
- •Обращение к записям
- •Оператор присоединения with
- •Записи с вариантами
- •Инициализация записи
- •Вопросы для самопроверки
- •§14. Множества
- •Описание множеств
- •Операции над множествами
- •Пример использования множеств
- •Множества как типизированная константы
- •Вопросы для самопроверки
- •§15. Процедуры и функции
- •Понятие процедуры и функции
- •Структура процедуры
- •Структура функции
- •Формальные параметры
- •Глобальные и локальные объекты
- •Вопросы для самопроверки
- •§16. Модули
- •Понятие модуля
- •Стандартные модули в Турбо Паскаль
- •Подключение модулей
- •Структура модуля
- •Вопросы для самопроверки
- •§17. Файлы
- •Понятие файла
- •Процедуры и функции для работы с файлами
- •Понятие буфера ввода-вывода
- •Вопросы для самопроверки
- •§18. Типизированные файлы
- •Описание типизированных файлов
- •Операции над типизированными файлами
- •Последовательный и прямой доступ
- •Вопросы для самопроверки
- •§20. Текстовые файлы
- •Описание типизированных файлов
- •Чтение и запись
- •Конец строки и конец файла
- •Дополнительные процедуры для работы с текстовыми файлами
- •Файлы Input и Output
- •Вопросы для самопроверки
- •§21. Ссылки и указатели
- •Понятие указателя
- •Описание указателей
- •Операции с указателями
- •Выделение и освобождение динамической памяти
- •Вопросы для самопроверки
- •Рекомендуемая литература
- •Технология программирования
- •625000, Тюмень, ул. Володарского, 38
- •625039, Тюмень, ул. Киевская, 52
Оператор присоединения with
Если в программе необходимо несколько раз подряд обратиться к полям одной записи, то это может оказаться неудобным.
Пример:
var Circle: TCircle;
…
Circle.color:= 0;
Circle.center.x:= 10;
Circle.center.y:= 5.5;
Circle.radius:= sqr(Circle.center.x)+ sqr(Circle.center.y);
Обращение к компонентам записи в таком случае можно упростить, если воспользоваться оператором присоединения with.
Оператор with позволяет заменить составные имена, характеризующие каждое поле, просто на имена полей, а имя записи определить в операторе присоединения:
WITH M DO OP;
Здесь М – имя записи, ОР – простой или составной оператор. Оператор ОР представляет собой область действия оператора присоединения, в пределах которой можно не использовать составные имена.
Пример: использование оператора with
var Circle: TCircle;
…
with Circle do
begin
color:= 0;
center.x:= 10;
center.y:= 5.5;
radius:= sqr(center.x)+ sqr(center.y);
end;
Если внутри оператора with требуется обратиться к глобальной переменной, которая имеет такое же имя, как и одно из полей записи, то перед ней нужно указать через точку имя программы (раздел program).
Если внутри оператора with для некоторого имени явно не указано имя записи, то компилятор пытается интерпретировать его в следующей последовательности:
если в записи есть поле с искомым именем, то поиск заканчивается;
если в записи поля с таким именем нет, а рассматриваемый оператор with является вложенным в другой оператор with, то поиск производится среди полей внешней записи;
если среди полей всех вложенных записей нет искомого имени, компилятор считает его глобальной переменной.
Записи с вариантами
Иногда содержимое отдельной записи зависит от значения одного из ее полей (например, одно из полей определяет тип оборудования, от которого может зависеть набор его характеристик). В языке Паскаль допускается описание записи, состоящей из общей и вариантной частей. Вариантная часть при этом задается с помощью конструкции
CASE P OF,
где Р – имя поля из общей части записи.
Возможные значения, принимаемые этим полем, перечисляются так же, как и в операторе выбора case. Однако вместо указания выполняемого действия, как это делается в операторе case, здесь указываются поля варианта, заключенные в круглые скобки. Описание вариантной части завершается служебным словом end.
Тип поля Р можно указать в заголовке вариантной части.
Пример: тип поля Р указан в заголовке вариантной части
case P: Integer of
Далее рассмотрим следующий пример: описать запись для хранения данных: имя, фамилия, дата рождения. Для граждан хранить место рождения, для иностранцев – страну, дату прибытия и дату отъезда.
Пример: описание записи с вариантной частью
record
firstName, lastName: string[40];
birthDate: Date;
case citizen: boolean of
True: (birthPlace: string[40]);
False: (country: string[20];
entryDate : Date;
exitDate : Date);
end;
Инициализация записи
Инициализация записей может осуществляться как программно, так и с помощью типизированных констант. В случае описания записи в виде типизированных констант в круглых скобках перечисляются имена полей и через двоеточие указываются их значения. Друг от друга поля отделяются точкой с запятой.
Пример: описание записи в виде типизированной константы
type
RecType = Record
x,y: Word;
ch: Char;
dim: Array[1..3] of Byte
end;
const
Rec: RecType = ( x: 127; y: 255;
ch: 'A';
dim: (2, 4, 8) );
Описание записей в виде обычных (нетипизированных) констант недопустимо.