Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
программирование 2 семестр 1 курс.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
523.82 Кб
Скачать

Массивы записей

Возможно определить массив или массивы , элементами которого будут записи.

Пример : Массив . каждый элемент которого несет информацию о точке (место положение цвет ):

Type

Tpoint=record

x,y:byte;

color:byte;

end;

var

mas_point : array [1..10] of Tpoint;

{Пусть требуется заполнить следующие элементы этого массива:}

Randomize;

For I:=1 to 10 do

Begin

Mas_point[i].x:=Random(79)+1;

Mas_point[i].y:=random(25)+1;

Mac_point[i].color:=random(16);

End;

Записи со стартовыми значениями .

Стартовые значения устанавливаются в разделе определения констант.

Синтаксис: … =(«Имя поля1»: «значение1»; «Имя поля2»: «значение2»;).

Примеры:

Type

Tpoint=record

x,y,color:byte;

end;

const

point:Tpoint=(x:10;y:10;color:2;);

mas_point :array[1..3] of Tpoin =((x:2;y:3;color:5;), (x:12;y:6;color:10;), (x:25;y:30;color:10;));

var

i:byte;

begin

clrscr;

for i:=1 to 3 do

begin

gotoxy(mas_point[i].x,mas_point[i].y);

TextColor(mas_point[i].color);

Write(‘*’);

end;

Вложенные записи

Записи могут иметь вложенную структуру . такую которую одна запись выступает составной частью другой , находясь при этом на более низком уровне подчиненности.

Пример:

Type

Name_rec=record

First: string;

last: sting;

End;

Adres=record

Name:name_rec;

Homenum:byte;

streetName:string[20];

End;

Var

S:adres;

В этом случае запись name- вложение в запись s , находясь на более низком уровне иерархии.

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

Readln (s.first); Readln (s.homeum);

Вложенные записи можно строить и в разделе описания переменных .

Var

S:record

Name:record

First: string;

last: sting;

End;

homeNum:byte;

streetName:string[20];

end;

Оператор присоединения.

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

Синтаксис записи данного оператора :

With «префикс » do

«оператор»;

Оператор может быть простым и составным . Префикс представляет собой обозначение одного или нескольких уровней записей, то есть он указывает полное имя записи. Указанный в операторе with префикс будет автоматически присоединять ко всем именам полей записи соответствующих префиксу и присутствующих в теле оператора with .

Пример :

Type

Trec=record

I:integer;

F:real;

End;

Var

Rec1,Rec2:Trec;

:

Rec1.i:=2;

Rec1.f:=5,5;

Или

With Rec1 do

Begin

I:=2;

F:=5,5;

End;

При использование with для доступа к вложенным записям префикс-список имен записей , разделенных запятыми или точками , при этом порядок перечисление имен должен соответствовать уровню вложенности .

Перечисление имен через запятую является мене строгим поскольку

Внутри оператора with возможно обращаться к полям всех уровней в соответствии с перечислением. Перечисление через точку позволяет обратиться только к одному уровню соответствующему перечислению (нижнему уровню иерархии ) .

  1. With S,name do

Begin

First:=’Петров’;

last:=’Петр’;

HomeName:=255;

End;

  1. With S.name do

Begin

First:=’Петров’;

last:=’Петр’;

HomeName:=255;

End;

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

Пример:

Var

Rec1:record

I,j:byte;

Rec2:record

I,k:byte;

End;

End;

..

With Rec1,Rec2 do

Begin

I:=20;

J:=5;

K:=5

End;

При обращении к одноименным полям записи различных уровней вложенности в теле оператора with при указание имен через запятую приоритет выше у более низкого уровня .

Согласованность имен полей записи с именами переменных программы .

Имена полей одной или нескольких записей могут совпадать с именами других записей или именами переменных основной программы отсюда следует , что при использование оператора with работа с такими одноименными данными может привести к не определенностям . Присваивание z1:=z2 не выполнится в случае отсутствия совместимости :

  1. Если одна из переменных типа записи определена через тип , а другая в разделе var

  2. Если каждая переменная , описана в разделе Var отдельным объявлением , даже если точно идентичные поля

Пример :

Var

z1:record

..

End;

z2:record

..

End;

.

z1:=z2;