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

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

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

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

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

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

for j:=1 to M do

begin

S:=0;

for I:=1 to N do

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

writeln(‘S= ‘ ,S);

end;

Рис. 37.

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

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

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

• • •

for j:= 1 to M do

begin

P:=1;

for i :=1 to N do

if X [ I , j ]  mod  2  =  0  then

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

Y[ j j:=P;

end;

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

For I:=1 to M do

Рис.38 Write(Y[ i ]);

Writeln;

• • •

На рис.39 приведён алгоритм увеличения в 2 раза максимальных элементов столбцов матрицы X. Ниже приведён фрагмент программы к этому алгоритму.

• •

for j:=1 to M do

begin

МАХ:=Х[1,j];

Imax:=1;

for i:=2 to N do

if MAX<X[i,j] then

begin

MAX:=X[i,j];

Imax:= i;

end;

X [Imax, j ]: =X [Imax, j ] *2;

end;

Рис.39

3.2.5. Обработка элементов матрицы, расположенных в четных и нечетных строках или столбцах

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

Рассмотрим следующую задачу: требуется найти и распечатать суммы элементов каждой четной строки матрицы А. В этом случае для задания цикла по строкам воспользуемся циклом ПОКА, который позволяет изменять переменную цикла с шагом 2 (рис.40).

i :=2;

While I<=N do

begin

S:=0;

for j: =1 to M do

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

writeln(‘S= ‘ ,S);

I:=I+2;

end;

Рис. 40

Аналогично найдем количество положительных элементов в каждом нечетном столбце (рис.41).

j:=1

While j<=M do

begin

k=0;

for I:=1 to N do

k::=k+1;

writeln(‘k= ‘ ,k);

j:=j+2;

Рис. 41 end;

В случае, если результаты обработки элементов четных или нечетных строк (столбцов) необходимо сохранить в одномерном массиве, то для нумерации элементов этого массива необходимо использовать дополнительную переменную. Для примера запишем в массив Y максимальные элементы каждой нечетной строки матрицы Х (рис.42).

Рис. 42

K:=0;{переменная для индексации элементов массива Y}

i:=1;

While I<=N do

begin

max:=X[I,1];

for j: =2 to M do

if X[I, j ] > max then

max:=X [ I , j ];

k:=k+1;

Y[k]:=max;

I:=I+2;

end;

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

For I:=1 to k do

Write(Y[i]);

Writeln;