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

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

Задача. Заданы матрицы А[Na,Ma] и B[Nb,Mb], состоящие из вещественных чисел, где Na<=15, Ma=10, Nb<=10, Mb<=20. Найти в каждой матрице максимальный элемент и увеличить на его значение все положительные элементы другой матрицы. Преобразованные матрицы вывести на экран.

На первом этапе решения необходимо уяснить порядок действий, которые необходимо выполнить для решения задачи. Запишем его в виде общей блок-схемы.

Ввести матрицу А

Ввести матрицу В

Найти максимальный элемент в матрице А

Легко заметить в представленной блок-схеме пары похожих блоков, необходимых для аналогичной обработки каждой из матриц. Представим такие блоки с помощью подпрограмм Vvod, Max, Preobr, Vyvod.

Чтобы правильно спроектировать будущие подпрограммы, представим их в виде «черных ящиков» и четко сформулируем суть выполняемых подпрограммой действий, а также определим наборы выходных и входных параметров. Будем учитывать, что каждая подпрограмма будет вызываться дважды (один раз для обработки матрицы А, другой – для обработки матрицы В), поэтому наборы параметров представим в формальном виде (здесь Х – обрабатываемая матрица, N и M - количество строк и столбцов матрицы, сh – символьное имя матрицы, МХ - максимальный элемент матрицы).

Вызов подпрограммы в блок-схеме изображается следующим образом:

Теперь можно записать блок-схему основной программы в терминах подпрограмм.

Далее рассмотрим описание каждой из подпрограмм (ее вид, алгоритм и списки формальных параметров).

Program MyProg;

const

N1=15;{максимальное количество строк матрицы}

M1=20;{максимальное количество столбцов матрицы}

type

Matrix=array[1..N1,1..M1] of real;

var

A, B : Matrix;

Na, Ma, Nb, Mb : byte;

MaxA, MaxB : real;

procedyre Vvod(var X:Matrix; var N,M:byte; ch:char);

var

i, j:byte;

begin

write('Введите размерность матрицы',ch);

write('Количество строк=');

read(N);

write('Количество столбцов=');

read(M);

writeln('Введите элементы матрицы',ch);

for i:=1 to N do

for j:=1 to M do

begin

write(ch,'[',i,',',j,']=');

read(X[i,j]);

end;

end; {Vvod}

function Max(const X:Matrix; N,M:Byte) : real;

var

i, j : byte;

Mx : real;

begin

Mx:=X[1,1];

for i:=1 to N do

for j:=1 to M do

if Mx<X[i,j] then

Mx:=X[i,j];

Max:=Mx;

end; {Max}

procedure Preobr(var X: Matrix; N,M:byte; Mx:real);

var

i, j : byte;

begin

for i:=1 to N do

for j:=1 to M do

if X[i,j]>0 then

X[i,j]:=X[i,j]+Mx;

end; {Preobr}

procedure Vyvod(const X : Matrix; N,M:byte; ch:char);

var

i,j:byte;

begin

writeln('Преобразованная матрица',ch);

for i:=1 to N do

begin

for j:=1 to M do

write(X[i,j]:7:1);

writeln;

end;

end; {Vyvod}

BEGIN {основная программа}

Vvod(A, Na, Ma, 'A');

Vvod(B, Nb, Mb, 'B');

MaxA:=Max(A, Na, Ma);

MaxB:=Max(B, Nb, Mb);

Preobr(A, Na, Ma, MaxB);

Preobr(B, Nb, Mb, MaxA);

Vyvod(A, Na, Ma, 'A');

Vyvod(B, Nb, Mb 'B');

END.