Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
программирование 2 семестр 1 курс.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
982.53 Кб
Скачать

Ближний вызов.

Ближний вызов устанавливается :

  1. По умолчанию , когда не указанна директива Far и {$F+}

  2. Является явной отметкой и ближнем вызове подпрограмм директивы Near

Синтаксис записи

Procedure p (k:char );near ;

Begin

…….

End;

Или

{$F+}

…..

Ближняя модель вызова предала , что подпрограмма будет вызываться только в пределах одного сегмента кода , который выделяется основной программой и каждому используемому модулю . в этом случае с подпрограммой связан лишь адрес смещения относительно сегмента . Ближняя модель экономит память и некоторое время при вызове подпрограммы . Экономия памяти наблюдается при отсутствии ключей компиляции

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

В качестве не типизированных параметров выступает параметры – переменных , поскольку они в отличии от параметров – значения передаются в подпрограммах по ссылке . При описании указывается только имя параметров . данные параметры используются в случае , когда тип передаваемых данных не известен . Если нормальные параметры являются не типизированными параметрами переменных то соответствующие ему фактический параметр может представлять собой любую ссылку на переменную независимую от ее типа . Не типизированный параметр является несовместимым с переменный каких – либо типов до тех пор , пока ему не будет присвоен определенный тип , то есть в обращение к такому параметру внутри подпрограммы выполняется функция приведенных типов .

Синтаксис записи

Procedure p (var x,y,z :word );

P rocedure P1 ( m, c: char );

Определен не верно , так как это параметр –значения .

Обычно не типизированные параметры используются при работе с областями памяти.

Примеры использования : процедуры сравнения областей памяти разного размера .

Type

Vector = array [1..5]of integer;

Point= record

X,y:integer ;

End;

Const

Vec1 :vector = (1,2,3,4,5);

Vec2 :vector = (1,2,3,1,2);

P:point = (x:1;y:1);

Var

N:integer ;

{$R-}

Function egual (var s,d,size :word):Boolean;

Type

Integers = array [0..1] of integer ;

Var

N:integer ;

Begin

N:=0 ;

While (n<> size ) and (integers(d)[n]=integers (s)[d]) do

Inc (n);

Egual=n=size ;

End;

Begin

N:=10;

Writeln(egual (vec1,vec2,size of (vector)));

Writeln (egual (vec1,vec2,3));

Writeln(egual (vec1,vec2, size of (integer)*n));

Writeln(egual (vec1,vec2[4],2));

Writeln(egual (vec1,p,2));

End.

Пример : Инициализации переменных , при этом вместе со значением в качестве параметра передается функция

Type

Type = (tbyte ,tword,tchar);

Procedure init (var x,t:type ; v:word);

Begin

Case t of

Tbyte :byte (x):=v;

Tword:word(x):=v;

Tchar:char (x):=v;

End;

Часто не типизированный параметр используется при работ со стандартными процедурами , например :

Move

BlockWrite

BlockRead

FillChar

FillChar (var V ,nbyte:word ;z:byte [char]);

Данная процедура заполняет участок памяти , на первый элемент который указывает параметр V , размер передается второму параметру . Третий параметр указывает значение , которое будет помещено в память .

Пример .

Var

S:string[7];

.

Fillchar(s, size of (s), ‘a’);

S[]|___________________________________

Множества и перечислимые типы не рекомендованы, передача через не типизированные параметры, так как они имеют особое машинное представление .