Voodoo Man писал(а):
Вообще, на какого рода работу рассчитан этот класс? какие ограничения по степени у полиномов?
класс расчитан на выполнение операций над полиномами, ограничений по степени полинома нету.
Lotos писал(а):
(Кстати, Вы исправили круглые скобки на квадратные везде?)
Исправил вот что получилось:
Код:
class polinom
{
 private:
  int n;   // степень полинома
  int * a; // массив для коэффициентов полинома
 public:
  polinom(int nn);      // конструктор
  polinom(const polinom& t);
  ~polinom(void); // деструктор
  polinom operator+(polinom& );
  polinom operator*(polinom&);
  int input(int nn); // ввод
  void output(void); // печать
};
// конструктор
polinom :: polinom(int nn)
{
 n=nn;
 a=new int[n];
 for(int i=0;i<n;++i)
  a[i]=0;
}
polinom::polinom(const polinom& t) 
{
  if(n!=t.n)
  {
     delete []a;
     n=t.n;
     a=new int[n];
  }
  for(int i=0;i<n;++i)
  a[i]=t.a[i];
}
// деструктор
polinom::~polinom(void)
{
  delete []a;
}
  // сложение двух полиномов
polinom polinom :: operator+(polinom& t)/*в случае если писать в паараметре (const polinom& t) то пишет ошибку! пробовал писать
polinom polinom :: operator*(const polinom& t) const не помогло*/
{
  if(n>=t.n)
   {
      polinom temp(n);
      for(int i=0;i<n;++i)
      temp.a[i]=a[i]+t.a[i];
      return temp;
   };
  if (n<t.n)
   {
      polinom temp(t.n);
      for(int i=0;i<t.n;++i)
      temp.a[i]=a[i]+t.a[i];
      return temp;
   };
}
// произведение полиномов 
polinom polinom :: operator*(polinom& t) 
{
  polinom temp(n+t.n);
  for (int i = 0; i < n; ++i)
   {
      for (int j = 0; j <t.n ; ++j)
      {
       temp.a[i+j]+=a[i]*t.a[j];
         }
   }
  return temp;
}
// ввод полинома
int polinom::input(int nn)
{
  delete[]a;
  n=nn;
  a =  new int [n];
  printf("Input koeff :\n");
  for(int i=0;i<n;++i)
  {
     printf("a[%d] = ",i);
     scanf("%d",&a[i]);
  };
  return 0;
};
// печать полинома
void polinom::output(void)
{
   int bb;
   bb=n;
   while(a[bb]==0&&bb>=0)
   bb=bb-1;
   if(bb<0) printf("Polinom raven 0");
   else
   {
      if(bb==0) printf("%d",a[0]);
      else
      {
         printf("%dx^%d",a[bb],bb);
         bb=bb-1;
         for(int i=bb;i>0;i--)
         {
            if (a[i]<0)
            {
               printf("%d",a[i]);
            };
            if (a[i]>0)
            {
               printf("+%d",a[i]);
            };
            if (a[i]!=0)
            {
               printf("x^%d",i);
            };
         };
         if (a[0]<0) printf("%d",a[0]);
         if (a[0]>0)
            {
               printf("+%d",a[0]);
            }
         }
   }
}
int _tmain(int argc, _TCHAR* argv[])
{
    int i;
    int nn;
    nn=1;
    polinom a(nn),b(nn),c(nn);
    printf("Input degree for Polynom_1 = ");
    scanf("%d",&nn);
    a.input(nn);
    printf("Polynom_1 = ");
    a.output();
    printf("Input degree for Polynom_2 = ");
    scanf("%d",&nn);
    b.input(nn);
    printf("Polynom_2 = ");
    b.output();
    c=a+b;
    printf("Sum polynom is = \n");
    c.output();
}
но все равно не работает как надо. но теперь после того как переделал условие в цикле for(int i = 0; i<n; ++i) на строгое неравенсто i<n,при вводе полинома например 2-ой степени он запрашивает коэфф. a[0] и a[1], т.е. получается
полином не 2-ой степени,а как бы первой(2x^1+5).может вызов конструктора неправильный у меня ?
посмотрите что не так?