1 ПОДПРОГРАММЫ. МАССИВЫ КАК ФОРМАЛЬНЫЕ ПАРАМЕТРЫ ПОДПРОГРАММ Лекция 3 План 1. Процедуры и функции с использованием массивов в заголовке 2. Описание подпрограмм с массивами 3. Параметры подпрограмм с массивами Лектор: профессор, д.т.н. Иванчина Эмилия Дмитриевна
2 1. Процедуры и функции с использованием массивов в заголовке Подпрограммы могут содержать массивы в качестве параметров. Глобальные параметры являются общими на все программные единицы. Локальные параметры изменяют свои значения только внутри данной программной единицы. Описание параметров в блоке VAR означает, что данная группа параметров является глобальными для входных и выходных значений. При отсутствии в заголовке служебного слова VAR значения параметров передаются внутрь процедуры, но не передаются из нее в главную программу. В тех случаях, когда параметрами процедур и функций являются массивы, необходимо размерность и размер этих массивов задавать через служебное слово TYPE. TYPE a=array[1..3,1..4] of integer; a – идентификатор типа массива Далее будут рассмотрены примеры составления процедур и функций с использованием массивов в заголовке.
3 2. Описание подпрограммы с массивами заключается в указании ее заголовка и содержания. В заголовке процедуры определяются имя и параметры, а в заголовке функции дополнительно указывается тип результата, например integer. За заголовком следует содержание подпрограммы, которое подобно главной программе состоит из блока описания и блока выполняемых операторов.
4 Заголовок подпрограммы имеет вид: FUNCTION FUN ( Y:a; var S:real):real; PROCEDURE proc (vd:b1; var md:d1); Для описания глобальных параметров использовали служебной слово var. Список формальных параметров представляется через запятую по порядку следования
5 3. Параметры подпрограмм с массивами. Процедуры используются в том случае, если подпрограмма имеет несколько результатов вычислений или результат является многомерной величиной(массивом). Описание процедуры имеет вид: Procedure (формальные параметры); label ; const ; type ; var Begin End; Процедура помещается в основной программе в разделе описаний VAR.
6 В тех случаях, когда параметрами процедур и функций являются массивы, необходимо указать размерность и размер этих массивов через служебное слово TYPE. Правило. Типом любого параметра из списка формальных параметров может быть ранее объявленный тип. TYPE a=array[1..10] of real; Procedure S(b:a); Function f(c:a):real;
7 Пример 1. Составить программу расчета массива Z(10). Расчет функции f(x) оформить в виде подпрограммы - функции. Расчет суммы - в виде подпрограммы - процедуры..
8 Program Pro1; type mas=array [1..10] of real; var x,Z:mas; c,q,S:real; function F(x:real):real; begin if x>3 then f:=1/x else f:=1+2xsqr(x) end;
9 procedure Sum(x:mas;var S:real); var i:integer; begin S:=0; for i:=1 to 10 do S:=S+sqrt(x[i]) end;
10 BEGIN readln(c,q); for i:=1 to 10 do readln(x[i]) Sum(x,S); for i:=1 to 10 do begin Z[i]:=sqr(f(x[i]))/sin(c)+sqrt(x[i])/(sqr(S)q); writeln(Z[i]:10) end; END.
11 Пример 2. Составить программу для расчета выражения.
12 Program ppp; type m=array [1..10] of real; var x,y:m;f:real; i,k:integer; function Sum(a:m; n1,n2,p:integer):real; var S:real; i:integer; begin S:=0; for i:=n1 to n2 do S:=S+exp(pln(a[i])); Sum:=S end;
13 BEGIN {Ввод массивов} for i:=1 to 8 do readln(x[i]);
14 for k:=1 to 10 do readln(y[k]); end; F:=Sum(x,3,8,2)+Sum(y,2,10,3); writeln(F=,F:10) END.
15 Пример 3. Составвить подпрограмму для определения макс. и мин. элемента матрицы program maxmin; type b1=array[1..4,1..3] of real; var i,j : integer; ymax,ymin:real; y:b1; r1,r2:text;
16 procedure mm(var x: b1; var xmax,xmin:real); var n,k:integer; begin xmax:=x[1,1];xmin:=x[1,1]; for n:=1 to 4 do for k:=1 to 3 do begin if x[n,k] <= xmin then xmin:=x[n,k]; if x[n,k] >= xmax then xmax:=x[n,k] end; end;
17 begin assign(r1,'a.dat'); reset(r1); for i:=1 to 4 do for j:=1 to 3 do read(r1,y[i,j]); assign(r2,'b.res'); rewrite(r2); mm(y,ymax,ymin); write(r2,ymax,ymin); close(r2); end.
18 Пример 4. Составить подпрограмму для расчета функции по формуле Лагранжа
19 Program lagr; TIPE a=ARRAY[1..4] OF real; Var x,y:a; i:integer;x0:real; Function lag(x,y:a,x0):real; Var I,j:integer;s,p,x0:real); BEGIN S:=0; FOR i:=1 TO 4 DO BEGIN P:=1; FOR j:=1 TO 4 DO IF i j THEN P:=P(x0-x[j])/(x[i]-x[j]); S:=S+y[i]P; lag:=S; END; Begin for i:=1 to 4 do read (x[i],y[i]);read(x0); writeln(lag(x,y,x0):5:2);end. END.