Предыдущий раздел Раздел верхнего уровня Следующий раздел

Пример 7. Поиск столбцов матрицы, содержащих отрицательные элементы под главной диагональю

Дана квадратная матрица A[1:n, 1:n]. Вычислить массив B[1:m], состоящий из номеров столбцов матрицы, в которых находятся отрицательные элементы, расположенные под главной диагональю.


Рис. 1. Главная диагональ матрицы

Легко заметить (рис. 1), что если элемент A[i,j] расположен под главной диагональю, то индексы i и j могут принимать следующие значения: i=2…n    j=1…i-1

Исходные данные: n, A[1:n,1:n]
Результат:B[1:m]
Алгоритм Отрицательные_элементы1 Начало ввод (n, A[1:n, 1:n])
m:=0
цикл от i:=2 до n цикл от j:=1 до i-1 если Aij < 0 то m : = m + 1
Bm : = j
все
кц
кц
если m < > 0 то вывод (m, B[1:m]) иначе вывод ( 'Под главной диагональю матрицы нет отрицательных элементов') все
Конец
Исходный текст программы
program OtrEl1;
var A: array [1..20,1..20] of real;
B: array [1..20] of integer;
i,j: integer;
n,m: integer;
begin { Вывод заголовка }
writeln (' Поиск столбцов матрицы, содержащих отрицательные элементы');
writeln (' под главной диагональю ');
writeln;
{ Ввод исходных данных }
write (' Введите n: ');
readln (n);
writeln (' Введите элементы матрицы A : ');
for i:=1 to n do begin write (' строка ', i:3,' : ');
for j:=1 to n do read(A[i,j]);
end;
writeln;
{ Поиск номеров столбцов }
for i:=2 to n do for j:=1 to i-1 do if A [i,j] < 0 then
begin m : = m + 1 ;
B [m] : = j ;
end;
{ Вывод результата }
if m < > 0 then
begin writeln(' массив B[1:',m,'] :');
for i : = 1 to m do write(B[i]:3); writeln ;
end
else writeln ( 'Под главной диагональю матрицы нет отрицательных элементов'); readln;
end.

В результате работы этого алгоритма массив B[1:m] может содержать повторяющиеся значения, если в каждом столбце под главной диагональю более одного отрицательного элемента.