Advertisement
Guest User

Untitled

a guest
Apr 25th, 2019
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.09 KB | None | 0 0
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement