На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
  
> Задание: реализовать класс Polynom на c++
    Прошу помощи - нужно доделать код, который я попытался написать. Доделать его нужно согласно заданию: "Разработать класс «Полином» от одной переменной.
    Полином задается степенью и массивом коэффициентов. Реализовать методы для вычисления значения полинома, сложения, вычитания и умножения полиномов. Перегрузить операции сложения, вычитания, умножения, присваивания для данного
    класса. Полином от одной переменной есть конечная формальная сумма вида: C0 + C1 * (x^1) + ... + Cn * (x^n)"

    Вот код, собственно:

    ExpandedWrap disabled
      #include <iostream>
      #include <cmath>
      #include <algorithm>
      #include <vector>
      using namespace std;
       
      class Polynom
      {
          public:
              Polynom (vector <double>& koefs);
       
          double operator() (double x) const
          {
              double otvet = 0;
              for (int i = 0; i < koefs.size(); i++)
              {
                  otvet += koefs[i] * pow(x, i);
              }
              return otvet;
          }
          
          Polynom operator+ (const Polynom& drugie) const
          {
              int razmer = max(koefs.size(), drugie.koefs.size());
              vector <double> otvet(razmer, 0);
              for (int i = 0; i < razmer; i++)
              {
                  if (i < koefs.size())
                  {
                      otvet[i] += koefs[i];
                  }
                  if (i < drugie.koefs.size())
                  {
                      otvet[i] += drugie.koefs[i];
                  }
              }
              return Polynom(otvet);
          }
          
          Polynom operator- (const Polynom& drugie) const
          {
              int razmer = max(koefs.size(), drugie.koefs.size());
              vector <double> otvet(razmer, 0);
              for (int i = 0; i < razmer; i++)
              {
                  if (i < koefs.size())
                  {
                      otvet[i] += koefs[i];
                  }
                  if (i < drugie.koefs.size())
                  {
                      otvet[i] -= drugie.koefs[i];
                  }
              }
              return Polynom(otvet);
          }
          
          Polynom operator* (const Polynom& drugie) const
          {
              int razmer = koefs.size() + drugie.koefs.size() - 1;
              vector <double> otvet(razmer, 0);
              for (int i = 0; i < koefs.size(); i++)
              {
                  for (int j = 0; j < drugie.koefs.size(); j++)
                  {
                      otvet[i + j] += koefs[i] * drugie.koefs[j];
                  }
              }
              return Polynom(otvet);
          }
          
          Polynom& operator+= (const Polynom& drugie)
          {
              *this = *this + drugie;
              return *this;
          }
          
          Polynom& operator-= (const Polynom& drugie)
          {
              *this = *this - drugie;
              return *this;
          }
          
          Polynom& operator*= (const Polynom& drugie)
          {
              *this = *this * drugie;
              return *this;
          }
          
          friend std::ostream& operator<< (ostream& stream, const Polynom& p)
          {
              for (int i = p.koefs.size() - 1; i >= 0; i--)
              {
                  if (p.koefs[i] == 0) continue;  
                  if (i != p.koefs.size() - 1)
                  {
                      if (p.koefs[i] >= 0)
                      {
                          stream << "+" << p.koefs[i];
                      }
                      else
                      {
                          stream << "-" << abs(p.koefs[i]);
                      }
                  }
                  else
                  {
                      stream << p.koefs[i];
                  }
                  if (i > 0)
                  {
                      stream << "x^" << i;
                  }
              }
              return stream;
          }
          
          private:
              vector <double> koefs;
      };
       
      int main()
      {
          return 0;
      }


    Ошибок нет, то есть прога запускается. Если как-то можно, то дружественный оператор "<<" сделать без std да и вообще код в общем без std сделать (проще код читается так). А в int main надо добавить вывод суммы, разности, умножения полиномов и вывод значения полинома. Сделать оператор присваивания и тоже вывести через main. Я просто пробовал в main это всё записывать (выводы значений), но компилятор тогда ругается, поэтому не могу догнать, что нужно подправить, чтобы заданию код соответствовал. Помогите, пожалуйста, люди добрые. Буду очень благодарен))). :rolleyes:
    Сообщение отредактировано: Ghost1503 -
      Ошибка заключается в том, что в классе Polynom объявлен только конструктор, но нет деструктора.
      Это может привести к утечке памяти, если объекты класса будут создаваться динамически.
      Чтобы исправить это, нужно добавить деструктор, который освободит память, выделенную под массив koefs:

      ExpandedWrap disabled
        ~Polynom()
        {
            koefs.clear();
        }
        MaIron, а что, разве вектор, не должен сам самостоятельно очищаться в этом случае?
          Цитата Majestio @
          MaIron, а что, разве вектор, не должен сам самостоятельно очищаться в этом случае?

          Вообще да. Прогнал
            Цитата Qraizer @
            Если кто-то найдётся "сделать вместо", велкам.

            Qraizer, я обычно "залипаю" на вопросы, которые понимаю, что могут быть практически-востребованы. Щетай - вклад в "общественное достояние". Ваще не жалко. А тут я сильно сомневаюсь в практичности, похоже "сферический конь в вакууме от очередного младшего лейтенанта педагогического состава". Не вижу ценности ни вопроса, ни материала.
              В бусте реализован полиноминальная арифметика
                А какие ошибки?
                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script execution time: 0,0252 ]   [ 16 queries used ]   [ Generated: 18.09.24, 15:04 GMT ]