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).может вызов конструктора неправильный у меня ?
посмотрите что не так?