Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
АЯП лекции.doc
Скачиваний:
12
Добавлен:
03.12.2018
Размер:
634.37 Кб
Скачать

Особенности передачи структурированных данных подпрограммы.

1) Можно не использовать формальные параметры для передачи структурированных типов. В подпрограмме используются глобальные переменные структурированного типа. Но универсальность подпрограммы тогда отсутствует, т.е. подпрограмма будет работать только со строго определенной структурой.

2) Паскаль – язык строгих правил. Компилятор считает два одинаково описанных тематические и синтаксические переменные различными, поэтому явное описано структурированного типа формального параметра запрещено. Для обхода данной неприятности прибегают к следующему приему: сначала в разделе типов определяют тип данной структуры, а затем используют имя этого определенного типа при описании глобальных и формальных переменных, на место которых в дальнейшем при вызове подпрограммы будет поставлена эта глобальная переменная. Данный прием не относится к файловым структурам. При обработке файлов в подпрограмме используют глобальную переменную файлового типа. А связь этой переменной с конкретным файлом определяется в подпрограмме, поэтому подпрограмма не теряет своей универсальности.

3) Второй пункт не до конца позволяет универсализировать подпрограмму с точки зрения обработки массивов. При обработке массивов используется два приема: а) если размерности массивов известны, то тип массива описывается как самый большой массив, и в его рамках обрабатываются более мелкие массивы; вводится пороговое число, определяющее границы обработки; б) использование в качестве формального параметра открытого массива. Открытый массив нельзя использовать в качестве описательной структуры глобальной или локальной переменной, т.е. открытый массив используется в качестве описательной структуры формальной переменной.

Пример. Отсортировать строки матрицы по возрастанию. Использовать для сортировки подпрограммы сортировки одномерного массива.

type s=array [1..6] of real;

var mt:array [1..6] of s;

p,k:integer;

procedure sort (var st=s);

v

C=0

ar v:real; c:integer;

begin

repeat

c:=0;

for p:=1 to 5 do

if st[p] > st[p+1] then begin v:=st[p];

st[p]:=st[p+1]; st[p]:=v;

c

V:=ST[p]

ST[p]:=ST[p+1]

C:=c+1

:=c+1;

end;

until c=0;

end;

begin writeln(‘’);

for k:=1 to 6 do

for p:=1 to 6 do

read(mt[k,p]);

for k:=1 to 6 do

sort(mt[k]);

for k:=1 to 6 do begin

for p:=1 to 6 do write (mt[k,p]:7:2);

writeln;

end;end.

Пример. Используя подпрограмму нахождения минимума, определить минимальное значение массивов A(6), B(8), C(12).

type mas=array[1..12] of integer;

var a,b,c:mas; p:integer;

function min (m:mas; n:integer): integer;

var mn:integer;

begin mn:=m[1]; for p:=1 to n do

if mn > m[p] then mn:=m[p];

min:=mn;

end;

begin writeln (‘’);

for p:=1 to 6 do read (a[p]);

for p:=1 to 8 do read (b[p]);

for p:=1 to 12 do read (c[p]);

writeln(‘min A= ‘,min(a,6));

writeln(‘min B= ‘,min(b,8));

writeln(‘min C= ‘,min(c,12));

end.

Опережающие описания.

Паскаль – язык строгих правил. Основное правило: все, что используется, должно быть описано до использования. Поэтому алгоритмы, включающие в себя циклические ссылки подпрограмм друг на друга (циклическая ссылка – если процедура А в своем теле вызывает процедуру В, а В вызывает А) невозможно. Для решения данной проблемы в Паскаль было введено опережающее описание. Структурно это выглядит так:

PROCEDURE A;

FORWARD;

PROCEDURE B;

тело;

PROCEDURE A;

тело;

Служебное слово FORWARD указывает компилятору, что подпрограмму, заголовок которой расположен над этим словом, необходимо искать далее по тексту программы.

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