Читайте также:
|
|
Задача. Заданы матрицы А[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.
Список рекомендуемой литературы
1. Авдеюк О.А., Богатырев Р.С., Гостевская О.В., Жмурин Д.В., Павлова Е.С., Покатаева В.М., Шушкова Н.Н. Сборник заданий для лабораторных и семестровых работ по информатике: Учебное пособие/ ВолгГТУ.-Волгоград, 2003.- 81 с.
2. Епанешников А., Епанешников В. Программирование в среде Turbo Pascal 7.0. - 3-е изд.,стер. - М.: “ ДИАЛОГ-МИФИ”,1998. - 288 с.
3. Калмыкова С.Р., Муха Г.С. Покатаева В.М. Технология программирования: Часть 2: Типовые алгоритмы обработки одномерных массивов. Методические указания к лабораторным работам. – Волгоград: «Политехник» ВолгГТУ, 1993. – 23 с.
4.Фаронов В.В. Turbo Pascal 7.0 начальный курс// Учеб. пособ. – М.: «Нолидж», 2001. – 576 с.
Оксана Алексеевна Авдеюк
Ольга Владиславовна Гостевская
Дмитрий Владимирович Жмурин
Елена Станиславовна Павлова
Дата добавления: 2015-07-10; просмотров: 138 | Нарушение авторских прав