- •Волгоград 2006
- •3. Двумерные массивы (матрицы) 24
- •3.1. Объявление двумерных массивов 24
- •3.2. Решение задач с использованием двумерных массивов 25
- •3.2.7. Обработка элементов квадратных матриц, расположенных над и под главными и побочными диагоналями 39
- •1. Общие понятия
- •2. Одномерные массивы (векторы)
- •2.1. Объявление одномерных массивов
- •2.2. Типовые алгоритмы обработки одномерных массивов
- •2.2.1. Ввод одномерного массива в память компьютера
- •2.2.2. Вывод массива на экран
- •2.2.3. Подсчёт суммы, произведения, количества элементов одномерного массива, удовлетворяющих заданному условию
- •2.2.4 Поиск значений среднего арифметического и среднего геометрического элементов массива
- •2.2.5. Обработка элементов одномерного массива, имеющих чётные индексы
- •2.2.6. Формирование нового одномерного массива из элементов другого одномерного массива
- •2.2.7. Нахождение максимального (минимального) элемента одномерного массива
- •2.2.9. Сортировка элементов массива
- •3. Двумерные массивы (матрицы)
- •3.1. Объявление двумерных массивов
- •3.2. Решение задач с использованием двумерных массивов
- •3.2.1. Ввод и вывод на экран двумерного массива
- •3.2.2. Алгоритмы обработки матрицы в целом
- •3.2.3. Алгоритмы обработки отдельных строк или столбцов матрицы
- •3.2.4. Алгоритмы обработки элементов каждой строки матрицы
- •3.2.4. Алгоритмы обработки элементов каждого столбца матрицы
- •3.2.5. Обработка элементов матрицы, расположенных в четных и нечетных строках или столбцах
- •3.2.5. Обработка элементов главной диагонали
- •3.2.6. Обработка элементов побочной диагонали
- •3.2.7. Обработка элементов квадратных матриц, расположенных над и под главными и побочными диагоналями
- •3.2.8. Транспонирование матрицы
- •Иерархическая структура программы
- •Структура программы, использующей подпрограммы
- •Локальные и глобальные идентификаторы
- •Формальные и фактические параметры
- •Способы передачи параметров в подпрограммы
- •Подпрограммы-процедуры Описание процедуры
- •Вызов процедуры
- •Примеры использования подпрограмм-процедур
- •Функции Описание функции
- •Вызов функции
- •Примеры использования подпрограмм-функций
- •Пример решения задачи с использованием подпрограмм
- •Список рекомендуемой литературы
- •Обработка массивов
- •400131 Волгоград, пр. Ленина, 28.
- •400131 Волгоград, ул. Советская,35.
Пример решения задачи с использованием подпрограмм
Задача. Заданы матрицы А[Na,Ma] и B[Nb,Mb], состоящие из вещественных чисел, где Na<=15, Ma=10, Nb<=10, Mb<=20. Найти в каждой матрице максимальный элемент и увеличить на его значение все положительные элементы другой матрицы. Преобразованные матрицы вывести на экран.
На первом этапе решения необходимо уяснить порядок действий, которые необходимо выполнить для решения задачи. Запишем его в виде общей блок-схемы.
Ввести матрицу
А
Ввести матрицу
В
Найти максимальный
элемент в матрице А
Чтобы правильно спроектировать будущие подпрограммы, представим их в виде «черных ящиков» и четко сформулируем суть выполняемых подпрограммой действий, а также определим наборы выходных и входных параметров. Будем учитывать, что каждая подпрограмма будет вызываться дважды (один раз для обработки матрицы А, другой – для обработки матрицы В), поэтому наборы параметров представим в формальном виде (здесь Х – обрабатываемая матрица, 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.