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

8.5. Примеры программирования задач с использованием подпрограмм

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

Задача 1

Даны два вектора: и . Вычислить значение: , где ;

mx, my – максимальные компоненты векторов и соответственно; sx, sy – средние значения компонент векторов и соответственно.

Вариант c процедурой

Program P1_P;

Type

vect = array[1..10] of real;

Var

X, Y: vect;

i: integer;

Dx, Dy, D: real;

Procedure Mod_Otkl(A: vect; n: integer; var Da: real);

var

ma, sa: real;

i: integer;

begin

ma := –1E6;

sa := 0;

for i := 1 to n do

begin

if a[i]>ma then ma := a[i];

sa := sa + a[i];

end;

sa := sa/n;

Da := abs(ma – sa);

end;

Begin

writeln(‘Введите массив X’);

for i :=1 to 8 do read(x[i]);

writeln(‘Введите массив Y’);

for i := 1 to 10 do read(y[i]);

Mod_Otkl(X, 8, Dx);

Mod_Otkl(Y, 10, Dy);

D := Dx/Dy;

writeln(‘D=’, D:6:2);

End.

Вариант c функцией

Program P1_F;

Type

vect = array[1..10] of real;

Var

X, Y: Vect;

i: integer;

Dx, Dy, D: real;

Function Mod_Otkl (A: vect; n: integer): real;

var

ma, sa, Da: real;

i: integer;

begin

ma := –1E6;

sa:=0;

for i :=1 to n do

begin

if a[i]>ma then ma := a[i];

sa := sa + a[i];

end;

sa := sa/n;

Da := abs(ma – sa);

Mod_Otkl := Da;

end;

Begin

writeln(‘Введите массив X’);

for i := 1 to 8 do read(x[i]);

writeln(‘Введите массив Y’);

for i := 1 to 10 do read(y[i]);

Dx := Mod_Otkl(X, 8);

Dy := Mod_Otkl(Y, 10);

D := Dx/Dy;

writeln(‘D=’, D:6:2);

End.

Задача 2

Даны две матрицы: и .

Вычислить разность: C = KAKB, где KA и KB – количество положительных элементов в матрицах A и B соответственно.

Вариант c процедурой

Program P2_P;

Type

matr = array[1..5, 1..7] of real;

Var

A, B: matr;

i, j, KA, KB, C: integer;

Procedure CP(D: matr; m, n: integer; var KD: integer);

var

i, j: integer;

begin

KD := 0;

for i := 1 to m do

for j := 1 to n do

if d[i,j]>0 then KD := KD + 1;

end;

Begin

writeln(‘Введите матрицу A’);

for i := 1 to 5 do

for j := 1 to 6 do read(a[i,j]);

writeln(‘Введите матрицу В’);

for i := 1 to 4 do

for j := 1 to 7 do read(b[i,j]);

CP(A, 5, 6, KA);

CP(B, 4, 7, KB);

C := KA – KB;

writeln(‘C=’, C);

End.

Вариант с функцией

Program P2_F;

Type

matr = array[1..5, 1..7] of real;

Var

A, B: matr;

i, j, C: integer;

Function CP(D: matr; m, n: integer): integer;

var

i, j, KD: integer;

begin

KD := 0;

for i := 1 to m do

for j := 1 to n do

if d[i,j]>0 then KD := KD + 1;

CP := KD;

end;

Begin

writeln(‘Введите матрицу A’);

for i := 1 to 5 do

for j := 1 to 6 do read(a[i,j]);

writeln(‘Введите матрицу В’);

for i := 1 to 4 do

for j := 1 to 7 do read(b[i,j]);

C := CP(A, 5, 6) – CP(B, 4, 7);

writeln(‘C=’, C);

End.