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

Задание 3.

Постановка задачи

Вычислить z = Max1 + Max2, где

Max1 – наибольший элемент матрицы G(4,4);

Max2 – наибольший элемент матрицы T(2,2).

Матрица G(4,4) получена произведением матрицы А(3,4) на матрицу В(4,3). Матрица T(2,2) получена произведением матрицы С(2,3) на матрицу D(3,2).

Решение

3.1. В программе имеются следующие подпрограммы:

  • процедура VVOD

  • процедура VIVOD

  • процедура SR

  • функция max

Составим алгоритм решения данной задачи.

3.2. Приведем, сначала, алгоритм всей программы в целом. Затем детально рассмотрим все подпрограммы по порядку.

3.3. Рассмотрим подробно все подпрограммы.

Подпрограмма VVOD. Эта подпрограмма реализована в виде процедуры и вызывается в тексте основной программы дважды. Процедура VVOD - ввод матрицы (заполнение числовыми данными, вводимыми с клавиатуры) для произвольной прямоугольной матрицы Х(n,m).

Текст процедуры

PROCEDURE VVOD(Var X:matr; n,m:integer);

Var i,j:integer;

begin

for i:= 1 to n do

for j:=1 to m do read(X[i,j]);

end;

Подпрограмма SR. Эта подпрограмма, также, реализована в виде процедуры и вызывается в тексте основной программы дважды. Процедура SR - вычисление произведения двух произвольных прямоугольных матриц G и S размером L×N и N×M. Вычисления осуществляются по формуле:

Текст процедуры

PROCEDURE SR(G,S:matr; L,N,M:integer;Var T:matr);

Var k,i,j:integer;

begin

for i:= 1 to L do

for j:=1 to M do

begin

T[i,j]:=0;

For k:=1 to N do T[i,j]:=T[i,j]+G[i,k]*S[k,j]l;

end;

end;

Подпрограмма VIVOD – процедура вывода произвольной прямоугольной матрицы y(k,l). Вызывается дважды. Алгоритм и его реализация аналогична процедуре VVOD:

PROCEDURE VIVOD(y:matr; n:integer);

Var i,j:integer;

begin

for i:= 1 to n do

begin

for j:=1 to n do write(y[i,j]:6:2,’ ’);

writeln;

end

end;

Подпрограмму Max. Эта подпрограмма реализована в виде функции. Обращение к функции Max осуществляется дважды.

function MaxM(x:matr; n:integer;): real;

Var i,j:integer;

max:real;

begin

max:=x[1,1];

for i:= 1 to n do

for j:= 1 to n do

if x[i,j]>max then max:=x[i,j];

Maxm:=max;

end;

Комментарий к программе:

Из основной программы данной функции передается массив х и его размер n×n. Так как в функции элементы массива не подвергаются изменению, то х передается функции как параметр-значение.

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

Приведем, теперь, полностью текст основной программы.

PROGRAM zadanie3;

USES CRT;

type

matr=array[1 ..4,1 ..4] of real;

Var

AB,CD,a,b,c,d: matr;

z: real;

PROCEDURE VVOD(Var X:matr; n,m:integer);

Var i,j:integer;

begin

for i:= 1 to n do

for j:=1 to m do read(X[i,j]);

end;

PROCEDURE VIVOD(y:matr; n:integer);

Var i,j:integer;

begin

for i:= 1 to n do

begin

for j:=1 to n do write(y[i,j]:6:2,’ ’);

writeln;

end

end;

PROCEDURE SR(G,S:matr; L,N,M:integer;Var T:matr);

Var k,i,j:integer;

begin

for i:= 1 to L do

for j:=1 to M do

begin

T[i,j]:=0;

For k:=1 to N do T[i,j]:=T[i,j]+G[i,k]*S[k,j]l;

end;

end;

function MaxM(x:matr; n:integer;): real;

Var i,j:integer;

max:real;

begin

max:=x[1,1];

for i:= 1 to n do

for j:= 1 to n do

if x[i,j]>max then max:=x[i,j];

Maxm:=max;

end;

begin

clrscr;

writeln(‘введите A(3,4)’);

VVOD (A,3,4);

writeln(‘введите В(4,3)’);

VVOD (B,4,3);

writeln(‘введите C(2,3)’);

VVOD (C,2,3);

writeln(‘введите D(3,2)’);

VVOD (D,3,2);

SR(A,B,3,4,3,AB);

SR(C,D,2,3,2,CD);

writeln(‘вывод АВ’);

VIVOD (AB,4);

writeln(‘вывод CD’);

VIVOD (CD,2);

z:=MaxM(AB,4)+MaxM(CD,2);

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

end.

Оглавление

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