![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вычисления [D7, WinXP]
q10nik © (2006-12-06 15:52:00)Есть двумерный массив МхN как вычислить
сумму каждого элемента массива с остальными
кроме тех, с какими он находится в одном столбце
результаты сохранить в динамическом массиве
ЗЫ:матрица меняет свой размер, столбцы:m
строки:n
________________________
| | Р | | | | | | |
|__|__|__|__|__|__|__|__|
| | Х| | | | | | |
|__|__|__|__|__|__|_ _|__|
| | Х| | | | | | |
|__|__|__|__|__|__|__|__|
| | Х| | | | | | |
|__|__|__|__|__|__|__|__|
| | Х| | | | | | |
|__|__|__|__|__|__|__|__|
| | Х| | | | | | |
|__|__|__|__|__|__|__|__|
делаю так, но правильно ли??
И можно ли это делать быстрее
var
r:array of real;
i,i1,j,j1,k,m,n:cardinal;
begin
SetLength(r,m*n);
k:=0;
For i:=1 to m do
For j:=1 to n do
begin
Sum:=0;
for i1:=1 to m do
begin
if i1<>i then
for j1:=1 to n do
sum:=sum+matr[i1,j1];
end;
r[k]:=sum;
Inc(k);
end;
end;
novill (2006-12-06 16:04:00) [1]> И можно ли это делать быстрее
Можно.
1.Для этого один раз посчитай суммы по столбцам, а потом работай уже с ними.
2.Можно еще чуть ускорить, если посчитать для каждого столбца сумму всех столбцов, кроме текущего. тогда
цикл
for i1:=1 to m do
begin
if i1<>i then
for j1:=1 to n do
sum:=sum+matr[i1,j1];
end;
превратится в одно сложение.
MBo (2006-12-06 15:57:00) [2]один раз посчитать суммы для каждого столбца и для всей матрицы, далее простой арифметикой получить нужный результат