Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstring>
- #include <stdio.h>
- #include <cstdlib>
- using namespace std;
- int n, *k, *kd;
- char **s;
- double ps, pd;
- typedef struct Term {
- int n;
- int side;
- int type;
- } Term;
- Term termen[256];
- void op_term (char *term, Term &termen, int side) {
- termen.n = 0;
- termen.type = -1;
- termen.side = side;
- if (term[1] == 'x') {
- termen.n = 1;
- termen.type = 0;
- } else {
- int i = 1;
- while (term[i] >= '0' && term[i] <= '9') {
- termen.n = termen.n * 10 + (int)(term[i] - '0');
- i++;
- }
- if (term[i] == 'x') {
- termen.type = 0;
- } else termen.type = 1;
- }
- if (term[0] == '-') termen.n = -termen.n;
- }
- void clr_term (char *term) {
- for (int i = 0; i < 6; i++) {
- term[i] = NULL;
- }
- }
- void ecuatie (char *ec, int &k, int &kd) {
- char cec[256], *expresie1, *expresie2, term[6];
- clr_term(term);
- strcpy(cec, ec);
- expresie1 = strtok(cec, "=");
- expresie2 = strchr(ec, '=')+1;
- int pos = strlen(expresie1);
- //cout << "Expresie 1:\n";
- for (int i = strlen(expresie1)-1; i >= 0; i--) {
- if (expresie1[i] == '+') {
- strncpy (term, expresie1+i, pos-i);
- cout << term << endl;
- op_term(term, termen[k], 0);
- clr_term(term);
- k++;
- pos = i;
- } else if (expresie1[i] == '-') {
- strncpy (term, expresie1+i, pos-i);
- cout << term << endl;
- op_term(term, termen[k], 0);
- clr_term(term);
- k++;
- pos = i;
- }
- }
- if (expresie1[0] != '-') {
- term[0] = '+';
- strncpy (term+1, expresie1, pos);
- cout << term << "\n\n";
- op_term(term, termen[k], 0);
- k++;
- }
- kd = k;
- pos = strlen(expresie2);
- //cout << "Expresie 2:\n";
- for (int i = strlen(expresie2)-1; i >= 0; i--) {
- if (expresie2[i] == '+') {
- strncpy (term, expresie2+i, pos-i);
- cout << term << endl;
- op_term(term, termen[k], 1);
- clr_term(term);
- k++;
- pos = i;
- } else if (expresie2[i] == '-') {
- strncpy (term, expresie2+i, pos-i);
- cout << term << endl;
- op_term(term, termen[k], 1);
- clr_term(term);
- k++;
- pos = i;
- }
- }
- if (expresie2[0] == '-') {
- strncpy (term, expresie2, pos);
- } else if (expresie2[0] != '-') {
- term[0] = '+';
- strncpy (term+1, expresie2, pos);
- cout << term << "\n\n";
- op_term(term, termen[k], 1);
- k++;
- }
- }
- int main()
- {
- freopen("ecuatii.in", "r", stdin);
- freopen("ecuatii.out", "w", stdout);
- scanf("%d", &n); cin.get();
- //--
- s = (char **) malloc (sizeof(char *) * n);
- for (int i = 0; i < n; i++) {
- s[i] = (char *) malloc (sizeof(char) * 256);
- }
- k = (int *) malloc (sizeof(int) * n);
- kd = (int *) malloc (sizeof(int) * n);
- for (int i = 0; i < n; i++) {
- k[i] = 0; kd[i] = 0;
- }
- //--
- double r;
- for (int i = 0; i < n; i++) {
- cin.getline(s[i], 256);
- ecuatie(s[i], k[i], kd[i]);
- for (int j = 0; j < k[i]; j++) {
- printf ("%d %d %d\n", termen[j].n, termen[j].side, termen[j].type);
- }
- ps = 0, pd = 0;
- printf("\n%d %d\n", ps, pd);
- for (int j = 0; j < kd[i]; j++) {
- if (termen[j].type == 0) {
- ps += termen[j].n;
- } else {
- pd -= termen[j].n;
- }
- }
- for (int j = kd[i]; j < k[i]; j++) {
- if (termen[j].type == 0) {
- ps -= termen[j].n;
- } else {
- pd += termen[j].n;
- }
- }
- printf("%d %d\n", ps, pd);
- if (ps == pd && ps == 0) {
- printf("infinit\n");
- } else {
- if (ps != 0) {
- r = pd/ps;
- printf("%d\n", r);
- } else if (ps == 0) {
- printf("imposibil\n");
- }
- }
- printf("\n");
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement