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

Особенность Оbject Pascal.

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

Рассмотрим, как выглядит описание функции summ с использованием Result:

Program Primer_Result;

Var p, x, y:real;

Function summ(z:real;r:integer):real;

Var i:integer;a:real;

Begin

result:=0;

a:=1;

for i:=1 to r do

begin a:=a*z;

result:=result+a;

end;

end;

begin

writeln(‘ввод x, y’);

readln(x, y);

p:=summ(x, 20)*summ(y, 25);

writeln(‘p=’,p:10:3);

readln;

end.

Использование массивов в процедурах.

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

Procedure Sum(a: array[1..10] of integer; var f: array[1..20] of integer);-так нельзя!

Для передачи массива необходимо сначала описать его тип в разделе Type, а затем применить его в заголовке процедуры.

Type Mass = array[1..10] of integer;

Func = array[1..20] of integer;

Procedure sum (a: Mass; var f: Func);

Пример 1. Даны массивы вещественных чисел x1,...., x10

y1,...., y20

z1,...., z30

Определить среднее арифметическое их max элементов. Поиск max элемента в каждом массиве оформить как процедуру.

Program Srednee;

Const n=10; m=20; r=30;

Type Vect=array[1.. r ] of integer; { r – самый большой размер}

Var x, y, z: Vect;

s1, s2, s3: integer; s : real;

Procedure Vvod(var z:Vect; k:integer); {описание процедуры Vvod}

{ z –это массив, являющийся параметром-переменной. Будем вводить формальный массив z длины k. Отметим, что массив z – результат ввода, т.е. пишется со словом var.}

var i:integer;

begin

for i:=1 to k do

readln (z[i]);

end;

Procedure max(z:Vect; k:integer; var mx:integer); {описание процедуры max }

var i:integer;

begin mx:=z[1];

for i:=2 to k do

if mx<z[i] then mx:=z[i];

end;

Begin {исполняемая часть программы}

writeln(‘ввод массива х из 10 элементов’);

Vvod(x,n);

writeln(‘ввод массива y из 20 элементов’);

Vvod(y,m);

writeln(‘ввод массива z из 30 элементов’);

Vvod(z,r);

max(x, n, s1);

max(y, m, s2);

max(z, r, s3);

s:=(s1+s2+s3)/3;

writeln(‘среднее=’, s:10:3);

readln;

end.

Пример 2. Дан двумерный массив (матрица) размера m*n. Упорядочить элементы каждой строки этого массива в порядке возрастания, применить для этого алгоритм сортировки выбором в виде процедуры.

Program Poriadok;

const m=5; n=10; {5 строк , 10 столбцов }

type matrica=array[1..m,1..n] of integer;

mas=array[1..n] of integer;

var a:matrica;

b:mas; { b – строка матрицы – массив длины n }

i, j: integer;

procedure Vvod(var x:matrica); {описание процедуры матричного ввода}

var i, j: integer;

begin

for i:=1 to m do

begin for j:=1 to n do

read(x[i,j]);

readln;

end;

end;

procedure Select(var y:mas); {описание процедуры сортировки}

var i, j, c, k: integer; {y – формальный параметр, строка}

begin

for j:=1 to n-1 do

begin c:=y[j];

k:=j;

for i:=j+1 to n do

if c>y[i] then k:=i;

c:=y[i];

y[j]:=y[k];

y[k]:=c;

end;

end;

Begin {раздел операторов}

writeln(‘ввод матрицы’);

Vvod(a);

for i:=1 to m do {блок обработки матрицы}

begin

for j:=1 to n do

b[j]:=a[i,j]; {берем строку b из матрицы}

Select(b);

for j:=1 to n do

a[i,j]:=b[j]; {возвращаем отсортированную строку в матрицу а}

end;

writeln(‘получена матрица’); {матричный вывод матрицы а}

for i:=1 to m do

begin

for j:=1 to n do write(a[i,j],’_’ );

writeln;

end;

readln;

End.