- •1. Постановка задачи:
- •Структура программы на Паскале
- •Классификация типов
- •Стандартные типы данных Логические типы Внутреннее представление
- •Операции
- •Целые типы Внутреннее представление
- •Операции
- •Стандартные функции и процедуры
- •Вещественные типы Внутреннее представление
- •Операции
- •Стандартные функции
- •Символьный тип
- •Порядковые типы
- •Алфавит языка
- •6.2. Идентификаторы
- •6.3. Константы
- •6.4. Выражения
- •6.5. Операции
- •Составной оператор
- •Оператор if выполняется так:
- •Оператор if может иметь сокращенную форму. Её синтаксис:
- •10.1. Процедура
- •10.2. Функция
- •10.3. Формальные и фактические параметры
- •10.3.1. Параметры-значения
- •Динамическая память
- •1. Объявление указателей
- •2. Выделение и освобождение динамической памяти
- •3. Процедуры и функции для работы с динамической памятью
- •Работа с файлами на языке программирования pascal. Типы файлов, команды для работы с файлами, типизированные, нетипизированные и текстовые файлы
- •Работа с файлами в языке Pascal. Файлы прямого доступа.
- •16. Графические возможности языка. Модуль Graph.
- •6.1. Массив
- •6.2. Строка типа string
- •6.3. Asciiz-строка
- •6.4. Запись
- •6.5. Множество
- •6.6. Файл
- •3.1. Алгоритмы обработки массивов
- •3.2. Ввод-вывод элементов одномерного массива
- •3.3. Вычисление суммы элементов массива
- •3.4. Вычисление произведения элементов массива
- •3.5. Поиска максимального элемента в массиве и его номера
- •3.6. Сортировка элементов в массиве
- •3.6.1. Сортировка методом "пузырька"
- •3.6.2. Сортировка выбором
- •3.6.3. Сортировка вставкой
- •3.7. Удаление элемента из массива
- •3.8. Примеры алгоритмов обработки массивов
- •20.Алгоритмы обработки массивов: алгоритмы на двумерных массивах.
- •21.Динамические структуры данных: очередь.
- •Занесение элемента в очередь
- •Извлечение элемента из очереди
- •Занесение элемента в стек
- •Извлечение элемента из стека
- •Абстрактные типы данных
- •Объекты и классы
- •Базовые принципы ооп
- •Пакетирование (инкапсуляция)
- •Наследование
- •Полиморфизм
- •Описание объектного типа
- •Иерархия типов (наследование)
- •Полиморфизм и виртуальные методы
- •Статические методы
- •Виртуальные методы
6.4. Запись
Тип-запись включает ряд компонент, называемых полями, которые могут быть разных типов.
При задании типа-записи после зарезервированного слова record следует перечислить все
поля типа-записи с указанием через двоеточие их типов и завершить задание типа словом
end. Поля отделяются друг от друга точкой с запятой. Количество полей записи может быть
любым.
Пример.
type
Complex = record {Тип комплексных чисел}
Re: Real;
Im: Real
end;
Data = record {Тип - дата рождения}
Year: Integer;
Month: 1..12;
Day: 1..31
end;
Person = record {Тип - сведения о сотруднике}
Name: string[20];
Sex: (Male, Female);
Age: Integer;
Married: Boolean
end;
Примечание. Если несколько полей типа-записи имеют один и тот же тип, то их имена можно
перечислить через запятую и затем указать этот общий тип. Так, рассмотренный в примере
тип комплексных чисел можно ввести и другим образом:
type
Complex = record
Re, Im: Real
end;
После введения типа-записи можно затем задать переменные или типизированные константы
этого типа - записи.
При задании значений константе ее поля записываются в круглых скобках через точку с
запятой. Для задания значения каждого поля сначала указывается имя поля, а затем через
двоеточие - его значение.
Так, для введенных выше типов можно задать, например, следующие переменные и константы:
var
X, У, Z: Complex;
Dat: Data;
const
Birthday: Data = (Year: 1971; Month: 12; Day: 9);
Ivanov: Person = (Name: 'Иванов'; Sex: Male; Age: 40; Married: True);
Примечание. Тип-запись можно вводить и непосредственно при определении переменных или
типизированных констант. Например, фрагмент
var
X, Y, Z: record
Re, Im: Real
end;
определяет те же комплексные переменные, что и в предыдущем примере.
Доступ к полям записи осуществляется указанием имени переменной (константы) и имени поля,
записываемого через точку, например:
Ivanov.Age, X.Re, Dat.Day и т. д.
Пример. Использование полей записей.
X.Re := 1.5;
X.Im :=1.7; Y.Re:= -X.Re;
Y.Im := -X.Im;
Ivanov.Married := False;
Для того чтобы не выписывать каждый раз имя записи при обращении к ее полям, можно
использовать оператор над записями WITH. Его структура выглядит следующим образом:
with <имя записи> do <оператор>;
В этом случае внутри оператора можно указывать только поле записи. Например,
фрагмент:
with X do begin
Re := 1.5;
Im := 1.7;
Y.Re := -Re;
Y.Im := -Im
end;
with Ivanov do
Married := False;
эквивалентен фрагменту из предыдущего примера.
Тип-запись может иметь вариантную часть, изменяющуюся при разных реализациях, например,
в типе-записи параметров геометрических фигур для квадрата задается сторона, для
треугольника - две стороны и угол между ними, для окружности - радиус и т. д.
Вариантная часть может быть только одна и должна располагаться в конце записи.
Пример. Использование вариантной части.
type
Figure = (Square, Triangle, Circle);
Param = record
X, Y: Real; {координаты точки привязки}
case Fig: Figure of {параметры фигур}
Square: (Side: Real);
Triangle: (Sidel, Side2, Angle: Real);
Circle: (Radius: Real)
end;
var MySquare, MyCircle: Param;
Вариантная часть начинается словом case, за которым следует переменная выбора варианта
(в примере Fig) с указанием типа. Далее указываются константы значения которых может
принимать переменная выбора варианта (в примере Square, Triangle, Circle). За каждой
константой через двоеточие в круглых скобках записываются поля данного варианта записи
с указанием их типов. Круглые скобки необходимы, даже если для данного варианта вариантная
часть отсутствует. Следует отметить, что вариантная часть не завершается своей операторной
скобкой end, как у обычной конструкции CASE, т. к. далее идет завершающая операторная
скобка end всего типа.
В стандарте языка Паскаль перед тем, как использовать один из вариантов записи, переменной
выбора варианта необходимо присвоить соответствующее значение:
Fig := Square;
MySquare.Side :=5.0;
Fig := Circle;
MyCircle.Radius :=7.5;
В Turbo Pascal эту операцию делать необязательно, хотя, если переменная выбора задана,
ее затем можно в программе посмотреть, чтобы определить, какой задан вариант. Более того,
задание значения переменной выбора ни на что не оказывает влияния, и следующий фрагмент
эквивалентен рассмотренному выше:
Fig := Circle;
MySquare.Side := 5.0;
Fig := Square;
MyCircle.Radius :-7.5;
В тип-записи допустимо не вводить переменную выбора вариантов, а перечислить лишь разные
варианты, например:
Transf = record
case Integer of
1: (_Word: Word);
2: (_TwoSymb: array[1..2] of Char)
end;