Форум программистов, компьютерный форум CyberForum.ru

класс полиномы - C++

Восстановить пароль Регистрация
 
Antonn
0 / 0 / 0
Регистрация: 22.11.2012
Сообщений: 3
10.11.2013, 23:23     класс полиномы #1
функция сложения работает неправильно когда складываются отрицательные числа и еще функция деления вообщене работает, подскажите в чем ошибка ?
// polinom.cpp: определяет точку входа для консольного приложения.
//
//#include <stdafx.h>
#include <iostream>
#include <cstring>
#include <cstdlib>
using namespace std;
class Polinom
{
int degree;//степень
double*koef;//массив коэффицентов
public:
Polinom(){};//конструктор по умолчанию
Polinom(const Polinom& pol);//Конструктор копирования
Polinom(int count);//Конструктор преобразования типа
~Polinom(){delete[] koef;}//Деструктор
double& operator[](int index);//Обращение по коофиценту
Polinom operator+(Polinom&);//Сумма
Polinom operator-(Polinom&);//Разность
Polinom& operator=(Polinom&);//присваивание
Polinom operator*(Polinom&);//Умножение полинома на полином
Polinom operator/(Polinom&);//Деление
int GetDegr(){return degree;}//Получение степени
int input(int,double* );//Ввод полинома
friend ostream& operator<<(ostream&, Polinom&);//Вывода в поток
};
int Polinom::input(int n, double *k){
degree=n;
koef=new double[degree+1];
for(int i=n;i>=0;i--)
koef[i]=k[i];
return 0;
}
ostream& operator<<(ostream& str, Polinom& pol)
{
int b;
b=pol.degree;
while(pol.koef[b]==0 && b>=0)
b=b-1;
if(b<0)
str<<"Polinom = 0\n";
else
{
if(b==0)
str<<pol.koef[0];
else
{
str<<pol.koef[b]<<"x^"<<b;
b=b-1;
for(int i=b;i>0;i--)
{
if (pol.koef[i]<0) {str<<pol.koef[i];};
if (pol.koef[i]>0) {str<<"+"<<pol.koef[i];};
if (pol.koef[i]!=0) {str<<"x^"<<i;};
};
if (pol.koef[0]<0) str<<pol.koef[0];
if (pol.koef[0]>0) str<<"+"<<pol.koef[0];
}
}
return str;
}
Polinom::Polinom(int count)
{
degree=count;
koef=new double[degree+1];
}
Polinom::Polinom(const Polinom& pol)
{
degree=pol.degree;
koef=new double[degree+1];
for(int i=degree;i>=0;i--)
koef[i]=pol.koef[i];
}
double& Polinom::operator [](int index)
{
static double iErr=-1;
if(index>=0 && index<=degree)
return koef[index];
else
{
std::cout<<"Error with index!"<<'\n';
return iErr;
}
}
Polinom Polinom::operator+(Polinom& pol)
{
if(degree==pol.degree)
{
Polinom temp(degree);
for(int i=pol.degree;i>=0;i--)
temp.koef[i]=koef[i]+pol.koef[i];
return temp;
}
if(degree<pol.degree)
{
Polinom temp(pol.degree);
for(int i=degree;i>=0;i--)
temp.koef[i]=koef[i]+pol.koef[i];
for(int i=pol.degree;i>=degree+1;i--)
temp.koef[i]=pol.koef[i];
return temp;
}
if(degree>pol.degree)
{
Polinom temp(degree);
for(int i=pol.degree;i>=0;i--)
temp.koef[i]=koef[i]+pol.koef[i];
for(int i=degree;i>=pol.degree+1;i--)
temp.koef[i]=koef[i];
return temp;
}
return *this;
}
Polinom Polinom::operator-(Polinom& pol)
{
if(degree==pol.degree)
{
Polinom temp(degree);
for(int i=pol.degree;i>=0;i--)
temp.koef[i]=koef[i]-pol.koef[i];
return temp;
}
if(degree<pol.degree)
{
Polinom temp(pol.degree);
for(int i=degree;i>=0;i--)
temp.koef[i]=koef[i]-pol.koef[i];
for(int i=pol.degree;i>=degree+1;i--)
temp.koef[i]=pol.koef[i];
return temp;
}
if(degree>pol.degree)
{
Polinom temp(degree);
for(int i=pol.degree;i>=0;i--)
temp.koef[i]=koef[i]-pol.koef[i];
for(int i=degree;i>=pol.degree+1;i--)
temp.koef[i]=koef[i];
return temp;
}
return *this;
}
Polinom Polinom::operator *(Polinom& pol)
{
Polinom temp;
temp.degree=degree+pol.degree;
temp.koef=new double[temp.degree+1];
memset(temp.koef, 0, (temp.degree+1)*sizeof(double));
for(int i=0;i<=degree;i++)
{
for(int j=0;j<=pol.degree;j++)
{
temp.koef[i+j] +=koef[i]*pol.koef[j];
}
}
return temp;

}

Polinom Polinom::operator /(Polinom& pol)// получилась какая-то фигня
{Polinom temp;
temp.degree=degree;
temp.koef=new double[temp.degree+1];
memset(temp.koef, 0, (temp.degree+1)*sizeof(double));
for(int i=0;i<=degree;i++)
{
for(int j=0;j<=pol.degree;j++)
{
temp.koef[i+j] -=koef[i]/pol.koef[j];
//temp.koef[i+j]=temp.koef[i+j]-koef[i]/pol.koef[j];
}


}return temp;
}


Polinom& Polinom::operator =(Polinom& t)
{
if(this==&t)
{
return *this;
}
degree=t.degree;
for(int i=degree;i>=0;i--)
koef[i]=t.koef[i];
return *this;
}


int main(){
setlocale(LC_ALL, "Russian");
int n;
int k=0;
double *koef, *koef1;
cout<<"Введите степень первого полинома\n";std::cin>>n;
if(n<0)
{
cout<<"Ошибка ввода. Введите положительное число\n";
// exit(0);
}
Polinom p(n);
koef=new double[n+1];
for(int i=n;i>=0;i--)
{
std::cout<<"Enter " << i << " koef "<<'\n';
std::cin>>koef[i];
if(koef[i]==-842150451)
{
std::cout<<"Ошибка ввода. Введите число\n";
exit(0);
}
}
system("pause");
p.input(n, koef);
int m=-10;
cout<<"Введите степень второго полинома\n";std::cin>>m;
if(m==-10)
{
cout<<"Ошибка ввода. Введите число\n";
exit(0);
}
Polinom s(m);
koef1=new double[m+1];
for(int i=m;i>=0;i--)
{
std::cout<<"Enter " << i << " koef "<<'\n';
std::cin>>koef1[i];
if(koef1[i]==-842150451)
{
std::cout<<"Ошибка ввода. Введите число\n";
exit(0);
}
}
system("cls");
s.input(m, koef1);
cout<<"Первый полином: " << p <<'\n';
cout<<"Второй полином: " << s <<'\n';
if(p.GetDegr()>=s.GetDegr())
k=p.GetDegr();
else
k=s.GetDegr();
Polinom t(k);
t=p+s;
cout<<"\n";
cout<<"Сумма полиномов = " << t <<'\n';
cout<<"\n";
Polinom t1(k);
t1=p-s;
cout<<"\n";
cout<<"Разность полиномов = " << t1 <<'\n';
cout<<"\n";
Polinom x(p.GetDegr()+s.GetDegr());
x=p*s;
cout<<x<<'\n';
Polinom y(p.GetDegr()-s.GetDegr());
y=p/s;
cout<<y<<'\n';
system("pause");
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.11.2013, 23:23     класс полиномы
Посмотрите здесь:

полиномы C++
Полиномы чебышева C++
C++ Полиномы Эрмита
По а и полиному PN(x) получить полиномы QN+1(x)=(x-a)*PN(x) и RN+1(x)=(x+a)*PN(x) C++
C++ Полиномы
C++ STL. Полиномы
C++ BRORLAND C++ полиномы
Полиномы Лежандра C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 23:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru