Guest User

Untitled

a guest
Sep 20th, 2015
177
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.42 KB | None | 0 0
  1. #include <iostream>
  2. #include <conio.h>
  3. #include <math.h>
  4. using namespace std;
  5. class Polynom {
  6.     int n;
  7.     double *koef;
  8. public:
  9.     Polynom(); //конструкторы
  10.     Polynom(int k);
  11.     Polynom(int k, double *mas);
  12.     Polynom(const Polynom&ob); //конструктор копирования
  13.     ~Polynom(){ delete[]koef; }
  14.     void GiveMemory(int k);
  15.     void SetPolynom(int k, double *mas);
  16.     void SetDegree(int k){ n = k; }; //установить степень
  17.     void CalculateValue(double x);  //вычислить значение
  18.     int GetDegree(){ return n; };   //получить степень
  19.     double GetOneCoefficient(int i){ return(koef[i]); };
  20.     Polynom operator+(Polynom ob); //перегрузка операторов
  21.     Polynom operator*(Polynom ob);
  22.     double& operator[](int i){ return(koef[i]); }//перегрузка []
  23.     Polynom& operator = (const Polynom p) {
  24.         if (&p == this) return *this;
  25.         if (koef) delete[] koef;
  26.         n = p.n;
  27.         koef = new double[p.n + 1];
  28.         for (int i = 0; i <= p.n; i++)
  29.             koef[i] = p.koef[i];
  30.         return *this;
  31.     }
  32.     friend ostream& operator<<(ostream& mystream, Polynom &ob);
  33.     friend istream& operator>>(istream& mystream, Polynom &ob);
  34.     int min(int n, int m)
  35.     {
  36.         return (n<m) ? n : m;
  37.     }
  38.     int max(int n, int m)
  39.     {
  40.         return (n>m) ? n : m;
  41.     }
  42. };
  43. //*********** Polynom() **********************************
  44. Polynom::Polynom()
  45. {
  46.     randomize();
  47.     n = random(5);
  48.     koef = new double[n + 1];
  49.     if (!koef){ cout << "Error"; getch(); return; }
  50.     for (int i = n; i >= 0; i--)
  51.         koef[i] = random(10) - 5;
  52. }
  53. //************* Polynom(int k) *******************************
  54. Polynom::Polynom(int k)
  55. {
  56.     n = k;
  57.     koef = new double[n + 1];
  58.     if (!koef){ cout << "Error"; getch(); return; }
  59.     for (int i = n; i >= 0; i--)
  60.         koef[i] = random(10) - 5;
  61. }
  62. //****************** Polynom(int k,double mas[]) ******************
  63. Polynom::Polynom(int k, double mas[])
  64. {
  65.     n = k;
  66.     koef = new double[n + 1];
  67.     if (!koef){ cout << "Error"; getch(); return; }
  68.     for (int i = n; i >= 0; i--)
  69.         koef[i] = mas[i];
  70. }
  71. //*************** Polynom(const Polynom&ob) *********************
  72. Polynom::Polynom(const Polynom&ob)
  73. {
  74.     n = ob.n;
  75.     koef = new double[n + 1];
  76.     if (!koef){ cout << "Error"; getch(); return; }
  77.     for (int i = 0; i <= n; i++)
  78.         koef[i] = ob.koef[i];
  79. }
  80. //**************** void GiveMemory(int k) **********************
  81. void Polynom::GiveMemory(int k)
  82. {
  83.     if (koef) delete[] koef;
  84.     koef = new double[k + 1];
  85.     if (!koef){ cout << "Error"; getch(); return; }
  86. }
  87. //******************** SetPolynom **************************
  88. void Polynom::SetPolynom(int k, double *mas)
  89. {
  90.     n = k;
  91.     if (koef) delete[] koef;
  92.     koef = new double[n + 1];
  93.     for (int i = n; i >= 0; i--)
  94.         koef[i] = mas[i];
  95. }
  96. //*************** CalculateValue *****************************
  97. void Polynom::CalculateValue(double x = 1.0)
  98. {
  99.     double s;
  100.     int i;
  101.     for (s = koef[0], i = 1; i <= n; i++)
  102.         s = s + koef[i] * pow(x, i);
  103.     cout << "f(" << x << ")="; cout << s << endl;
  104. }
  105. //**************** Polynom operator+(Polynom ob) ***************
  106. Polynom Polynom::operator+(Polynom ob)
  107. {
  108.     int i;
  109.     Polynom rab;
  110.     rab.GiveMemory(max(n, ob.GetDegree()));
  111.     for (i = 0; i <= min(n, ob.GetDegree()); i++)
  112.         rab.koef[i] = koef[i] + ob.GetOneCoefficient(i);
  113.     if (n<ob.GetDegree())
  114.     {
  115.         for (i = min(n, ob.GetDegree()) + 1; i <= ob.GetDegree(); i++)
  116.             rab.koef[i] = ob.GetOneCoefficient(i);
  117.         rab.n = ob.GetDegree();
  118.     }
  119.     else
  120.     {
  121.         for (i = min(n, ob.GetDegree()) + 1; i <= n; i++) rab.koef[i] = koef[i];
  122.         rab.n = n;
  123.     }
  124.     return rab;
  125. }
  126. //*************** Polynom operator*(Polynom ob) ***************
  127. Polynom Polynom::operator*(Polynom ob)
  128. {
  129.     int i, j, k;
  130.     double s;
  131.     Polynom rab;
  132.     rab.GiveMemory(n + ob.GetDegree());
  133.     for (i = 0; i <= n + ob.GetDegree(); i++)
  134.     {
  135.         s = 0;
  136.         for (j = 0; j <= n; j++)
  137.         for (k = 0; k <= ob.GetDegree(); k++)
  138.         if (j + k == i)s = s + koef[j] * ob.GetOneCoefficient(k);
  139.         rab.koef[i] = s;
  140.     }
  141.     rab.n = n + ob.GetDegree();
  142.     return rab;
  143. }
  144. //********** ostream& operator<<(ostream& mystream,Polynom &ob) ******
  145. ostream& operator<<(ostream& mystream, Polynom &ob)
  146. {
  147.     char c = ' '; //пропустим “+” перед первым коэффициентом
  148.     for (int i = ob.n; i >= 0; i--)
  149.     {
  150.         double ai = ob.koef[i];
  151.         if (ai == 0) continue;
  152.         else { if (ai>0) mystream << c; mystream << ai; }
  153.         if (i == 0) continue; else mystream << "x";
  154.         if (i == 1) continue; else mystream << "^" << i;
  155.         if (ai != 0)c = '+';
  156.     }
  157.     if (c == ' ')mystream << 0;
  158.     mystream << endl;
  159.     return mystream;
  160. }
  161. //********* istream& operator>>(istream& mystream,Polynom &ob) *
  162. istream& operator>>(istream& mystream, Polynom &ob)
  163. {
  164.     int i;
  165.     cout << "Enter Degree:";  mystream >> ob.n; cout << endl;
  166.     for (i = ob.n; i >= 0; i--)
  167.     {
  168.         cout << "Enter koeff " << i << ":";  mystream >> ob.koef[i];
  169.     }
  170.     return mystream;
  171. }
  172. //******************** MAIN ****************************
  173. int main(int argc, char* argv[])
  174. {
  175.     const int m = 3;
  176.     Polynom f, g, masp[m], *p1, s;
  177.     int n = 5, i;
  178.     double K[6] = { 1.0, 3.2, 0.0, 4.1, 0.0, 1.1 };
  179.     p1 = new Polynom(n, K);
  180.     cout << *p1;
  181.     p1->CalculateValue(2.0);
  182.     cin >> f;
  183.     cout << " f(x)= ";  cout << f;
  184.     cout << " g(x)= "; cout << g;
  185.     s = f + g;
  186.     cout << "f(x)+g(x) = "; cout << s;
  187.     s = f*g;
  188.     cout << " f(x)*g(x) = ";  cout << s;
  189.     s = masp[0]; cout << masp[0];
  190.     for (i = 1; i<m; i++)
  191.     {
  192.         s = s + masp[i]; cout << masp[i];
  193.     }
  194.     cout << "Summa: ";  cout << s;
  195.     while (!kbhit());
  196.     delete p1;
  197.     return 0;
  198. }
Advertisement
Add Comment
Please, Sign In to add comment