SHARE
TWEET

Untitled

a guest Apr 25th, 2019 70 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include<iostream.h>
  2. struct node
  3. {
  4.     int koef;
  5.         int power;
  6.     node* next;
  7. };
  8. //////////////////////////////////
  9. bool empty_polinom(node* top)
  10. {  
  11.       return top==NULL;
  12. }
  13. ////////////////////////////////////////////// 
  14. void create_polinom(node* &top,node* &end,int n)
  15. {
  16.     int i;
  17.     node* p;
  18.     top = NULL;
  19.     end = NULL;
  20.     for (i=0;i<n;i++)
  21.     {
  22.              p=new node;
  23.         cout<<" enter koef=";
  24.         cin>>p->koef;
  25.             cout<<" enter power=";
  26.         cin>>p->power;
  27.          if (i==0)
  28.          {
  29.                  p->next=top;
  30.                  top=p;
  31.                       end=p;
  32.          } 
  33.              else
  34.              {
  35.                                 end->next=p;
  36.                                 p->next=NULL;
  37.                   end=p;
  38.                     }
  39.     }
  40. }
  41. //////////////////////////////////////////////////
  42. void pop_polinom(node* &top,int &koef,int &power)
  43. {
  44.           node* p;
  45.     if (!empty_polinom(top))
  46.     {
  47.        koef=top->koef;
  48.        power=top->power;
  49.        p=top->next;
  50.             delete top;
  51.        top=p;
  52.     }
  53. }
  54. //////////////////////////////////////////
  55.  void push_polinom(node* &top,node* &end,int koef,int power)
  56. {
  57.    node* p;
  58.    p=new node;
  59.    p->koef=koef;
  60.    p->power=power;
  61.    p->next=NULL;
  62.      if (empty_polinom(top))
  63.      {
  64.         top=p;
  65.              end=p;
  66.      }
  67.         else
  68.         {
  69.                     end->next=p;
  70.            end=p;
  71.         }
  72. }
  73.  
  74.  
  75. //////////////////////////////////////////
  76. void create_polinom_push(node* &top,node* &end,int n)
  77. {
  78.     int i;
  79.     int koef,power;
  80.     top = NULL;
  81.     end = NULL;
  82.         for (i=0;i<n;i++)
  83.     {
  84.                 cout<<" enter koef=";
  85.             cin>>koef;
  86.                  cout<<" enter power=";
  87.             cin>>power;
  88.             push_polinom(top,end,koef,power);
  89.     }  
  90. }
  91. /////////////////////////////////////////
  92. void show_polinom(node* top)
  93.     {
  94.         node* p;
  95.                   p=top;
  96.        while (p)
  97.        {
  98.            cout<<p->koef<<"*x^"<<p->power<<" + ";
  99.            p=p->next;
  100.        }
  101.           cout<<endl;
  102.     }
  103. /////////////////////////////////////////////  
  104. void order_polinom(node* top,node* end)
  105. {
  106.     int koef,power;
  107.         node* p,*q;
  108.      p=top;
  109.       while (p!=end)
  110.       {
  111.             q=p->next;
  112.             while(q)
  113.          {
  114.             if (p->power<q->power)
  115.             {
  116.                 power=p->power;
  117.                           p->power=q->power;
  118.                 q->power=power;
  119.                  koef=p->koef;
  120.                           p->koef=q->koef;
  121.                 q->koef=koef;
  122.             }
  123.                  q=q->next;
  124.         }
  125.         p=p->next;
  126.     }
  127. }
  128. ///////////////////////////////////////////////////////////
  129. node* previous(node* top,node* p)
  130. {
  131.      node* pr, *q;
  132.      q=top;
  133.      pr=NULL;
  134.       while ( q!=p && q)
  135.       {
  136.                  pr=q;
  137.             q=q->next;
  138.       }
  139.  
  140.        if (q==p) return pr;
  141.        return NULL;
  142. }  
  143. ///////////////////////////////////////////////////////////////
  144. void collecting_terms_in_polinom(node* &top,node* end)
  145. {
  146.        int koef,power;
  147.        order_polinom(top,end);
  148.        node* p,* q,*pr;
  149.        p=top;
  150.        q=p->next;
  151.            while (q)
  152.            {
  153.                 if (p->power==q->power)
  154.                 {
  155.                     q->koef=q->koef+p->koef;
  156.                     if (p==top)
  157.                     {
  158.                         pop_polinom(top,koef,power);
  159.                                 p=top;
  160.                     }
  161.                        
  162.                         else
  163.                     {
  164.                     pr=previous(top,p);
  165.                     pr->next=q;
  166.                     delete p;
  167.                     p=q;
  168.                     }
  169.                     q=q->next;
  170.                 }
  171.                        else
  172.                        {
  173.                          p=q;
  174.                          q=q->next;
  175.                        }
  176.            }
  177. }
  178. /////////////////////////////////
  179. void copy_polinom(node* top1, node* end1, node*& top2,
  180.                                   node*& end2)
  181. {
  182.     top2=NULL;
  183.     end2=NULL;
  184.    
  185.     while(top1)
  186.     {
  187.       push_polinom(top2,end2, top1->koef,top1->power);
  188.       top1=top1->next;
  189.     }
  190. }
  191. ///////////////////////////////////////////////////////
  192. void addition_of_polinoms(node* top1,node* end1,
  193.                     node* top2,node* end2, node* &top3,node* &end3)
  194. {
  195.      node* top4,* end4;
  196.      copy_polinom( top1, end1, top3, end3);
  197.      copy_polinom( top2, end2, top4, end4);
  198.      end3->next=top4;
  199.       end3=end4;
  200.       collecting_terms_in_polinom(top3,end3);
  201. }
  202. //////////////////////////////////////////////
  203. void mult_polinom_number(node* top,int number)
  204. {
  205.      node* p;
  206.      p=top;
  207.      while(p)
  208.      {
  209.         p->koef=number * p->koef;
  210.         p=p->next;
  211.      }
  212. }
  213. ///////////////////////////////////////////
  214. void subtraction_of_polinoms(node* top1,node* end1,
  215.  node* top2,node* end2, node* &top3,node* &end3)
  216. {
  217.    node* top4, *end4;
  218.    copy_polinom( top1, end1, top3, end3);
  219.     copy_polinom( top2, end2, top4, end4);
  220.  
  221.      mult_polinom_number(top4,-1);
  222.      end3->next=top4;
  223.     end3=end4;
  224.     collecting_terms_in_polinom(top3,end3);
  225. }
  226.  
  227.  
  228.  
  229.  
  230.  
  231. ///////////////////////////////////////////
  232. void mult_polinom_polinom(node* top1,node* end1,
  233. node* top2,node* end2, node* &top3, node* &end3)
  234. {
  235.     top3=NULL;
  236.     end3=NULL;
  237.  
  238.     while(top1)
  239.  {
  240.        node*  p=top2;
  241.        while(p)
  242.        {
  243.    
  244.     push_polinom(top3,end3, top1->koef*p->koef,
  245.                               top1->power+p->power);
  246.     p=p->next;      
  247.        }
  248.           top1=top1->next;
  249.        }
  250.       collecting_terms_in_polinom(top3,end3);
  251. }
  252. ////////////////////////////////////////////////
  253. void main()
  254. {
  255.         int n;
  256.    
  257.     node* top_polinom,*end_polinom;
  258.         node* top_polinom1,*end_polinom1;
  259.     node* top_polinom2,*end_polinom2;
  260.     node* top_polinom3,*end_polinom3;
  261.    
  262.     cout<<"enter n= ";
  263.     cin>>n;
  264.     create_polinom(top_polinom,end_polinom,n);
  265.    
  266.     cout<<" polinom = "<<endl;
  267.     show_polinom(top_polinom);
  268.    
  269.      cout<<"enter n= ";
  270.     cin>>n;
  271.     create_polinom_push(top_polinom1,end_polinom1,n);
  272.    
  273.     cout<<" polinom1 = "<<endl;
  274.     show_polinom(top_polinom1);
  275.  
  276.  addition_of_polinoms(top_polinom,end_polinom,
  277.  top_polinom1, end_polinom1, top_polinom2,end_polinom2);
  278.   cout<<"polinom2=polinom+polinom1 "<<endl;
  279. show_polinom(top_polinom2);
  280.    
  281. subtraction_of_polinoms(top_polinom2,end_polinom2, top_polinom1, end_polinom1, top_polinom3, end_polinom3);
  282.  cout<<"polinom3=polinom2- polinom1 "<<endl;
  283. show_polinom(top_polinom3);
  284.  
  285. mult_polinom_polinom(top_polinom,end_polinom, top_polinom1, end_polinom1, top_polinom2,end_polinom2);
  286.  cout<<"polinom2=polinom*polinom1 "<<endl;
  287. show_polinom(top_polinom2);
  288. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top