Программа на Delphi

Запись-переменная. Синтаксис записи-переменной:

<имя записи> : Record

<имя поля 1> : <тип>; <имя поля 2> : <тип>; . <имя поля N> : <тип>; <вариантная часть > End;

т.е. синтаксисы переменной и типа отличаются одним символом (":" и "=").

Пример:

Type tMass : Array [1 2, 1 50] of Real;

tRec: Record Name : String [10]; Mass2: tMass; End;

Var J: Integer; S: String[70]; F,Gri : Record a,b,c: Integer; k: Array [1 10] of String [60]; z: tMass; r: tRec; End;

В секции Var описаны две простые переменные J и S и две записи F и Gri, имеющих одинаковую, но достаточно сложную структуру:

  • первых три поля записей F и Gri имеют имена a,b,c и тип Integer;
  • поле k представляет собой одномерный строковый массив из 10 элементов;
  • поле z имеет тип, описанный в секции Type как двумерный вещественный массив, в котором первый индекс может изменяться в диапазоне 1 2, а второй индекс – в диапазоне 1 50;
  • поле r в свою очередь само является записью, поля которой описаны типом tRec в секции Type.

Доступ к полям записей. Переменная, представляющая поле, конструируется из имени записи и поля, отделенного друг от друга десятичной точкой. Такая составная переменная называется квалификационной.

Примеры квалификационных полей вышеприведенных записей:

F.a Gri.a F.k[6] Gri.z [2, 34] F.r.Name F.r.Mass2[1, 50]

Примеры операторов присваивания с участием полей записей:

S := 'Иванов Иван Петрович'; J := 123; F.a := J + 9; Gri.a := ( F.a + J ) * ( F.c + F.b - Gri.c); Gri.a := ( F.a + J ) * ( F.c + F.b - Gri.c); F.k [1] := F.z [2,30]; Gri.r.Name := 'Студент ' + F.k [8]; Gri.a := 12 * (Gri.a + Gri.b + Gri.c);

Доступ к полям записей с помощью оператора With. Для упрощения обращения к полям одной и той же записи можно использовать оператор With.

Пример:

With Gri do

Begin

a:= 12 * (a + b + c + F.a);

b:= 64 * ( b - c);

End;

Эти операторы выполняют те же операции, что и операторы

Gri.a:= 12 * (Gri.a + Gri.b + Gri.c + F.a);

Gri.b:= 64 * (Gri.b - Gri.c);

7.3. Множественные типы

Множество – это совокупность однотипных элементов. Во многом оно похоже на типизованную константу, однако имеет от него принципиальное отличие. Это отличие состоит в том, что значениями множества являются все его допустимые подмножества.

Как и в массивах, следует различать множество-тип и множество-переменную.

Множество-тип. Синтаксис множества-типа:

<имя множества> = Set of <базовый тип >;

Пример:

Type

TSomeInts = 1 250; TIntSet = set of TSomeInts;

создает тип множества с именем TIintSet, которое содержит множество целых чисел в диапазоне от 1 до 250. Это же множество могло быть описано явно:

type TIntSet = set of 1 250;

Множество-переменная. Синтаксис множества-переменной:

<имя множества> : Set of <базовый тип >;

В соответствии с вышеописанными типами можно объявить множества:

Var Set1, Set2: TIntSet;

а затем в операторной части задать эти множества:

.

Set1 := [1, 3, 5, 7, 9]; Set2 := [2, 4, 6, 8, 10];

Можно объявить множество явно, перечислив его элементы:

Var

MySet1 : set of 'a' 'z';

MySet2 : set of Byte

MySet3 : set of (Club, Diamond, Heart, Spade)

MySet4 : set of Char;

.

MySet 1:= ['a','b','c']; {оператор определения множества}

Операции над множествами. Допустимые операции над множествами приведены в следующей табл. 6:

Таблица 6

Опера-ция

Наименование операции

Тип операндов

Тип результата

Пример

+

*

<=

>=

=

<>

in

Объединение

Вычитание

Пересечение

Не меньше

Не больше

Равенство

Неравенство

Принадлежание

set

set

set

set

set

set

set

элемент set

set

set

set

boolean

boolean

boolean

boolean

boolean

Set1 + Set2

S - T

S * T

Q <= MySet

S1 >= S2

S2 = MySet

MySet <> S1

A in Set1

Объединение, вычитание и пересечение множеств.

Результатом любой из операций будет также множество.

Пример:

Var

S1, S2,S3 : set of Byte;

.

S1:= [1, 2 , 3, 4]; {оператор определения множества}

S2:= [3, 4, 5, 6, 78]; {оператор определения множества}

S3:= S1 + S2; {объединение множеств}

{результат S3 = [1, 2, 3, 4, 5, 6, 78] }

S3:= S2 - S1; {вычитание множеств}

{результат S3 = [1, 2, 5, 6, 78] }

S3:= S2 * S1; {пересечение множеств}

{результат S3 = [3, 4] }

Операции сравнения множеств.

Результатом любой из операций будет логическая константа True (истина) или False (ложь).

Пример:

Var

S1, S2, S3 : set of Byte;

B: boolean;

.

S1:= [3, 4]; {оператор определения множества}

S2:= [1, 3, 4]; {оператор определения множества}

S3:= [3, 4, 5, 6, 78]; {оператор определения множества}

B:= S1 <= S3; {True, т. к. S1 является подмножеством S3}

B:= S3 >= S2; {False, т. к. S2 не является подмножеством S2}

B:= S3 = S2; {False, т. к. мн-ва S2 и S3 не равны друг другу }

B:= S3 <> S2; {True, т. к. мн-ва S2 и S3 не равны друг другу }

Проверка вхождения элемента во множество. Результатом операции in будет логическая константа True (истина) или False (ложь). Пример:

Var

S1 : set of Integer;

B: boolean;

.

S1:= [3, 4, 18 178, 3101, 4427]; {оператор определения множества}

B:= ( 4 in S1); {True, т. к. 4 является элементом множества S1}

B:= (200 in S1); {False, т. к. 200 не является элементом S1}

7.4. Файловые типы

В языке Object Pascal есть три типа файлов:

  • текстовые файлы,
  • файлы с типом,
  • файлы без типа.

Связь с файлом может быть установлена через файловую переменную, которая после описания, но до использования в программе должна быть связана с внешним файлом с помощью процедуры AssignFile.

Текстовой файл – это последовательность символьных строк перемен-ной длины. Всякая такая строка завершается маркером конца строки CR/LF. Текстовые файлы можно обрабатывать только последовательно. Ввод и вывод нельзя производить для открытого файла, используя одну файловую переменную. Текстовой файл имеет тип TextFile, или просто Text. Пример описания файловой переменной текстового типа:


Страница: