Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4 основи програмування книга.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.77 Mб
Скачать

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

Якщо А – змінна типу Student із приклада 11.1, її значення можна змінити групою операторів:

A.F1 := ' Іванов '; A.F2 := ' Ілля '; A.F3 := 'Інокентійович ';

A.Day := 14; A.Month := 9; A.Year := 1976;

A.StudDoc := 123;

Приведені вище позначення можна скоротити за допомогою оператора приєднання. Заголовок цього оператора відкриває область дії “внутрішніх” імен полів запису, які можуть бути використані як імена змінних.

Оператор приєднання має вид:

With <змінна-запис > {,<змінна-запис >} do < оператор >

Приклад 11.5

with A do begin

F1 := ' Іванов ';

F2 := ' Ілля ';

F3 := ' Інокентійович ';

Day := 14;

Month := 9;

Year := 1986;

StudDoc := 123;

end { оператора with }

Більш того, в групі операторів обробки змінної StudGroup[i] (приклад 11.3) запис може бути сформований наступним чином:

With StudGroup[3], StudName do begin

Name1 := ' Івченко ';

Name2 := ' Інна ';

Name3 := ' Іванівна ';

BirthDay.Day := 14;

BirthDay.Month := 9;

BirthDay.Year := 1976;

StudDoc := 123

end;

Таким чином, оператор виду

With r1,...,rn do S

еквівалентний оператору

With r1 do with r2 ... with rn do S.

Зауваження: В операторі With R do S вираз R не повинен містити змінні, що змінюються в операторі S. Наприклад, оператор With S[j] do j := j+1 недопустимий!

Приклад 11.6. Як приклад розглянемо програму, яка оброблює масив записів, кожен з яких містить відомості про людину, необхідні для зв’язка з ним по пошті. Обробка запису полягає у пошуку всіх осіб, які народилися в даний день.

Запис має вид:

Повне ім’я (Прізвище Ім’я по батькові)

День народження (День, Місяць, Рік)

Адреса (Індекс, Країна, Місто, Вулиця, № будинку, № квартири)

Program Adress;

Const

n = 100;

Type

{ описання типів Name, FullName, Date із приклада 3 }

Mail = Record

Index : LongInt; { довге (4 байта) ціле число }

Country,

Sity,

Street : Name;

House,

Flat : Integer

end;

Person = Record

Who : FullName;

When : Date;

Where : Mail

end;

Var

Today : Date;

Department : array [1..N] of Person;

i : Integer;

Function theSame(var X : Date, var Y : Person): Boolean;

Begin

With Y, When do

theSame := (X.Day = Day) and (X.Month = Month)

End;

{Procedure ReadDepartment - введення масиву записів}

Procedure ReadDate(var Z : Date);

Begin

With Z do Read(Day, Month)

End;

Procedure WriteMail(var X : Person);

Begin

With X, Who do Writeln(Name1, ' ', Name2, ' ', Name3);

With X, Where do begin

Writeln(Street, ' ',House, ' ', Flat);

Writeln(Index, ' ', Sity, ' ', Country);

end

End;

Begin

ReadDepartment; { введення масиву записів}

ReadDate(Today);

For i := 1 to N do

if theSame(Today, Department[i])

then WriteMail(Department[i])

End;