§ 2.4. Операция вычитания
mn mn :: operator - (mn c)
{ mn d; int i; int max;
max=0; //переменная для хранения максимальной длины многочлена
if (n>c.n) //находим максимальную длину многочлена из двух данных, если первый больше, то:
{for (i=c.n+1; i<=n+1; i++) //увеличиваем длину второго многочлена до длины первого многочлена
c.a[i]=0; //добавляем недостающие элементы во второй многочлен, задавая им значение 0
max=n;} //заносим в переменную максимальную длину многочлена
else if (c.n>n) //если второй многочлен больше, то:
{for (i=n+1; i<=c.n; i++) //увеличиваем длину второго многочлена до длины первого многочлена
a[i]=0; //добавляем недостающие элементы в первый многочлен, задавая им значение 0
max=c.n;} //заносим в переменную максимальную длину многочлена
else max=n; //заносим в переменную максимальную длину многочлена
for (i=1; i<=max; i++)
d.a[i]=a[i]-c.a[i];//пробегая оба многочлена, заносим в результат разность элементов каждого
cout<<endl;
d.n=max; //длину результативного многочлена приравниваем значению переменной
return d;} // возвращаем результативный многочлен
§ 2.5. Операция умножения
mn mn :: operator *(mn c)
{ mn r; mn d; mn s;
int k, st=0, ch=0, l=0, i, j;
d.n=n; //присваиваем промежуточному многочлену длину
for (i=1; i<=n; i++)
for (j=1; j<=c.n;j++){
s.a[j*n+i]=(i-1)+(j-1);//заносим степени
d.a[j*n+i]=a[i]*c.a[j];}//заносим произведение аргументов
st=n+c.n-1; //заносим в переменную длину многочлена
r.n=st; //длину результативного многочлена приравниваем значению переменной
for (l=1; l<=st; l++){//запускаем цикл для приведения подобных слагаемых
ch=0;
for (i=n; i>=1;i--)
for (j=c.n; j>=1;j--){
k=st-l; //вычисляем, с какой степенью будем работать
if (s.a[j*n+i]==k) //если степень очередного элемента равна k, то:
{ch+=d.a[j*n+i];}//в промежуточную переменную суммируем все элементы с этими степенями
r.a[st-l+1]=ch;} } //присваиваем результативному многочлену сумму подобных слагаемых
cout<<endl;
return r;}//возвращаем результативный многочлен
§ 2.6. Операция деления
§ 2.7. Операция присваивания
mn mn :: operator =(mn c)
{ n=c.n;//длину результативного многочлена задаем равной длине присваиваемого многочлена
for(int i=c.n; i>0; i--) a[i]=c.a[i];//присваиваем значения поэлементно
return *this;}//возвращаем результативный многочлен
§ 2.8. Операция возведения в степень
§ 2.9. Операция ввода
void mn :: vvod()
{ cout<<"Input elements of massive: "<<endl;
cout <<"Kol-vo elementov: " << endl;
cin >> n;
for (int i=1;i<=n;i++) a[i]=rand()%9+1;//задаём элементы случайным образом
cout<<endl;}
§ 2.10. Операция вывода
void mn :: Print()
{ cout<<"Output : ";
for (int i=n;i>0;i--)
if (a[i]>=0)//проверяем элемент на знак (больше или меньше 0)
{if (i-1!=0)
{if (i-2!=0)
cout<<a[i]<<"x^"<<i-1<<"+";
else cout<<a[i]<<"x"<<"+";}
else cout<<a[i];}
else {if (i-1!=0)
{if (i-2!=0)
cout<<"("<<a[i]<<")"<<"x^"<<i-1<<"+";
else cout<<"("<<a[i]<<")"<<"x"<<"+";}
else cout<<"("<<a[i]<<")";}
cout<<endl;
cout<<endl;}
§ 2.11. Операция нахождения производной
void mn :: proizvodnaya()
{int l; l=0;
cout<<"Output of polynomial derivative: ";
for (int i=n;i>=1;i--)
if (i-1!=0)
{l=i-2;
if (l>=2)
cout<<a[i]*(i-1)<<"x^"<<l<<"+";
else if (l==1) cout<<a[i]*(i-1)<<"x"<<"+";
else cout<<a[i];}
cout<<endl;}
§ 2.12. Операция нахождения значения в точке x0
void mn :: vtochkex0()
{ double x,s;
s=0;//результативная переменная
cout<<"Input x0: ";
cin>>x;//задаём значение точки х0
for (int i=n; i>0; i--)
if (i-1!=0) //если степень не равна 0, то:
s+=a[i]*pow(x,i-1);//в переменной накапливаем произведение элемента и очередной степени х0
else s+=a[i];//иначе суммируем просто элемент и результативную переменную
cout<<endl;
cout<<"V tochke x0 znacheniye= "<<s<<endl;}
§ 2.13. Операция сравнения
mn mn :: operator ==(mn c)
{int p=0;
if (n==c.n) //если длины многочленов равны, то:
{for (int i=1; i<=n; i++)
if (a[i]-c.a[i]==0) p++; //если разница элементов равна нулю, то увеличиваем на 1 переменную p
if (p==n) cout<<"YES"; //если переменная p равна n, то многочлены равны
else cout<<"NO!";} //иначе – не равны
else cout<<"NO!";}//если длины не равны, то многочлены так же не равны
Литература
ru.wikipedia.org/wiki/Многочлен
http://cppstudio.com/uchebniki/yazyk-programmirovaniya-s/klassy-v-s/
http://www.sernam.ru/c_61.php
http://www.coolreferat.com
http://www.totl1.com/page.php?p=69
http://edu.kubannet.ru/dlrstore/e4d919f5-8435-4fe3-a779-275181a69951/M_1.2.1/M_1.2.1.html
http://citforum.ru/programming/bcpp/r25_1.shtml
http://gr682423.narod.ru/semestr_7/itpsu/overload.html