Ну что же вам не спится?
Положим матрица NxN задана как некий класс, имеющий операцию operator() (int i, int j) const для доступа на чтение к элементу матрицы i,j
Например, это может быть такой класс:
| Код | template <size_t N> class matrix { double m[N][N]; public: size_t size () const { return N; } double operator() (size_t i, size_t j) const { return m[i][j]; } double& at (size_t i, size_t j) { return m[i][j]; } };
|
теперь определим функцию вычисления длины вектора, который является столбцом вышеупомянутой матрицы
| Код | template <typename M> double L (const M& m, size_t column) { double l = 0; for (size_t i=0; i < m.size(); ++i) l += m(i,column)*m(i,column);
return sqrt (l); }
|
наконец, функция вычисления номера столбца
| Код | template <typename M> size_t max_column (const M& m) { size_t n = 0; double l = L (m,0); for (size_t i=1; i < m.size(); ++i) { double new_l = L(m,i); if (new_l > l) { n = i; l = new_l; } }
return n; }
|
И чтоб вам совсем легко жилось, программа, которая все это использует:
| Код | int main () { matrix<3> m; // заполняем какими то значениями for (size_t i=0; i < 3; ++i) for (size_t j=0; j < 3; ++j) m.at(i,j) = i+j; size_t n = max_column (m);
std::cout << "Наибольшая длина " << L(m,n) << " у вектора-столбца под номером " << n << std::endl; return 0; }
|
|