- •Программирование на Турбо Паскале
- •Вещественный тип данных
- •Символы и строки.
- •Операции и их приоритет
- •Процедура ввода
- •Процедура вывода
- •Оператор варианта
- •Процедуры и функции
- •Массивы
- •Упакованные массивы
- •Множества
- •Файловые типы данных
- •Операции ввода-вывода
- •Перемещения по файлу
- •Специальные операции
- •Работа с текстовыми файлами
- •Комбинированный тип данных
- •Оператор with
- •Переменная структура записи
Оператор 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}