Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции Турбо Паскаль.doc
Скачиваний:
17
Добавлен:
22.03.2016
Размер:
307.71 Кб
Скачать

Оператор with

Обращение к компонентам записи можно упростить, если воспользоваться оператором присоединения with. Он позволяет вывести имена записи в заголовок и затем оперировать не составными именами (<запись>, <поле>), а просто именами полей.

Оператор with имеет вид:

With <имя записи> do

<операторы, содержащие имена полей записи>;

Например:

Занесение сведений о книге К. Йенсен, Н. Вирт «Паскаль» в запись book м. б. сделана следующим образом:

Program ab;

Type

Book = record;

Ch: integer; {шифр}

Author: packed array [1..18] of char; {автор}

Title: packed array [1…35] of char; {название}

Publish: packed array [1….20] of char; {издательство}

Year:1900….1996; {год издания}

End;

Var

Textbook: book;

Begin

With textbook do

Begin

Ch:= 2212;

Author:= ‘К. Йнсен, Н. Вирт’;

Title:= ‘Паскаль’;

Publish:= ‘Финансы и статистика’;

Year:= 1982;

End;

End.

Пример:

В библиотеке хранится до 2000 книг, каждая из которых имеет автора, название, издательство, год издания. Проверить, есть ли в библиотеке книги К. Йенсен, Н. Вирт «Паскаль». Если данной книги нет, то включить ее в состав библиотеки. Считаем, что алфавитный каталог составлен по фамилиям авторов.

Program Search;

Label 1, 2;

Const

Amount = 2000; {количество книг}

Type

Book = record

Author: packed array [1..18] of char; {автор}

Title: packed array [1…35] of char; {название}

Publish: packed array [1…20] of char; {издательство}

Year: 1990….1996; {год издания}

End;

Library = array [1…amount] of book ; {библиотека}

Var

Ib, kb: book;

Catalog: library;

I, n : 1….amount;

K: integer;

Begin

For i:=1 to amount do

Begin

For k:= 1 to 18 do read (kb. Author [k]); {ввод автора}

For k:= 1 to 35 do read (kb. Titly [k]); {ввод названия}

For k:= 1 to 20 do read (kb. Title [k]); {ввод издательства}

Read (kb. Year); {ввод года издания}

Readln;

Catalog [i]:= kb; {сформированная запись о книге вводится в каталог}

End; {for i}

With ib do

Begin

Author:= ‘Йнсен К., Вирт Н.’;

Title:= ‘Паскаль’;

Publish:= ‘Финансы и статистика’;

Year:= 1982;

End; {Сведения об искомой книге}

For i:= 1 to amount do {поле книги в каталоге}

If catalog [i].author > = ib.author then

Begin

If catalog [i].author = ib.author then

Begin

Writeln (I, ‘ – номер книги в каталоге’);

Goto 1; {exit} или {Halt}

End; {then}

Else

Begin

N:=I; {Место куда нужно включать книгу}

Goto2;

End; {else}

End; {then}

Writeln (‘Данной книги в каталоге нет, введем ее вместо последней книги’);

N:=amount;

Catalog [n]:= ib;

Goto 1; {exit} {halt}

For i:= amount downto n+1 do

Catalog [i]:= catalog[i-1]; {сдвиг содержимого каталога}

Catalog [n]:= ib; {включение книги в каталог}

For i:=1 to amount do {распечатка каталога}

Begin

Bb:=catalog [i];

With kb do

Begin

Writeln (author);

Writeln (title);

Writeln (publish);

Writeln (year);

Writeln;

End; {with}

End;

End.

Оператор With может иметь вложенную структуру с любой степенью вложенности.

Например:

Var

X: record

A: record

B: record

C: real

D: integer

End; {b}

E: bolean;

end; {x}

f: char;

end; {x}

Пусть с необходимо присвоить значение 17.3. Тогда обращение к полю с, которое записывается составным именем x. a. b. c. может быть записано оператором присоединения with.

With x do

With a do

With b do

C:= 17.3;

Или with x, a, b do c:= 17.3;

Если необходимо задать c:= 17.3; d:= 18; c:= true и f = ‘Q’, то это будет выглядеть так:

With x do

Begin

F:=’Q’;

With a do

Begin

C:= true;

With b do

Begin

C:= 17.3;

D:= 18;

End; {with b}

End; {with a}

End. {with x}