Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- class array {
- protected:
- int dim;
- int* arr;
- public:
- array(int d=3);
- array(int*, int d=3);
- ~array();
- void show();
- int dimension() {return dim;}
- };
- array::array(int d) {
- dim=d;
- arr = new int[dim];
- for(int i=0; i<dim; i++) arr[i]=1;
- }
- array::array(int* a, int d) {
- dim=d;
- arr = new int[dim];
- for(int i=0; i<dim; i++) arr[i]=a[i];
- }
- array::~array() {
- delete[] arr;
- }
- void array::show() {
- for(int i=0; i<dim; i++) printf("%3d",arr[i]);
- printf("\n");
- }
- class polynom : public array {
- private:
- public:
- polynom(int d=3): array(d) {}
- polynom(int* m, int d=3): array(m,d) {}
- polynom(const polynom&); //копи конструктор
- void operator=(const polynom&);
- // ~polynom(); //Деструктор возьмем из базового класса
- int& operator[](int); //доступ к элементу: 0 элемент - 0 степень х, 1 эл - 1 степень etc
- void operator+=(polynom); //+
- void operator-=(polynom); //-
- int operator*=(polynom); //плохой вариант для реализации скалярного произведения (оно число)
- int operator()(int x); //вычисление значения P(x)
- friend polynom derive(polynom); //производная P_{n-1}=P'_n
- void show(); //вывод полинома на экран
- friend int operator*(polynom,polynom); //хороший вариант для скалярного произведения
- friend polynom operator+(polynom,polynom); //+
- friend polynom operator-(polynom,polynom); //-
- };
- polynom operator-(polynom a,polynom b) {
- polynom tmp(b);
- for(int i=0; i<tmp.dim; i++) tmp[i]*=-1;
- return a+tmp;
- }
- void polynom::operator-=(polynom b) {
- (*this)=(*this)-b;
- }
- polynom operator+(polynom a,polynom b) {
- polynom tmp((a.dim>b.dim)?a.dim:b.dim);
- for(int i=0;i<tmp.dim;i++) tmp[i]=((i<a.dim)?a[i]:0) + ((i<b.dim)?b[i]:0);
- return tmp;
- }
- void polynom::operator+=(polynom b) {
- (*this)=(*this)+b;
- }
- int polynom::operator*=(polynom a) {
- return (*this)*a;
- }
- int pow(int a, int x) {
- int tmp=1;
- for(int i=0;i<x;i++) tmp*=a;
- return tmp;
- }
- int polynom::operator()(int x) {
- int value=0;
- for(int i=0; i<dim; i++)
- value+=arr[i]*pow(x,i);
- return value;
- }
- int operator*(polynom a,polynom b) {
- return derive(a)(-1)*derive(b)(-1)+derive(a)(0)*derive(b)(0)+derive(a)(1)*derive(b)(1);
- }
- void polynom::operator =(const polynom &in) {
- dim=in.dim;
- arr = new int [dim];
- for(int i=0;i<dim;i++)
- arr[i]=in.arr[i];
- }
- polynom::polynom(const polynom &in) {
- dim=in.dim;
- arr = new int [dim];
- for(int i=0;i<dim;i++)
- arr[i]=in.arr[i];
- }
- int& polynom::operator[](int k) {
- return arr[k];
- }
- void polynom::show() {
- for(int i=0;i<dim;i++) /*if(arr[i]!=0)*/ printf("%+4dx%-2d",arr[i],i);
- printf("\n");
- }
- polynom derive(polynom in) {
- polynom tmp(in.dim-1);
- for(int i=1;i<in.dim;i++) tmp[i-1]=i*in[i];
- return tmp;
- }
- int main() {
- int n=4;
- int *m1=new int [n];
- int *m2=new int [n-1];
- m1[0]=2; m2[0]=4;
- m1[1]=5; m2[1]=2;
- m1[2]=-4; m2[2]=6;
- m1[3]=9; //m2[3]=4;
- polynom a(m1,4), b(m2,4-1);
- a.show();
- b.show();
- printf("Scalar: %d\na(1)=%d\n",a*b,a(1));
- printf("a+b= ");
- (a+b).show();
- (a+b).array::show();
- }
Advertisement
Add Comment
Please, Sign In to add comment