Advertisement
andruhovski

Untitled

Mar 13th, 2016
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.23 KB | None | 0 0
  1. struct TListItem {
  2. int Step;
  3. double Koef;
  4. TListItem *Next, *Prev;
  5. };
  6. struct TList {
  7. TListItem *First, *Last;
  8. };
  9.  
  10. TList InitList() {
  11. TList r;
  12. r.First = NULL;
  13. r.Last = NULL;
  14. return r;
  15. }
  16.  
  17. void AddListItem(TList &List, int step, double koef) {
  18. TListItem *tmp;
  19. if (List.First == NULL) {
  20. List.First = new TListItem;
  21. List.First->Step = step;
  22. List.First->Koef = koef;
  23. List.First->Prev = NULL;
  24. List.First->Next = NULL;
  25. List.Last = List.First;
  26. }
  27. else {
  28. tmp = new TListItem;
  29. tmp->Step = step;
  30. tmp->Koef = koef;
  31. tmp->Next = NULL;
  32. tmp->Prev = List.Last;
  33. List.Last->Next = tmp;
  34. List.Last = tmp;
  35. }
  36. }
  37.  
  38. void AddSortedListItem(TList &List, int step, double koef) {
  39. TListItem *i, *p_i, *tmp;
  40. if (List.First == NULL) {
  41. List.First = new TListItem;
  42. List.First->Step = step;
  43. List.First->Koef = koef;
  44. List.First->Prev = NULL;
  45. List.First->Next = NULL;
  46. List.Last = List.First;
  47. }
  48. else {
  49. for (i = List.First; i != NULL; i = i->Next) {
  50. if (i->Step<step) {
  51. p_i = i->Prev;
  52. tmp = new TListItem;
  53. tmp->Step = step;
  54. tmp->Koef = koef;
  55. tmp->Next = i;
  56. p_i->Next = tmp;
  57. i->Prev = tmp;
  58. break;
  59. }
  60. }
  61. if (i == NULL)
  62. {
  63. tmp = new TListItem;
  64. tmp->Step = step;
  65. tmp->Koef = koef;
  66. tmp->Next = NULL;
  67. tmp->Prev = List.Last;
  68. List.Last->Next = tmp;
  69. List.Last = tmp;
  70. }
  71.  
  72. }
  73. }
  74.  
  75.  
  76. void DestroyList(TList &List) {
  77. TListItem *t = List.Last, *r;
  78. while (t != NULL) {
  79. r = t->Next;
  80. delete(t);
  81. t = r;
  82. }
  83. List.First = List.Last = NULL;
  84. }
  85.  
  86. void PrintList(TList &List) {
  87. TListItem *t = List.First;
  88. cout << "p= ";
  89. char znak = ' ';
  90. while (t != NULL) {
  91. cout << znak << t->Koef << "* X^" << t->Step;
  92. t = t->Next;
  93. if (znak == ' ') znak = '+';
  94. }
  95. cout << endl;
  96. }
  97.  
  98. void Multiply(TList p1, TList p2, TList &res) {
  99. TListItem *i1, *i2, *i3;
  100. int st, isPresent;
  101. double k;
  102. res = InitList();
  103. for (i1 = p1.First; i1 != NULL; i1 = i1->Next) {
  104. for (i2 = p2.First; i2 != NULL; i2 = i2->Next) {
  105. st = i1->Step + i2->Step;
  106. k = i1->Koef*i2->Koef;
  107. isPresent = 0;
  108. for (i3 = res.First; i3 != NULL; i3 = i3->Next) {
  109. if (i3->Step == st) {
  110. isPresent = 1;
  111. i3->Koef = i3->Koef + k;
  112. }
  113. }
  114. if (isPresent == 0)
  115. AddSortedListItem(res, st, k);
  116. }
  117. }
  118.  
  119. }
  120. int main(int argc, char* argv[])
  121. {
  122. int Step1[4]={4,3,2,1};
  123. double Koef1[4]={ 5.5, 3.4, 2.8, 1.1 };
  124.  
  125. int Step2[3]={5,3,0};
  126. double Koef2[3]={ 3.76, 4.9,1.1 };
  127.  
  128. //randomize();
  129. TList L1, L2, L3;
  130. int n, p;
  131. double k;
  132. L1 = InitList();
  133. L2 = InitList();
  134. /*cout << "N=";
  135. cin >> n;*/
  136. n=4;
  137. cout << "elements: " << endl;
  138. for (int i = 0; i<n; i++) {
  139. //cin >> p >> k;
  140. AddListItem(L1,Step1[i],Koef1[i]);
  141. //AddListItem(L1, p, k);
  142. }
  143. n=3;
  144. /*cout << "N=";
  145. cin >> n;*/
  146. for (int i = 0; i<n; i++) {
  147. //cin >> p >> k;
  148. AddListItem(L2,Step2[i],Koef2[i]);
  149. //AddListItem(L2, p, k);
  150. }
  151. /*for(int i=0; i<ListSize; i++)
  152. AddListItem(L, random(MaxValue)); */
  153. PrintList(L1);
  154. PrintList(L2);
  155. Multiply(L1, L2, L3);
  156. PrintList(L3);
  157. DestroyList(L3);
  158. DestroyList(L1);
  159. DestroyList(L2);
  160. _getch();
  161. return 0;
  162. }
  163. //---------------------------------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement