Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++] работа с векторами в матрице


Автор: bboy7 6.12.2007, 02:05
Вот собственно задание smile , помогите плз., заранее спс.

Автор: baldina 6.12.2007, 02:39
Ну что же вам не спится?

Положим матрица 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;
}

Автор: bboy7 6.12.2007, 05:12
О,спс.smile smile  Радует что есть умные люди, а не спиццо -работа... smile 

Автор: bboy7 6.12.2007, 05:55
Сори,не хочу показаться наглым, ну не моё это... smile ,помогите с последним заданием еще smile 

Автор: DigitSphinx 6.12.2007, 07:50
bboy7,тебе в Центр Помощи

baldina, такая лаба это уровень 1-го курса, так что писать её через шаблон просто палево! 

Автор: Earnest 6.12.2007, 08:37
Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 

Автор: baldina 6.12.2007, 09:03
А што, на первом курсе темплейты не проходят? А когда? И какие предположения делать о представлении матрицы?
Во-вторых, если студент не дундук, сообразит что с этим делать (или товарисчи подскажут). А если дундук, так ему и без темплейтов не поможет.
В третьих сделано именно по студенчески. Профессионал написал бы не так.
Наконец, шибко умные могут свой вариант привести.

Добавлено через 6 минут и 59 секунд
Цитата(bboy7 @ 6.12.2007,  05:55)
Сори,не хочу показаться наглым, ну не моё 

Работать пора, да и лениво из пустого в порожнее. DigitSphinx прав, если вы этого не понимаете, то только палиться.
Так что ограничусь советом. У вас есть вышепреведенная функция L. Переделайте её, запихнув вместо вычисления длины вектора формулы из второго задания. 

Автор: Rodman 6.12.2007, 10:16

M
Rodman
Модератор: Название темы должно отражать ее суть!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)