Элементы языка Object Pascal.
Алфавит: буквы ((a-z) – верхний и нижний регистр), цифры, 16-тиричные цифры, специальные символы и зарезервированные слова. Pascal – не чувствителен к регистрам (а = А), арабские цифры, 16-тиричные цифры (0 – 9 – а – f), специальные знаки (=, +, -, *, /, , ‘, :, ;, (, ), {, }, [, ], ^, @, $, #), пары символов (<=, >=, <>, :=, (*, *), .., _).
Пробел с кодом ASCII 0 – 32. Зарезервированные слова не могут использоваться в качестве идентификатора (название операции, функции, переменных, констант).
Директивы – связанные со стандартными объявлениями в программе, их нельзя использовать в качестве идентификаторов переменных программ.
{$1-} – отключить контроль ошибок ввода-вывода.
{$1+} - включить контроль ошибок ввода-вывода.
Идентификатор – имена (константы, метки), переменные (объекты, процедуры, функции, модули, программы…)
Идентификатор может иметь произвольную длину, но значащими для компилятора являются первые 255 символов. Он должен начинаться с буквы латинского алфавита или с символа ( _ ), за которым могут следовать буквы, цифры и _ :
X1; 1X; _1X
Переменная – число, которое может принимать какое-либо значение; в языках высокого уровня с каждой переменной ассоциировано ее имя (идентификатор). Значение переменной хранится в ячейке оперативной памяти с определенным адресом. Каждая переменная имеет свой тип. Тип определяет диапазон значения переменной и количество байтов, занимаемое ей в памяти.
Константы.
Константа – переменная, не имеющая своего значения в ходе выполнения программы. Они бывают именные и неименные.
Именные – символ или набор символов с присвоенным им значением.
Неименные – любое число. Константы могут быть целого типа, вещественного, шестнадцатеричное число, вещественное число, логическая константа, символ, строка символов, конструктор множества и признак неопределенного показателя (NIL).
Целые числа – записываются со знаком (или без) в десятичной системе счисления, в диапазоне (от -10263 до 10-, вещественное число, записанное в экспоненциальной форме имеет вид: (±#.###…# ) – мантисса, (E±###...#) – экспонента (порядок).
Экспоненциальный формат – формат с плавающей запятой.
250=(2,5*100)=2,5*E+2
E+2=102
0,0125=1,25* E-2
E-2=10-2
Шестнадцатеричное число:
Для их записи используются шестнадцатеричные числа, которым соответствует знак $ ( = FFFFFFFF)
$10 =16
1 байт ($00 - $FF =
Логические константы имеют два значения: истина (1) и лож (0), логические константы занимаю 1 байт, хотя задействован 1 бит.
Символьные константы (любой символ ASCII таблицы) 1 символ = 1 байт. Символы заключаются в апострофы (‘ ’), а также допустима их запись, используя ASCII код (‘ABC’=#65#66#67=‘A’#66#‘C’). В OPascal есть возможность работать с символами в системе кодирования Unicode (отличается от ASCII тем, что занимает 2 байта).
Конструктор множества – список элементов множества обрамленный в ([ ]): ([1.2-1.7],[red, green, blue], [ ]).
Выражения.
Основными элементами, из которых состоит составляющая часть программы, являются константы, переменные и обращения к функции. Каждый из этих элементов характеризуется типом и значением. С помощью знаков, операций и скобок из них можно составить выражение. Выражение, значение и его тип определены типом входящих в него операндов (2+а: 2,а – операнды, + - операция).
Значение выражения определяется порядком выполнения операций. Порядок выполнения операций определяется их приоритетом (с начала выполняются операции, имеющие максимальный приоритет, операции, имеющие одинаковый приоритет выполняются в порядке встречаемости в выражение слева на право; скобки позволяют увеличить приоритет операций до максимального).
Приоритет определяется в порядке убывания:
1). Унарные операции: +, -, not
2). Мультипликативные: *, /, mod, div(\), and, SHL, SHR
3). Аддитивные: +, -, or, xor
4). Операции отношения: =, <>, <, >, <=, >=, in
Структура управления операциями:
При запуске среды Delphi инициализируется новый проект (по умолчанию новый проект считается приложением, т. е. при его компиляции будут созданы исполнители _.exe файлы).
Delphi позволяет создавать и другие приложения: приложения Web, элементы приложения ActiveX…
Структура проекта Delphi.
Проект состоит из нескольких типов файлов:
Файл проекта (расширение _.dpr)
Файл форм (расширение _.dfm)
Файл модулей (расширение _.pas)
Файлы проекта выполняют роль главной подпрограммы, из него выполняется вызов файлов модулей и файлов форм, а также запуск всего приложения. Он связывает все остальные файлы. Между файлами модуля и формы существует однозначное соответствие. С каждым файлом ассоциирован один объект формы и значение свойств объекта. Для сохранения приложения необходимо сохранить все три файла.
Пример файла проекта (файл проекта создается автоматически):
Program Project1.
User
Forms, Unit1 in ‘Unit 1.pas’ {Form 1}
Begin
Application. Initialize;
Application. Createform (TForm 1, Form 1);
*****n;
End;
В Delphi существует возможность создавать консольные приложения. Это создано для совместимости с программами на Pascal.
Program ABC;
{Appupe Console}
Uses
Begin
Write in (‘Hello!’);
End;
Среда Delphi предназначена для создания приложений, работающих над управлением Windows. Однако существуют возможности создавать приложения работающие под Dos. В Delphi предусмотрены средства для создания 32-разрядных консольных приложений, которые могут выполняться в MS-DOS. Для создания консольного приложения:
Файл \ new \ consol application
Структура модуля исходного кода.
В OPascal исходный код каждой программы разбит на модули.
Модуль состоит из 4 разделов:
Обязательные:
1). Интерфейсный;
2). Раздел реализации;
Не обязательные:
3). Раздел инициализации;
4). Раздел завершения.
Интерфейсный раздел, и раздел реализации являются обязательными и должны присутствовать в каждом модуле. В начале файл модуля – его заголовок, в котором указывается имя модуля; затем все указанные разделы:
Unit имя модуля;
Interface;
Uses список модулей;
(1);
Implementation;
Uses список модулей;
(2);
Initialization;
(3);
Finalization;
(4);
End
В интерфейсном разделе описывается информация, которая будет доступна из других модулей программы.
В разделе реализации содержится информация, которая из других модулей недоступна. В нем содержатся все процедуры и функции (их исходные коды).
Модули, из которых состоят приложения, делятся на: созданные разработчиком и созданные в Delphi.
Встроенные модули.
System – содержит основные функции Delphi, его не нужно подключать с использованием слова Uses, т. к. он подключается к каждому модулю по умолчанию.
Модули, подключенные к интерфейсному разделу по умолчанию, доступны в любом месте данного модуля. Модули, подключенные в разделе реализации, доступны во всем этом разделе за исключением интерфейсного раздела. В разделах инициализации и завершения расположен код, выполняемый только один раз, в начале и конце работы модуля. Если модулей в программе несколько, то последовательность выполнения их разделов инициализации соответствует порядку их следования после ключевого слова Uses. Разделы завершения выполняются в обратном порядке.
Структура программной единицы на языке OPascal.
К программным единицам относятся: раздел описания, процедура, функция.
Все они имеют единую структуру:
<Объявление программной единицы>;
<Раздел описания>
Implementation (begin – для процедур и функций)
<Список исполняемых операторов>
End. (; - для процедур и функций)
Раздел описания состоит из (порядок следования различен):
1). Блок используемых модулей (uses <список модулей>);
2). Блок описания типов (type);
3). Описание пользовательских типов;
4). Описание констант (const <описание констант>);
5). Блок описания переменных (var <список переменных>);
6). Блок описания меток (label <список меток>);
7). Блок описания процедур и функций пользователя.
Любого из этих блоков может не быть (они не обязательны).
Программные единицы:
(Описание модуля)
Unit Unit 1;
Interface
Uses Windows, Massages, SysUnits, Classes, Forms;
Type
TForm 1 = class (TForm)
Button 1: TButton;
Label 1: TLabel;
Procedure Button 1 click (sender, TObject);
Var
Form 1: TForm 1;
x, y: integer;
s: string;
Const
n=100;
(1)
Procedure ABC;
Var
a: array [1…n] of byte;
Begin
For x:= 1 to n do
a[x]:=x;
end;
(Тело модуля)
Implementation
Procedure TForm 1. Button 1. Click (Sender: TObject);
Begin
Label 1. Caption := ‘Hello!’;
ABC;
end;
END.
Операторы языка OPascal.
1). Присваивание (:=): <переменная>:=<выражение>;
2). Пустой оператор (;): (ставится после вызова каждого оператора или процедуры функции);
Составной оператор – последовательность произвольных операторов программы, заключенная в операторные скобки:
Begin
…
End
OPascal не накладывает ограничений на характер операторов входящих в составной оператор. Внутри составного оператора может находится 1 или несколько составных операторов. Допускается произвольная глубина вложенности составных операторов.
Условный оператор:
If <условие> then <оператор 1> [else <оператор 2>]…
If x>0 then y:=3
Else
Begin
x:= ABS(x);
y:= SQR(x);
End.
Операторы повторения.
Цикл со счетчиком:
For <параметр> = <начальное значение> to/down to <конечное значение> do <оператор>;
В операторе For на каждом шаге цикла происходит увеличение/уменьшение (по умолчанию) параметра цикла на 1. Параметром цикла может быть только переменная порядкового типа.
Вещественные типы имеют конечное число значений, которое определяется форматом внутреннего представления числа.
Любому из порядковых типов применима функция:
ORD(x) - которая возвращает порядковый номер значения;
PRED(x) – возвращает предыдущее значение;
SUCC(x) – возвращает следующее значение.
Оператор цикла с предусловием.
While <условие> do <оператор>;
Оператор выполняется до тех пор, пока условие истинно.
Procedure ABC
Var
i, n: integer;
Begin
n:= 100;
i:= 0;
While i<=n do begin
i:= i+2;
Memo1. (.nes. Add (IntToStr (i)));
End;
End.
Программа выводит все четные числа от 0 до 100.
Оператор цикла с пост условием.
Repeat
<список операторов>
Until <условие>;
Список операторов выполняется пока условие ложно.
Var
s, i, n: integer;
Begin
s:= 0;
n:= 100;
i:= 0;
Repeat
i:= i + 1;
s:= s + 1;
Until i = n;
Memo1. Lines. Add (‘s=’ + IntToSrt (s));
End;
Программа вычисляет сумму чисел натурального ряда до (n).
Оператор выбора.
Case <ключ выбора> of
<список выбора>;
[else <оператор>];
End;
Этот оператор позволяет выбрать одно из нескольких возможных продолжений программы.
Параметром, по которому осуществляется выбор, служит ключ выбора. (Это выражение любого порядкового типа).
Список выбора – одна или более конструкций вида:
<константа выбора 1>: <оператор 1>;
.
.
<константа выбора N>: <оператор N>;
Константа выбора должна быть того же типа, что и ключ выбора.
Оператор Case работает в следующем порядке:
· Вычисляется выражение (ключ выбора);
· В последовательности операторов находится такой, которому предшествует константа, равная вычисленному значению;
· Найденный оператор выполняется, после чего Case завершает работу.
Если в списке выбора не найдена константа соответствующая ключу, управление передается оператору, который следует за else. Часто операторы, включающие в себя else можно опустить и тогда, при отсутствие нужной константы, ничего не произойдет и Case завершает свою работу.
Procedure Calk (a, b: integer);
Var
c: integer;
op: char;
Begin
op:= edit: text;
Case op of
‘+’ c:= a + b;
‘-’ c:= a – b;
‘*’ c:= a * b;
‘/’ c:= a dir b;
Else begin
Memo1.Lines. Add (‘указан неверный арифметический оператор’);
Exit
End;
End;
Memo1.Lines. Add (‘c=’+IntToStr(c));
End;
Процедура имитирует процедуру арифметического калькулятора.
Метки и оператор перехода go to.
Go to <метка>;
Этот оператор позволяет передать управление оператору, следующему за меткой.
Метка располагается, непосредственно, перед оператором, которому передается управление и отделяется от него (:). Перед появлением в коде программы, метка должна быть объявлена в блоке описания (label). Метка, описанная в блоке label, обязательно должна быть объявлена.
Метки, объявленные в процедуре или функции, локализуются в ней, поэтому передача управления извне процедуры или функции на внутреннюю метку невозможна.
Go to <метка>;
Procedure ABC;
Var
i: integer;
Label
Metka1, ab
Begin
…
Metka1:
…
Go to ab;
…
ab:
…
End;
Типы данных языка OPascal.
Структура типов данных:
Любые константы, переменные и значения функций OPascal характеризуются своими типами. Тип определяет множество допустимых значений, которые можно иметь тот или иной объект, а так же множество операций допустимых над этим объектом. Тип определяет формат представления переменной или константы в память ЭВМ.
I. Простые:
1). Порядковый тип.
Порядковый тип – отличается тем, что имеет конечное число возможных значений, эти значения можно упорядочить и каждому из них поставить в соответствие некоторое число (порядковый номер значения).
Ø Целый тип.
Диапазон возможных значений целых типов зависит от их внутреннего представления, которое может занимать в памяти: 8, 16, 32, 64 бита.
Тип | Диапазон | Размер (в битах) |
Shortint | -128…127 | 8 (со знаком) |
Smallint | -32768…32767 | 16 (со знаком) |
Integer | -… | 32 (со знаком) |
INT64 | ≈-10263…10263-1 | 64 (со знаком) |
Byte | 0…255 | 8 (без знака) |
Word | 0…65535 | 16 (без знака) |
LongWord | 0… | 32 (без знака) |
Во всех выражениях, функциях и процедурах использующих целые числа действует правило вложенности: вместо значения с большим диапазоном, может использоваться значение с меньшим диапазоном.
Функции применимые к целым типам:
ABS(x) – возвращает модуль числа;
CHR(x) – возвращает символ с ASCII кодом;
Inc(x,[i]) – увеличивает переменную x на значение i;
DEC(x,[i]) – уменьшает переменную x на значение i;
HI(x) – возвращает старший байт аргумента;
LO(x) - возвращает младший байт аргумента.
В памяти ЭВМ младший и старший байт хранятся в обратном порядке.
2 байта составляют машинное слово.
2 машинных слова составляют 2-ное слово.
Машинное слово состоит из старшего и младшего слова, которые в памяти хранятся в обратном порядке.
ODD(x) – возвращает (истина), если аргумент не четное число и (ложь) – если четное;
Random(x) – возвращает случайное число в диапазоне от 0 до x;
SQR(x) – возвращает квадрат числа (x);
Swap(x) – меняет местами старший и младший байт аргумента.
При действие с целыми числами, тип результата соответствует типу операнда, если операнды имеют разный тип, то тип результата будет соответствовать типу операнда с максимальным запасом значения. OPascal не контролирует возможные переполнения выполнения операции.
Ø Логический тип.
Значением логического типа может быть одна из двух констант: false(0), true(1).
Pred(true)=false
Suck(false)=true
Типы данных:
Boolean(bytebool) – false, true = 8 бит
Word bool - false, true 16 бит
Long bool - false, true 32 бита
Логический тип является порядковым и может быть использован в качестве параметра четного цикла.
Логические операции допустимые над этими числами:
Not – инвертирует значения (false ó true)
Or – оператор выбора (false или true)
And – оператор объединения (false и true)
Xor – обратно инвертирует значения (true ó false)
Ø Символьный тип.
Значением символьного типа является множество всех символов персонального компьютера, каждому символу соответствует его код (0-255 (код ASCII), 0-65535 (код Unicode)).
Для кодирования основных и управляющих символов достаточно 7 бит (1 половина таблицы ASCII).
Кодируется значение 0-127. Эта часть является стандартной и неизменной для всех персональных компьютеров. Управляющие коды имеют значение 0-32.
Символьный тип – Char 1 байт (ASCII), Wide Char 2 байта (Unicode):
Var
X:=Char;
Y:= Wide Char;
…
x:= ‘a’
y:= ‘b’
For x= ‘a’ to z do
Для символьного типа определены следующие функции:
Chr(x) – возвращает символ ASCII кода = x
Ord(x) – возвращает код определенного символа x
Apcase(x) – переводит в верхний регистр значение x
Locase(x) – переводит в нижний регистр значение x
Значение функций Apcase и Locase работают только для символов латинского алфавита.
Ø Перечисляемый тип.
Передается перечислением тех значений, которые он может иметь. Каждое значение именуется идентификатором и располагается в списке обрамленном круглыми скобками. При записи идентификатора работает правило их именования.
Соответствие между значениями перечисляемого типа и их порядковыми номерами устанавливается порядком перечисления. Первое значение имеет номер 0. Максимальная мощность 65535.
Порядковые типы объявляются в блоке описания типов:
Type
Имя типа (идентификатор1, идентификатор2…)
Day=(mon, tue, wen, thu, fri, sat, sun);
Color=(white, red, black);
Var
x:=day;
c:=color;
…
Begin
x:=tue
y:=red
For x:=mon to fri do …
Ø Тип диапазон.
Тип диапазон – является подмножеством базового типа. В качестве базового типа может выступать любой порядковый тип, кроме типа диапазона. Тип диапазон задается границами своих значений внутри базового типа.
Синтаксис записи:
Type
Имя типа = <минимальное значение>..<максимальное значение>;
Оценка = <1..5>
Цифра = <0..9>
Малая буква = <a..z>
Day2 = <tue..wed>
Тип диапазон также может быть объявлен в разделе описания переменных:
Var
X:=otcenka;
Y:=2..5;
Правила записи типа диапазона:
1). Двойная точка воспринимается как единый символ без пробела;
2). Левая граница диапазона не должна превышать правую;
3). Тип диапазон использует все свойства базового типа, но с ограничением связанным с меньшей мощностью.
2). Вещественный тип.
В отличие от порядковых типов, значение которых сопоставляется с рядом целых чисел и представляет в памяти абсолютно точно, значение вещественных типов определяет произвольное число с некоторой конечной точностью. Точность зависит от внутреннего формата вещественного числа. Все вещественные числа представляются в памяти в экспоненциальной форме записи (т. е. состоят из двух частей: мантиссы и экспоненты, в каждой из которых есть целое число).
Currency – предназначен для хранения информации о деньгах. Все вычисления компилятор для вещественных переменных осуществляет в виде типа Extended, все остальные типы получает из Extended путем его усечения (применяются, как правило, для экономии памяти).
Встроенные функции для работы с вещественными числами:
Abs(x) – модуль (x);
Cos(x) – косинус (x);
Sin(x) – синус (x);
Exp(x) – экспонента;
Pi – возвращает число π;
Sqrt(x) – квадратный корень из (x);
Ceil(x) – возвращает наименьшее целое большее или равно (x);
Floar(x) – возвращает наибольшее целое меньшее или равное (x);
Frac(x) – возвращает дробную часть числа типа Extended;
Int(x) – возвращает целую часть числа (округляет);
IntPower(x, y) – возводит число (x) в степень (y);
Ldxep(x) – ex*π;
Ln(n) – натуральный логарифм числа (x);
Ln(xp1) - Ln(x+1) – натуральный логарифм от числа (x+1);
Log10(x) – 10-ный логарифм числа (x);
Log2(x) – 2-ичный логарифм числа (x);
LogN(n, x) - Lognx;
max(x, y) – нахождение максимального;
min(x, y) – нахождение минимального;
Power(x, y) – возводит в степень (y) число (x) (с дробными степенями);
Randomize – включает генератор случайных чисел;
Trunk(x) – отсекает дробную часть;
Rondom(x) - (x) – целое число (0..x);
Round(x) – округляет вещественное значение до ближайшего целого (результат имеет тип Int64; если число ровно по середине, то результат всегда четный);
Random – возвращает случайное вещественное число (0..1);
Название: | Диапазон: | Количество значений 10-ных чисел: | Размер (в битах): |
Real 48 Single Real (Double) Extended Currency | От 2,9*10-19 до 1,7*1038 От 1,5*10-45 до 3,4*1038 От 5,0*10-324 до 1,7*10308 От 3,6*10-4951 до 1,1*104938 От -9*1014,### до 9*1014,### | 10-12 7-8 15-16 19-20 19-20 | 32 48 69 80 64 |
II. Структурированные типы:
Любая переменная структурированного типа всегда имеет несколько компонентов. Структурированные типы могут быть вложенными. Ограничений на суммарную длину структурированного типа не накладываются. Компилятор OPascal автоматически компактно хранит все структуры в памяти.
1). Массивы.
Массивы бывают двух типов: статические и динамические.
Ø Статические.
Статические имеют фиксированный размер и тип, которые остаются неизменными в течение хода выполнения программы, а динамические – могут изменить свой тип и размер в процессе выполнения программы. Статические, во многом похожи на массивы в языке QBasic. Все компоненты имеют одинаковый тип, доступ к каждому компоненту осуществляется по его уникальному индексу.
Синтаксис записи:
Type
Имя типа = array [диапазон 1, [диапазон 2]…] of тип;
Пример:
Type
Vector = array [1..10] of byte;
Mass1 = array [2..4] of extended;
Matrix = array [0..5,1..20] of int 64;
Var
a, b:vector;
x:matrix;
z:array [1..15] of bualean;
Если массивы имеют одинаковый тип a=b, то значение массива b переходит в массив a.
a:=b
Все массивы хранятся в памяти линейно. Для обращения к элементу массива используют: [ ].
a[3]:=2;
x[0.17]:=a[2]/4;
Ø Динамические массивы.
Динамический массив может менять в ходе выполнения программы размер.
Он объявляется следующим образом:
Var
Имя: array of тип;
Многомерный динамический массив задается аналогично статическому, но без указания границы:
Var
A: array of byte
Задание размера массива и выделение для него памяти выполняется с помощью процедуры: SetLenght (имя, длина) длина – выражение целого типа. После выполнения этой процедуры выделяется память под этот массив и его индекс может измениться от 0 до -1.
SetLenght – может быть вызвана произвольное количество раз, каждый вызов приводит к изменению длины массива, при этом содержимое массива сохраняется.
Если, при вызове, длинна массива увеличивается, то добавленные элементы заполняются произвольными значениями. Если уменьшается, то содержимое отброшенных элементов теряется:
Var
A: array of array of int64;
Begin
Set length (a; s);
a[1]:=1; [???]
a[2]:=2; [312]
a[3]:=3;
SetLenght (a;2); [31]
SetLenght (a;3); [31?]
Организуется с использованием динамической памяти массива.
Поскольку динамические массивы являются динамической структурой данных, то по окончанию работы с ним необходимо удалить их из памяти компьютера.
Существует три способа удаления динамической памяти из системы:
1). Установка длинны динамического массива в (0)
SetLenght (имя; 0);
2). Присвоение значению длины массива nil:
имя:= nil;
3). Присвоение имени finalize (имя);
В OPascal для работы с динамическими массивами предусмотрены встроенные функции:
Copy (имя, начальный индекс, количество элементов) – восстановление начального имени;
High – возвращает максимальное значение индекса массива;
Low – возвращает букву названия массива.
Многомерный динамический массив - представляется как массив из массивов:
Var
A: array of array of byte
Begin
Set lenght (a; 4);
Set lenght (a [0]; 3); [???]
Set lenght (a [1]; 1); [?]
Set lenght (a[2];2); [??]
Set lenght (a[3];5); [?????]
2). Записи:
Запись – структура данных, состоящая из фиксированного числа компонентов (полей записи). В отличие от массива, компоненты поля могут быть разного типа, каждое поле записи именуется.
Описание структуры записи происходит в разделе (type).
Type
Имя = record;
Список полей;
End;
Список полей представляет собой последовательность разделов записи следующего вида:
Имя1: type1;
Имя2: type2;
Имя3: type3;
Type
Student = record
FIO: string;
Gr: word;
Pol: Boolean;
Gruppa: string [10];
Rost: real;
Ves: real;
End;
...
Var
A: student;
Begin
A. FIO: ‘’;
A. Gr: 1987;
A. Pol: true;
...
With A do begin
Rost:= 180.5;
Ves:=98.2;
End;
… Доступ к каждому из компонентов записи осуществляется с использованием спецификатора.
Структура записи спецификатора:
спецификатор 1. [спецификатор 2 ...] идентификатор.
В данном случае спецификатором будет переменная типа (student), а идентификатором (pole).
… Для упрощения доступа к полям записи используются оператор:
With <переменная> do <оператор>
Записи с вариантными полями.
Вариантная запись содержит поля, предназначенные для различных типов данных, причем, в одном экземпляре записи никогда не используются все такие поля.
Модифицируем запись студент для хранения информации о местных студентах и приезжих, т. е. проживающих о общежитии:
Местные: улица, дом, квартира.
Приезжие: номер комнаты.
Type
Student = record;
FIO: string;
Gr: word;
Pol: Boolean;
Gpuppa: string [10];
Rost: real;
Ves: real;
Case mesting: Boolean of
True: (ul: string [20]; dom: string [5]; kv: word);
Fals: (N_Komn: word);
End;
End;
Часть записи, следующая после ключевого слова (case) содержит вариантную часть объявления. Вариантная часть обязательно должна располагаться после объявления всех остальных полей.
В памяти, запись хранится линейно.
Синтаксис записи:
Имя = record
Список полей:
Case <поле переключатель> : <тип> of
Вариант 1:(поле1: тип1;… полеN: типN);
End;
Тип поля переключателя обязательно должен быть порядковым. В памяти под запись с вариантными полями компилятор выделяет столько свободного места, сколько необходимо для хранения записи самым длинным из возможных вариантов. Из программы возможен доступ к записи любого варианта, в не зависимости от значения поля-переключателя.
| GR | Gruppa | Pol | Rost | Ves | Mesting |
| № дома | № квартиры |


|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 |


