Иллюстрированный самоучитель по Turbo Pascal

Доступ к элементам коллекций

Чтобы воспользоваться методом ForEach мы должны сначала создать процедуру без параметров, которая осуществляет нужные действия над всеми элементами коллекции, и передать адрес этой процедуры как параметр обращения к ForEach. Например, для того чтобы вывести на экран содержимое всего нашего каталога, мы должны внести в программу следующие изменения. Поместите в раздел описаний следующий текст процедуры PrintAll:

Procedure PrintAll (Book: PCollection);
{Вывод всех элементов коллекции}
Procedure PrintBook(P: PBook); far;
begin
with Р do
PrintItem (Autor, Title, PubHouse, Year, Pages)
end; {PrintBook}
begin {PtintAll}
WriteLn;
Book.ForEach (PrintBook);
end; {PrintAll}

Как видите, эта процедура содержит внутреннюю процедуру PrintBook, в которой осуществляется нужное нам действие – вывод очередного элемента каталога на экран. Этот вывод достигается с помощью вызова уже использованной нами ранее процедуры PrintItem. Таким образом, описание процедуры PrintAll должно следовать после описания PrintItem, чтобы этот вызов был синтаксически правильным. Далее, вывод всех элементов коллекции в процедуре PrintAll осуществляется оператором:

Book. ForEach (PrintBook);

Который обращается к методу TCollection.ForEach, передавая ему в качестве параметра адрес процедуры PrintBook. Чтобы программа успешно выполнила нужные действия, процедура, адрес которой передается методу ForEach, должна удовлетворять двум условиям:

  • она должна быть рассчитана на дальнюю модель вызова (для этих целей мы указали директиву far сразу за заголовком PrintBook);
  • она должна быть локальной для процедуры, в которой реализуется вызов ForEach, именно поэтому мы разместили ее в теле процедуры PrintAll, Осталось в тело главной программы поместить оператор:
PrintAll (BookList);
  • перед оператором уничтожения коллекции.

Если Вы запустите таким образом подготовленную программу на счет, на экран будет выведено:

Джордейн Р.
Справочник программиста персональных компьютеров типа IBM PC,
XT и AT
Финансы и статистика, 1991, 544
Шелдон
Язык Си для профессионалов
И. В. К. – СОФТ, 1991, 383
Скэнлон Л.
Персональные ЭВМ IBM PC и XT. Программирование на языке ассемблера
Радио и связь, 1991, 336
Йенсен К., Вирт Н.
Паскаль. Руководство для пользователя и описание языка
Финансы и статистика, 1982, 151

Все действия по выводу содержимого коллекции реализуются методом ForEach, который для собственно вывода каждого очередного элемента обращается к процедуре PrintBook.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.