Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ekzamenatsionnye_bilety__Otvety_na_nikh.doc
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
268.29 Кб
Скачать
  1. Массивы и записи как формальные параметры процедур и функций

Открытые параметры-массивы дают возможность передавать в подпрограмму массивы, размер которых не фиксируется в объявлении подпрограммы. Этот механизм позволяет создавать максимально гибкие и универсальные подпрограммы для обработки массивов произвольного размера.

Синтаксис описания открытых параметров-массивов:

ИмяПодпрограммы ( VAR P : array of ТипЭлементов );

Это единственное исключение из правила, согласно которому типы формальных параметров в заголовках подпрограмм могут задаваться только посредством идентификаторов (см. замечание выше). Подпрограмма, содержащая открытый массив в списке своих формальных параметров, может быть вызвана с массивом ЛЮБОГО размера (типы элементов массивов из формального и фактического параметров должны, естественно, совпадать). Заметим, что в качетсве открытых массивов допускаются ТОЛЬКО одномерные массивы [1].

Реальные границы переданного в подпрограмму массива можно определить используя две функции Low и High. Эти функции предназначены для определения граничных значений типов и переменных. В данном случае функция Low будет всегда возвращать 0, а функция High - верхнее значение индекса равное (n-1), где n-число элементов в переданном массиве.

type tArr =array [ 1..100 ] of real; function Max ( A: tArr ) : real;

При передаче параметра по ссылке в подпрограмму передается адрес фактического параметра. Поэтому если параметр занимает много памяти (массив, запись), то обычно он также передается по ссылке. В результате в процедуру передается не сам параметр, а его адрес, что экономит память и время работы. При этом если параметр меняется внутри подпрограммы, то он передается с ключевым словом var, если не меняется - с ключевым словом const:

Например:

type    Person = record     name: string;     age,height,weight: integer;   end;

procedure Print(const p: Person); begin   write(p.name,' ',p.age,' ',p.height,' ',p.weight); end;

procedure IncAge(var p: Person); begin   Inc(p.age); end;

  1. Имена процедур и функций как формальные параметры. Процедурный тип

Процедурные типы

Процедурные типы -

Основное назначение этих типов - дать программисту гибкие

средства передачи функций и процедур в качестве фактических параметров

обращения к другим процедурам и функциям.

Для объявления процедурного типа используется заголовок процедур, в

котором опускается ее имя, например:

type

Proc = Procedure (a, b, с : real; Var d : real);

Proc2 = Procedure (var a, b);

РгосЗ = Procedure;

В программе могут быть объявлены переменные процедурных типов, например,

так:

var

р1 : Proc;

ар : array [1..N] of Proc2;

Переменным процедурных типов допускается присваивать в качестве значений

имена соответствующих подпрограмм. После такого присваивания имя переменной

становится синонимом имени подпрограммы.

В отличие от стандартного Паскаля, в Турбо Паскале разрешается

использовать в передаваемой процедуре как параметры-значения, так и

параметры-переменные

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

type    procI = procedure(i: integer);   funI = function: integer;

Процедурной переменной можно присвоить процедуру или функцию с совместимым типом

Обычно процедурные переменные передаются как параметры для реализации обратного вызова

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]