Консультация № 159415
02.02.2009, 17:28
0.00 руб.
0 5 2
Здравсвуйте всем кто читает данное сообщение...
Мне необходима ваша помощь!!!
Помогите решить 1 задачку по программированию (ТР) только желательно с пояснением...
----------БЛАГОДАРСТВУЮ за ранее----------
Задача:
Даны две матрицы А(5,5) и В(6,6). Определить полусумму
следов матриц.
-------------------------------------------------------
И напишите кто знает что такое (полусумма следов матриц)!

Обсуждение

Неизвестный
02.02.2009, 17:33
общий
Здравсвуйте всем кто читает данное сообщение...
Мне необходима ваша помощь!!!
Помогите решить 1 задачку по программированию (ТР) только желательно с пояснением...
----------БЛАГОДАРСТВУЮ за ранее----------
Задача:
Даны две матрицы А(5,5) и В(6,6). Определить полусумму
следов матриц.
-------------------------------------------------------
И напишите кто знает что такое (полусумма следов матриц)!
давно
Профессор
401888
1232
02.02.2009, 18:04
общий
Про след матрицы прчитайте хотя бы здесь.
http://bse.sci-lib.com/article103188.html
Ну а полусумма, Вы наверное удивитесь, это (а+b)/2
Неизвестный
02.02.2009, 18:11
общий
это ответ
Здравствуйте, DozoRRR!
След матрицы — операция, отображающая пространство квадратных матриц в поле, над которым определена матрица (для действительных матриц — в поле действительных чисел, для комплексных матриц — в поле комплексных чисел). След матрицы — это сумма элементов главной диагонали матрицы.

Программа с краткими комментариями.

Приложение:
program Pascal_159415;

type
intptr=^integer;

var
A:array[1..5,1..5]of integer;
B:array[1..6,1..6]of integer;

{ Функция считает след матрицы }
function matrixTrace(matr:intptr;dim:integer):integer;
var
sum,i:integer;
begin
sum:=0;
for i := 1 to dim do begin
sum:=sum+matr^;
Inc(matr,dim+1);
end;
matrixTrace:=sum;
end;

{ Заполняет матрицу случайными значениями }
procedure matrixCreate(matr:intptr;dim:integer);
var
i:integer;
begin
for i := 1 to dim*dim do begin
matr^:=Random(101)-50;
Inc(matr);
end;
end;

{ Выводит матрицу на экран }
procedure matrixPrint(msg:string;matr:intptr;dim:integer);
var
i,j:integer;
begin
WriteLn(msg);
for i := 1 to dim do begin
for j := 1 to dim do begin
Write(matr^:4,' ');
Inc(matr);
end;
WriteLn;
end;
end;

begin
Randomize;
matrixCreate(@A,5);
matrixPrint('Matrix A:',@A,5);
matrixCreate(@B,6);
matrixPrint('Matrix B:',@B,6);
WriteLn('1/2 sums of traces of matrices:',
(matrixTrace(@A,5)+matrixTrace(@B,6))/2:5:2);
ReadLn;
end.
Неизвестный
02.02.2009, 18:19
общий
это ответ
Здравствуйте, DozoRRR!
Следом(шпуром) матрицы называется сумма элементов матрицы, находящихся на главной диагонали.
Соответственно, если от вас требуется найти полусумму следов матриц, то вам необходимо вычислить сумму диагональных элементов 1-ой матрицы, сумму диагональных элементов 2-ой матрицы, затем сложить их и разделить на 2.
Ниже приведена нужная вам программа с комментариями.


Приложение:
program m;
var{описание используемых переменных}
i,j:integer;{переменные целого типа}
a:array[1..5,1..5] of real;{массив 5x5 с элементами вещественного типа}
b:array[1..6,1..6] of real;{массив 6x6 с такими же элементами}
sled_a,sled_b,polusumma_sledov:real;{переменные вещественного типа}
begin
writeln('Vvedite elementi matrixi A:');{выводится строка, приглашающая вас ввести элементы А матрицы}
for i:=1 to 5 do{цикл}
for j:=1 to 5 do{вложенный цикл. С помощью этих циклов вы задаёте элементы матрицы А}
begin
write('a[',i,',',j,']=');
readln(a[i,j]);
end;
writeln('Vvedite elementi matrixi B:');
for i:=1 to 6 do
for j:=1 to 6 do
begin
write('b[',i,',',j,']=');
readln(b[i,j]);
end;

sled_a:=0;{инициализация переменной sled_a}
sled_b:=0;{инициализация переменной sled_b}
for i:=1 to 5 do{цикл, в котором считаются следы А-матрицы и В-матрицы}
begin
sled_a:=sled_a+a[i,i];
sled_b:=sled_b+b[i,i];
end;
sled_b:=sled_b+b[6,6];{чтобы следы матриц посчитались в одном цикле, последний элемент следа В-матрицы, я вынес за цикл}

writeln;
writeln('sled_a=',sled_a);
writeln('sled_b=',sled_b);
polusumma_sledov:=(sled_a+sled_b)/2;{считается полусумма следов матриц}
writeln('Polusumma_sledov=',Polusumma_sledov:3:3);{вывод на экран. строка "Polusumma_sledov:3:3" означает, что переменная Polusumma_sledov выйдет на экран с 3-мя знаками до запятой(если таковые есть и с 3-мя знаками после запятой.}

readln;{оператор, позволяющий задержаться после вывода всех строк до момента нажатия на любую клавишу}
end.
Неизвестный
14.02.2009, 16:25
общий
Motoden,вот пример Вашего кода:
Код:

sled_a:=0;{инициализация переменной sled_a}
sled_b:=0;{инициализация переменной sled_b}
for i:=1 to 5 do{цикл, в котором считаются следы А-матрицы и В-матрицы}
begin
sled_a:=sled_a+a[i,i];
sled_b:=sled_b+b[i,i];
end;
sled_b:=sled_b+b[6,6];

Не стоит так делать. Хоть это и работает тем не менее в случае модификации кода(изменение размерности матриц) могут возникнуть проблемы с переносом. Уж лучше было бы организовать 2 цикла или вынести код в отдельную функцию.
Форма ответа