Advertisement
YorKnEz

Untitled

Jan 26th, 2020
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.32 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstring>
  3. #include <stdio.h>
  4. #include <cstdlib>
  5.  
  6. using namespace std;
  7.  
  8. int n, *k, *kd;
  9. char **s;
  10. double ps, pd;
  11.  
  12. typedef struct Term {
  13. int n;
  14. int side;
  15. int type;
  16. } Term;
  17.  
  18. Term termen[256];
  19.  
  20. void op_term (char *term, Term &termen, int side) {
  21. termen.n = 0;
  22. termen.type = -1;
  23. termen.side = side;
  24.  
  25. if (term[1] == 'x') {
  26. termen.n = 1;
  27.  
  28. termen.type = 0;
  29. } else {
  30. int i = 1;
  31.  
  32. while (term[i] >= '0' && term[i] <= '9') {
  33. termen.n = termen.n * 10 + (int)(term[i] - '0');
  34. i++;
  35. }
  36.  
  37. if (term[i] == 'x') {
  38. termen.type = 0;
  39. } else termen.type = 1;
  40. }
  41.  
  42. if (term[0] == '-') termen.n = -termen.n;
  43. }
  44.  
  45. void clr_term (char *term) {
  46. for (int i = 0; i < 6; i++) {
  47. term[i] = NULL;
  48. }
  49. }
  50.  
  51. void ecuatie (char *ec, int &k, int &kd) {
  52. char cec[256], *expresie1, *expresie2, term[6];
  53.  
  54. clr_term(term);
  55.  
  56. strcpy(cec, ec);
  57.  
  58. expresie1 = strtok(cec, "=");
  59. expresie2 = strchr(ec, '=')+1;
  60.  
  61. int pos = strlen(expresie1);
  62.  
  63. //cout << "Expresie 1:\n";
  64.  
  65. for (int i = strlen(expresie1)-1; i >= 0; i--) {
  66. if (expresie1[i] == '+') {
  67. strncpy (term, expresie1+i, pos-i);
  68.  
  69. cout << term << endl;
  70.  
  71. op_term(term, termen[k], 0);
  72. clr_term(term);
  73.  
  74. k++;
  75. pos = i;
  76. } else if (expresie1[i] == '-') {
  77. strncpy (term, expresie1+i, pos-i);
  78.  
  79. cout << term << endl;
  80.  
  81. op_term(term, termen[k], 0);
  82. clr_term(term);
  83.  
  84. k++;
  85. pos = i;
  86. }
  87. }
  88.  
  89. if (expresie1[0] != '-') {
  90. term[0] = '+';
  91. strncpy (term+1, expresie1, pos);
  92.  
  93. cout << term << "\n\n";
  94.  
  95. op_term(term, termen[k], 0);
  96. k++;
  97. }
  98.  
  99. kd = k;
  100.  
  101. pos = strlen(expresie2);
  102.  
  103. //cout << "Expresie 2:\n";
  104.  
  105. for (int i = strlen(expresie2)-1; i >= 0; i--) {
  106. if (expresie2[i] == '+') {
  107. strncpy (term, expresie2+i, pos-i);
  108.  
  109. cout << term << endl;
  110.  
  111. op_term(term, termen[k], 1);
  112. clr_term(term);
  113.  
  114. k++;
  115. pos = i;
  116. } else if (expresie2[i] == '-') {
  117. strncpy (term, expresie2+i, pos-i);
  118.  
  119. cout << term << endl;
  120.  
  121. op_term(term, termen[k], 1);
  122. clr_term(term);
  123.  
  124. k++;
  125. pos = i;
  126. }
  127. }
  128.  
  129. if (expresie2[0] == '-') {
  130. strncpy (term, expresie2, pos);
  131. } else if (expresie2[0] != '-') {
  132. term[0] = '+';
  133. strncpy (term+1, expresie2, pos);
  134.  
  135. cout << term << "\n\n";
  136.  
  137. op_term(term, termen[k], 1);
  138. k++;
  139. }
  140. }
  141.  
  142. int main()
  143. {
  144. freopen("ecuatii.in", "r", stdin);
  145. freopen("ecuatii.out", "w", stdout);
  146.  
  147. scanf("%d", &n); cin.get();
  148.  
  149. //--
  150.  
  151. s = (char **) malloc (sizeof(char *) * n);
  152.  
  153. for (int i = 0; i < n; i++) {
  154. s[i] = (char *) malloc (sizeof(char) * 256);
  155. }
  156.  
  157. k = (int *) malloc (sizeof(int) * n);
  158. kd = (int *) malloc (sizeof(int) * n);
  159.  
  160. for (int i = 0; i < n; i++) {
  161. k[i] = 0; kd[i] = 0;
  162. }
  163.  
  164. //--
  165.  
  166. double r;
  167.  
  168. for (int i = 0; i < n; i++) {
  169. cin.getline(s[i], 256);
  170.  
  171. ecuatie(s[i], k[i], kd[i]);
  172.  
  173. for (int j = 0; j < k[i]; j++) {
  174. printf ("%d %d %d\n", termen[j].n, termen[j].side, termen[j].type);
  175. }
  176.  
  177. ps = 0, pd = 0;
  178.  
  179. printf("\n%d %d\n", ps, pd);
  180.  
  181. for (int j = 0; j < kd[i]; j++) {
  182. if (termen[j].type == 0) {
  183. ps += termen[j].n;
  184. } else {
  185. pd -= termen[j].n;
  186. }
  187. }
  188.  
  189. for (int j = kd[i]; j < k[i]; j++) {
  190. if (termen[j].type == 0) {
  191. ps -= termen[j].n;
  192. } else {
  193. pd += termen[j].n;
  194. }
  195. }
  196.  
  197. printf("%d %d\n", ps, pd);
  198.  
  199. if (ps == pd && ps == 0) {
  200. printf("infinit\n");
  201. } else {
  202. if (ps != 0) {
  203. r = pd/ps;
  204. printf("%d\n", r);
  205. } else if (ps == 0) {
  206. printf("imposibil\n");
  207. }
  208. }
  209.  
  210. printf("\n");
  211. }
  212.  
  213. return 0;
  214. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement