Hellko

16

Apr 7th, 2013
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.51 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. class array {
  4. protected:
  5.     int dim;
  6.     int* arr;
  7. public:
  8.     array(int d=3);
  9.     array(int*, int d=3);
  10.     ~array();
  11.     void show();
  12.     int dimension() {return dim;}
  13. };
  14. array::array(int d) {
  15.     dim=d;
  16.     arr = new int[dim];
  17.     for(int i=0; i<dim; i++) arr[i]=1;
  18. }
  19. array::array(int* a, int d) {
  20.     dim=d;
  21.     arr = new int[dim];
  22.     for(int i=0; i<dim; i++) arr[i]=a[i];
  23. }
  24. array::~array() {
  25.     delete[] arr;
  26. }
  27. void array::show() {
  28.     for(int i=0; i<dim; i++) printf("%3d",arr[i]);
  29.     printf("\n");
  30. }
  31.  
  32. class polynom : public array {
  33. private:
  34. public:
  35.     polynom(int d=3): array(d) {}
  36.     polynom(int* m, int d=3): array(m,d) {}
  37.     polynom(const polynom&);            //копи конструктор
  38.     void operator=(const polynom&);
  39. //    ~polynom();               //Деструктор возьмем из базового класса
  40.     int& operator[](int);           //доступ к элементу: 0 элемент - 0 степень х, 1 эл - 1 степень etc
  41.     void operator+=(polynom);               //+
  42.     void operator-=(polynom);               //-
  43.     int  operator*=(polynom);           //плохой вариант для реализации скалярного произведения (оно число)
  44.     int operator()(int x);          //вычисление значения P(x)
  45.     friend polynom derive(polynom);     //производная P_{n-1}=P'_n
  46.     void show();                //вывод полинома на экран
  47.     friend int operator*(polynom,polynom);  //хороший вариант для скалярного произведения
  48.     friend polynom operator+(polynom,polynom);  //+
  49.     friend polynom operator-(polynom,polynom);  //-
  50. };
  51. polynom operator-(polynom a,polynom b) {
  52.     polynom tmp(b);
  53.     for(int i=0; i<tmp.dim; i++) tmp[i]*=-1;
  54.     return a+tmp;
  55. }
  56. void polynom::operator-=(polynom b) {
  57.     (*this)=(*this)-b;
  58. }
  59. polynom operator+(polynom a,polynom b) {
  60.     polynom tmp((a.dim>b.dim)?a.dim:b.dim);
  61.     for(int i=0;i<tmp.dim;i++) tmp[i]=((i<a.dim)?a[i]:0) + ((i<b.dim)?b[i]:0);
  62.     return tmp;
  63. }
  64. void polynom::operator+=(polynom b) {
  65.     (*this)=(*this)+b;
  66. }
  67.  
  68. int polynom::operator*=(polynom a) {
  69.     return (*this)*a;
  70. }
  71.  
  72. int pow(int a, int x) {
  73.     int tmp=1;
  74.     for(int i=0;i<x;i++) tmp*=a;
  75.     return tmp;
  76. }
  77. int polynom::operator()(int x) {
  78.     int value=0;
  79.     for(int i=0; i<dim; i++)
  80.         value+=arr[i]*pow(x,i);
  81.     return value;
  82. }
  83. int operator*(polynom a,polynom b) {
  84.     return derive(a)(-1)*derive(b)(-1)+derive(a)(0)*derive(b)(0)+derive(a)(1)*derive(b)(1);
  85. }
  86. void polynom::operator =(const polynom &in) {
  87.     dim=in.dim;
  88.     arr = new int [dim];
  89.     for(int i=0;i<dim;i++)
  90.         arr[i]=in.arr[i];
  91. }
  92.  
  93. polynom::polynom(const polynom &in) {
  94.     dim=in.dim;
  95.     arr = new int [dim];
  96.     for(int i=0;i<dim;i++)
  97.     arr[i]=in.arr[i];
  98. }
  99. int& polynom::operator[](int k) {
  100.     return arr[k];
  101. }
  102. void polynom::show() {
  103.     for(int i=0;i<dim;i++) /*if(arr[i]!=0)*/ printf("%+4dx%-2d",arr[i],i);
  104.     printf("\n");
  105. }
  106. polynom derive(polynom in) {
  107.     polynom tmp(in.dim-1);
  108.     for(int i=1;i<in.dim;i++) tmp[i-1]=i*in[i];
  109.     return tmp;
  110. }
  111.  
  112. int main() {
  113.     int n=4;
  114.     int *m1=new int [n];
  115.     int *m2=new int [n-1];
  116.     m1[0]=2;    m2[0]=4;
  117.     m1[1]=5;    m2[1]=2;
  118.     m1[2]=-4;   m2[2]=6;
  119.     m1[3]=9;    //m2[3]=4;
  120.     polynom a(m1,4), b(m2,4-1);
  121.     a.show();
  122.     b.show();
  123.     printf("Scalar: %d\na(1)=%d\n",a*b,a(1));
  124.     printf("a+b= ");
  125.     (a+b).show();
  126.     (a+b).array::show();
  127.  
  128. }
Advertisement
Add Comment
Please, Sign In to add comment