Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архив1 / docx57 / Курсовая С .docx
Скачиваний:
56
Добавлен:
01.08.2013
Размер:
48.61 Кб
Скачать

§ 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!";}//если длины не равны, то многочлены так же не равны

Литература

  1. ru.wikipedia.org/wiki/Многочлен

  2. http://cppstudio.com/uchebniki/yazyk-programmirovaniya-s/klassy-v-s/

  3. http://www.sernam.ru/c_61.php

  4. http://www.coolreferat.com

  5. http://www.totl1.com/page.php?p=69

  6. http://edu.kubannet.ru/dlrstore/e4d919f5-8435-4fe3-a779-275181a69951/M_1.2.1/M_1.2.1.html

  7. http://citforum.ru/programming/bcpp/r25_1.shtml

  8. http://gr682423.narod.ru/semestr_7/itpsu/overload.html

Соседние файлы в папке docx57