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

3.2.2. Алгоритмы обработки матрицы в целом

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

На рис.27 показан алгоритм вычисления суммы элементов матрицы. Начальное значение сумме S=0 присваивается до начала суммирования элементов. Затем обработка элементов массива идёт по тому же принципу, что и в предыдущем пункте.

S:=0;

for i:=1 to N do

for j:=1 to M do

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

writeln(‘S= ‘,S);

Рис.27

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

MAX := X[1,1];

Imax:=1;

Jmax:=1;

For I:=1 to N do

For j:=1 to M do

If MAX < X[I,j] then

Begin

MAX:= X[I,j];

Imax :=I;

Jmax := j;

End;

Writeln(‘max= ‘,MAX);

Рис.29

3.2.3. Алгоритмы обработки отдельных строк или столбцов матрицы

Алгоритмы обработки отдельной строки или столбца матрицы почти не отличаются от алгоритмов обработки элементов одномерного массива.

Например, найдем сумму элементов в первой строке матрицы А. Для этого зададим начальное значение суммы S=0, и организуем цикл для перебора элементов первой строки. Нужно помнить, что каждая строка матрицы содержит столько же элементов, сколько в этой матрице столбцов (смотри алгоритм на рис.30).

S:=0;

I:=1;

For J:=1 to M do

S:=S+A[i,j];

Рис.30

Этот же алгоритм можно было записать следующим образом (рис.31):

S:=0;

For J:=1 to M do

S:=S+A[1,j];

Рис.31

Теперь найдем произведение четных элементов в последнем столбце матрицы. Для этого зададим начальное значение произведения P=1, и организуем цикл для перебора элементов последнего столбца. Каждый столбец матрицы содержит столько же элементов, сколько в этой матрице строк (алгоритм представлен на рис.32).

P:=1;

J:=M;

For I:=1 to N do

P:=P*A[i,j];

Рис.32

Этот же алгоритм можно было записать следующим образом (рис.33):

P:=1;

For I:=1 to N do

P:=P*A[i,M];

Рис.33

3.2.4. Алгоритмы обработки элементов каждой строки матрицы

При решении задач подобного типа необходимо рассматривать матрицу по строкам (т.е. вначале должен быть задан цикл по переменной i, а затем по переменной j).

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

В ответе получается столько же значений, сколько в матрице строк. Результат для каждой строки окончательно вычисляется при завершении каждой строки и может быть обработан по условию задачи между циклами (после завершения цикла по переменной j).

На рис.34 представлен алгоритм нахождения суммы элементов каждой строки матрицы X и вывод этих сумм на экран. Ниже приведены фрагменты программ, иллюстрирующие этот алгоритм.

for i:=1 to N do

begin

S:=0;

for j: =1 to M do

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

writeln(‘S= ‘ ,S:6:2);

end;

Рис. 34

На рис.35 представлен алгоритм нахождения произведения нечетных элементов в каждой строке матрицы X и cохранение найденных значений в одномерном массиве Y.

Т.к. количество элементов в массиве Y совпадает с количеством строк в матрице X, то для нумерации элементов в массиве Y воспользуемся переменной I. Размер сформированного массива будет равен количеству строк матрицы X (т.е. переменной N). Ниже приведен фрагмент программы, иллюстрирующий этот алгоритм.

for i:= 1 to N do

begin

P:=1;

for j: =1 to M do

if odd (X[I,j]) then

P:=P*X[I,j];

Y[i]:=P;

end;

writeln(‘Сформированный массив Y’);

For I:=1 to N do

Write(Y[i]);

Writeln;

Рис. 35

Н а рис.36 приведён алгоритм вычисления максимума каждой строки матрицы X и замена его нулём.

for i:=l to N do

begin

MAX:=X[i,1] ;{за максимум берем первый элемент в I-ой строке}

Jmax:=1;

for j:=2 to M do

if X[I,j] > MAX then

begin

MAX:=X[i,j];

Jmax:=j

end;

X[i,Jmax] :=0;

end;

Рис.36