Операции с полиномами в С++

Рассмотрим программу, предназначенную для обработки полиномиальных выражений. Поскольку полином (как функциональная зависимость) однозначно определяется набором коэффициентов, его разумно реализовать в виде класса с полем-массивом числовых значений. Эти числовые значения отождествим с коэффициентами полинома. В качестве операций, вы­полняемых над полиномом, рассмотрим сложение полиномов, вычитание полиномов, умножение и деление полинома на число, а также вычисление производных от полинома. При этом максимально возможную степень по­линома будем предполагать известной (что позволит нам определить соответствующее значение в виде целочисленной константы). Выполнять перечисленные выше операции будем посредством перегрузки базовых операторов. Программный код приведен в следующем примере.

#include 
#include 
using namespace std;
//Степень полинома:
const int n=5;
class Polynom{
public:
//Коэффициенты полинома:
double a[n+1];
//Перегрузка оператора "скобки" (т.е. ()):
double operator()(double z){
int i;
double s=0;
for(i=0; i <= n; i++) s+=a[i]*pow(z,i);
return s;}
//Перегрузка оператора "запятая" (т.е. ,):
Polynom operator,(int k){
int i;
Polynom tmp;
for(i=0; i <= n; i++) tmp.a[i]=a[i];
switch(k){
case 0:
break;
case 1:
for(i=0; i < n; i++)
 tmp.a[i]=tmp.a[i+1]*(i+1);
tmp.a[n]=0;
break;
default:
//Рекурсия:
tmp=(tmp,1,k-1);}
return tmp;}
//Перегрузка оператора сложения:
Polynom operator+(Polynom obj){
Polynom tmp;
for(int i=0; i <= n; i++)
 tmp.a[i]=a[i]+obj.a[i];
return tmp;}
//Перегрузка оператора вычитания:
Polynom operator-(Polynom obj){
Polynom tmp;
for(int i=0; i <= n; i++)
 tmp.a[i]=a[i]-obj.a[i];
return tmp;}
//Перегрузка оператора умножения:
Polynom operator*(double b){
Polynom tmp;
for(int i=0; i <= n; i++)
 tmp.a[i]=a[i]*b;
return tmp;}
//Перегрузка оператора деления:
Polynom operator/(double b){
Polynom tmp;
for(int i=0; i <= n; i++)
 tmp.a[i]=a[i]/b;
return tmp;}
//Конструктор класса:
Polynom(){
for(int i=0; i <= n; i++)
 a[i]=i+1;
}
};
//Внешняя функция для отображения коэффициентов полинома:
void show(Polynom obj){
for(int i=0; i <= n; i++)
 cout << obj.a[i] << " ";
cout << endl;
}
int main(){
//Создание объектов:
Polynom obj1,obj2;
//Переменные для полиномов:
double x=1,y=-1;
//Коэффициенты полинома:
show(obj1);
//Деление на число:
obj1=obj1/2;
show(obj1);
//Умножение на число:
obj1=obj1*2;
show(obj1);
//Значение полинома:
cout << obj1(x) << endl;
//Производные от полинома:
for(int i=0; i < =3; i++){
 obj2=(obj1,i);
 show(obj2);
}
//Значение производной:
cout << (obj1,1)(y) << endl;
//Значение суммы полиномов:
cout << (obj1+obj2)(x) << endl;
//Значение разности полиномов:
cout << (obj1-(obj1,1,2))(y) << endl;
return 0;}

Онлайн всего: 8
Гостей: 8
Пользователей: 0

Рейтинг@Mail.ru STUDLAB Сообщить про опечатку на сайте

Создать сайт бесплатно