Advertisement
vinocastro

ME3

Oct 21st, 2020 (edited)
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.10 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct polynode POLYNODE;
  5. typedef struct poly POLY;
  6. struct polynode
  7. {
  8. int x;
  9. int y;
  10. int z;
  11. int COEFF;
  12. POLYNODE* NEXT;
  13.  
  14. };
  15. struct poly
  16. {
  17. POLYNODE* l;
  18.  
  19. };
  20.  
  21. // 1 means node 1 is greater than node 2
  22. // 0 means node 1 is less than node 2
  23. // 2 means node 1 is equal to node 2 equal
  24.  
  25. int GREATER(POLYNODE* node1,POLYNODE* node2)
  26. {
  27. if(node1->x > node2->x)
  28. {
  29. return 1;
  30. }
  31. else if(node1->x == node2->x)
  32. {
  33. if(node1->y > node2->y)
  34. {
  35. return 1;
  36. }
  37. else if(node1->y == node2->y)
  38. {
  39. if(node1->z > node2->z)
  40. {
  41. return 1;
  42. }
  43. else if(node1->z == node2->z)
  44. {
  45. return 2;
  46. }
  47. else
  48. {
  49. return 0;
  50. }
  51.  
  52. }
  53. else
  54. {
  55. return 0;
  56. }
  57.  
  58. }
  59. else
  60. {
  61. return 0;
  62. }
  63.  
  64. }
  65.  
  66. void ZEROPOLY(POLY* P)
  67. {
  68. POLYNODE* tau;
  69. tau = malloc(sizeof(POLYNODE));
  70. P->l=tau;
  71. P->l->x = -1;
  72. P->l->y = -1;
  73. P->l->z = -1;
  74. P->l->NEXT = tau;
  75. }
  76.  
  77. void POLYREAD(POLY* P,int n)
  78. {
  79. POLYNODE* v;
  80. POLYNODE* alpha;
  81. POLYNODE* beta;
  82. v = malloc(sizeof(POLYNODE));
  83. int i = 0,ex,ey,ez,coeff;
  84. ZEROPOLY(P);
  85. while(i < n)
  86. {
  87. v = malloc(sizeof(POLYNODE));
  88. scanf("%d %d %d %d",&ex,&ey,&ez,&coeff);
  89. v->x = ex;
  90. v->y = ey;
  91. v->z = ez;
  92. v->COEFF = coeff;
  93. beta = P->l;
  94. alpha = beta->NEXT;
  95. while(GREATER(&alpha,&v) == 1)
  96. {
  97. beta = alpha;
  98. alpha = alpha->NEXT;
  99. }
  100. beta->NEXT = v;
  101. v->NEXT = alpha;
  102. }
  103. }
  104.  
  105. void POLYADD(POLY* P, POLY* Q)
  106. {
  107. POLYNODE* alpha;
  108. POLYNODE* beta;
  109. POLYNODE* sigma;
  110. POLYNODE* tau;
  111. alpha = P->l->NEXT;
  112. beta = Q->l->NEXT;
  113. sigma = Q->l;
  114. while(1)
  115. {
  116. if(GREATER(&alpha,&beta) == 0)
  117. {
  118. sigma = beta;
  119. beta = beta->NEXT;
  120. }
  121. else if (GREATER(&alpha,&beta) == 2)
  122. {
  123. if(alpha == P->l)
  124. {
  125. break;
  126. }
  127. beta->COEFF = beta->COEFF + alpha->COEFF;
  128. if(beta->COEFF == 0)
  129. {
  130. tau = beta;
  131. sigma->NEXT = beta->NEXT;
  132. beta = beta->NEXT;
  133. free(tau);
  134. }
  135. else
  136. {
  137. sigma = beta;
  138. beta = beta->NEXT;
  139. }
  140. alpha = alpha->NEXT;
  141. }
  142. else if (GREATER(&alpha,&beta) == 1)
  143. {
  144. tau = malloc(sizeof(POLYNODE));
  145. tau->COEFF = alpha->COEFF;
  146. tau->x = alpha->x;
  147. tau->y = alpha->y;
  148. tau->z = alpha->z;
  149. sigma->NEXT = tau;
  150. tau->NEXT = beta;
  151. sigma = tau;
  152. alpha = alpha->NEXT;
  153. }
  154.  
  155. }
  156. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement