Алгоритмы и программы
Некоторые свойства матриц:


ЗАДАЧА. Найти сумму элементов матрицы, лежащих выше главной диагонали. В матрице n строк и m столбцов.


s:=0;
for i:=1 to n do
for j:=1 to m do
if j>i then
s:=s+a[i,j];
MessageDlg('S='
+FloatToStrF(s,ffFixed,5,3),MtInformation,[mbOk],0);
Еще один вариант решения задачи

s:=0;
for i:=1 to n do
for j:=i+1 to m do
s:=s+a[i,j];
ЗАДАЧА. Вычислить количество положительных элементов квадратной матрицы, расположенных по ее периметру и на диагоналях. Напомним, что в квадратной матрице число строк равно числу столбцов.

Для i =1, n
Ai,i – элемент главной диагонали.
Аi,n-i+1 – элемент побочной диагонали.
Элементы, находящиеся по периметру матрицы:
А1,i – первая строка,
АN,i – последняя строка,
Аi,1 – первый столбец,
Аi,N – последний столбец.




k:=0;
for i:=1 to n do
begin
if (a[i,i]>0) then
k:=k+1;
if a[i,n-i+1]>0 then
k:=k+1;
end;
for i:=2 to n-1 do
begin
if (a[1,i]>0) then
k:=k+1;
if (a[n,i]>0) then
k:=k+1;
if (a[i,1]>0) then
k:=k+1;
if (a[i,n]>0) then
k:=k+1;
end;
if (n mod 2 <>0) and
(a[(n div 2)+1,(n div 2)+1]>0)
then k:=k-1;
MessageDlg('K='+IntToStr(K),
MtInformation,[mbOk],0);
ЗАДАЧА. Преобразовать исходную матрицу так, чтобы первый элемент каждой строки был заменен средним арифметическим элементов этой строки.

procedure
TForm1.BitBtn1Click(Sender: TObject);
type
matrica=array[1..20,1..20] of real;
const
n=4;m=4;
var
a:matrica;
i,j: integer; s: real;
begin
for i:=1 to n do
for j:=1 to m do
A[i,j]:=StrToInt(
StringGrid1.Cells[i,j]);
for i:=1 to n do
begin
S:=0;
for j:=1 to m do
S:=S+ a[i,j];
a[i,1]:=S;
end;
//Вывод измененной матрицы.
for i:=1 to n do
for j:=1 to m do
StringGrid1.Cells[i,j]:=
FloatToStr(a[i,j]);
end;
ЗАДАЧА. Задана матрица A (n, m). Сформировать вектор P (m), в который записать номера строк максимальных элементов каждого столбца.

procedure TForm1.Button1Click(Sender: TObject);
type
massiv=array [1..15] of byte;
matr=array [1..15,1..15] of real;
const
n=4;m=4;
var
i,j: byte;
n_max: byte;
max: real;
a: matr;
p: massiv;
begin
for i:=1 to n do
for j:=1 to m do
A[i,j]:=StrToInt(
StringGrid1.Cells[i,j]);
for j:=1 to m do
begin
max:= a[1,j];
n_max:=1;
for i:=2 to m do
if a[i,j] > max then
begin
max:=a[i,j];
n_max:=i;
end;
p[j]:=n_max;
end;
for j:=1 to m do
StringGrid2.Cells[0,j]:=
FloatToStr(p[j]);
end;
ЗАДАЧА. Написать программу умножения двух матриц A (n, m) и B (m, L).
Например, необходимо перемножить две матрицы
.
Воспользовавшись правилом «строка на столбец», получим матрицу:

В общем виде формула для нахождения элемента Cij матрицы имеет вид:
,
где i = 1, N и j = 1, L.
Проводить операцию умножения можно только в том случае, если количество строк левой матрицы совпадает с количеством столбцов правой. Кроме того, A ´ B ¹ B ´ A.
Не нашли, что искали? Воспользуйтесь поиском:
|