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

Вложенные подпрограммы

Число уравнений вложенности может быть добавлено большим , но на практике не превышает уравнений вложенности подпрограммы относится и охватывающий её подпрограммы точно так же , как охватывает подпрограмму относящийся к основной программе . Вложенная подпрограмма могут вызываться только внутри охватывающий . Для вложенной подпрограммы глобальные переменные считается переменной охватывающую подпрограмму все глобальный переменные основной программы .

Особенности :

Переменные – индексы For-циклов должны быть описаны во вложенной подпрограмме , даже если одноименные переменные описаны в охватывающей подпрограмме . Область меток является локальной , то есть нельзя планировать переходы с помощью оператора Go to из вложенной процедуры в охватывающей , а так же в основном блоке программы , или из основного блока процедуры .

Структура вложенности

Var

«глобальные переменные »

Procedure P1 ( );

«локальные переменные Р1 »;

……….

Procedure P2 ( );

«локальные переменные Р2 »;

……….

Begin

«тело Р2»;

…….

End;

Begin

«тело Р2»;

…….

«вызов Р2»;

End;

Begin

……….

«вызов Р1»;

…….

End.

Пример

Type

Massiv_1 =Array [1..5] of word ;

Cost

A: Massiv_1= (1,2,3,4,5);

B: Massiv_1=(5,6,7,8,9);

Procedure Def_ Massiv _1(Var p,p1: Massiv_1;n:byte);

Var

I:byte;

K:string;

Procedure Out (p: Massiv_1);

Var

I:byte ;

Begin

Write(k,’ ’);

For i:= 1 to 5 do

Write (p[i]:4);

Writeln;

End;

Begin

K:=’массив ’;

For i:=1 to 5 do

Begin

P[i]:=p[i]+n;

P1[i]:=p1[i]+n;

End;

Out (a );

Out (b);

End;

Begin

Def _ Massiv_1(a,b,1);

Out (a);

Readln ;

End.

Подпрограмма Функции без побочного эффекта .

Определяет и выводит гласные буквы латинского алфавита

Содержащиеся в введенных строках.

Uses crt ;

Type

Tstring=string[100];

Const

Mn_glas : set of char = [‘a’,’e’,’u’,’o’,’i’];

Function glass_str (str_x:tstring):Boolean;

Var

I:byte ;

Begin

Glas_str :=false ;

For i:=to length (str_x) do

If str _x[i] in mn_glas then

Begin

Glas_str:=true ;

Break;

End;

End;

Var

Str_1,str_2:tstring;

Begin

Clrscr;

Write(‘Строка 1 : ’);

Readln(str_1);

Write(‘Строка 2 : ’);

Readln(str_2);

Writeln(‘ Гласные в строке 1 ’, glass_str(str_1));

Writeln(‘ Гласные в строке 2 ’, glass_str(str_2));

Readkey;

End.

Лекция №5

Подпрограммы. Дальний и ближний вызов подпрограмм. Опережающее описание подпрограмм. Рекурсивные подпрограммы.

Дальний и ближний вызов подпрограмм . Дальний вызов

В этом случае всегда за заголовком подпрограммы следует директива far.синтаксис записи

Procedure p (k:char );far;

Begin

…….

End;

При таком определении компилятор создает код подпрограммы , который рассчитан на дальнюю модель вызова , что предполагает вызов подпрограммы , из любого сегмента кода . Поэтому в этом случае с подпрограммами связанный полный адрес , состоящий из адреса сегмента и адреса смещения . Дальний вызов в основном используется при передачи функциональных или процедурных параметров при создании оверлейных структур , при замещении системных подпрограмм своими подпрограмма , при написании своих прерываний и т.д. Эквивалент директива Far используются директивы :

1. {$F+} – устанавливается дальняя модель вызова .

2.{$F-} – отключает дальнюю модель вызова .

По умолчанию устанавливается {$F-} . Директиву {$F-} принято устанавливать если перед этим была установлено {$F+}