Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iomanip>
- #include <iostream>
- #include <math.h>
- #include <locale>
- #include <fstream>
- using namespace std;
- int ch1, ch2, zn1, zn2, ch3, zn3, b;
- char znak1, znak2, znak3, func, a;
- ifstream f("Text.txt");
- int NOD(int ch3, int zn3)
- {
- ch3 = abs(ch3);
- zn3 = abs(zn3);
- while ((ch3>0) && (zn3>0))
- if (ch3 > zn3)
- ch3 %= zn3;
- else
- zn3 %= ch3;
- return zn3 + ch3;
- }
- void vvod_pervog(int &ch1, int &zn1, char &znak1, char &a, int &b)
- {
- if ((a == '+') || (a == '-'))
- {
- znak1 = a;
- f >> b;
- ch1 = b;
- }
- else
- b = a - '0';
- ch1 = b;
- f >> b;
- zn1 = b;
- if (znak1 == '-')
- ch1 *= -1;
- }
- void vvod(int &ch2, int &zn2, char &znak2, char &func, char &a, int &b)
- {
- f >> a;
- func = a;
- f >> a;
- if ((a == '+') || (a == '-'))
- {
- znak2 = a;
- f >> b;
- ch2 = b;
- }
- else
- b = a - '0';
- ch2 = b;
- f >> b;
- zn2 = b;
- if (znak2 == '-')
- ch2 *= -1;
- }
- void vivod(int &ch1, int ch2, int &ch3, int &zn1, int zn2, int &zn3, char func, char znak1, char znak2, char znak3, char a)
- {
- if ((zn1 && zn2 && zn3) != 0)
- {
- if (a != '=')
- {
- if (func == '/')
- cout << ch1 << "/" << zn1 << ":" << ch2 << "/" << zn2 << " = ";
- else
- cout << ch1 << "/" << zn1 << func << ch2 << "/" << zn2 << " = ";
- switch (func)
- {
- case '+': cout << "(" << zn2*ch1 << "+" << zn1*ch2 << ")/" << zn3 << " = " << ch3 << "/" << zn3;
- break;
- case '-': cout << "(" << zn2*ch1 << "-" << zn1*ch2 << ")/" << zn3 << " = " << ch3 << "/" << zn3;
- break;
- case '*': cout << ch1 << "*" << ch2 << " * " << "(" << zn1 << "*" << zn2 << ")/" << zn3 << " = " << ch3 << "/" << zn3;
- break;
- case '/': cout << ch1 << "*" << zn2 << " : " << "(" << zn1 << "*" << ch2 << ")" << " = " << ch3 << "/" << zn3;
- break;
- }
- int i = NOD(ch3, zn3);
- ch3 /= i;
- zn3 /= i;
- cout << " = " << ch3 << "/" << zn3 << endl;
- }
- else
- cout << "Ответ:" << ch3 << "/" << zn3 << endl;
- }
- else
- cout << "В файле найдено деление на 0!" << endl;
- }
- void summa(int &ch1, int ch2, int &zn1, int zn2,int &ch3, int &zn3)
- {
- zn3 = zn1*zn2;
- ch3 = (zn2*ch1) + (zn1*ch2);
- vivod(ch1, ch2, ch3, zn1, zn2, zn3, func, znak1, znak2, znak3, a);
- ch1 = ch3;
- zn1 = zn3;
- }
- void vichet(int &ch1, int ch2, int &zn1, int zn2, int &ch3, int &zn3)
- {
- zn3 = zn1*zn2;
- ch3 = (zn2*ch1) - (zn1*ch2);
- vivod(ch1, ch2, ch3, zn1, zn2, zn3, func, znak1, znak2, znak3, a);
- ch1 = ch3;
- zn1 = zn3;
- }
- void delen(int &ch1, int ch2, int &zn1, int zn2, int &ch3, int &zn3)
- {
- ch3 = ch1*zn2;
- zn3 = zn1*ch2;
- if ((zn3 < 0) && (ch3<0))
- {
- zn3 *= -1;
- }
- else
- if (zn3 < 0)
- {
- ch3 *= -1;
- zn3 *= -1;
- }
- vivod(ch1, ch2, ch3, zn1, zn2, zn3, func, znak1, znak2, znak3, a);
- ch1 = ch3;
- zn1 = zn3;
- }
- void umnozh(int &ch1, int ch2, int &zn1, int zn2, int &ch3, int &zn3)
- {
- ch3 = ch1*ch2;
- zn3 = zn1*zn2;
- vivod(ch1, ch2, ch3, zn1, zn2, zn3, func, znak1, znak2, znak3, a);
- ch1 = ch3;
- zn1 = zn3;
- }
- void main()
- {
- setlocale(LC_ALL, "rus");
- f >> a;
- vvod_pervog(ch1, zn1, znak1, a, b);
- vvod(ch2, zn2, znak2, func, a, b);
- while ((a != '=') && ((zn1 && zn2)!=0))
- {
- switch (func)
- {
- case '+': summa(ch1, ch2, zn1, zn2,ch3,zn3);
- break;
- case '-':vichet(ch1, ch2, zn1, zn2, ch3, zn3);
- break;
- case '/':delen(ch1, ch2, zn1, zn2, ch3, zn3);
- break;
- case '*':umnozh(ch1, ch2, zn1, zn2, ch3, zn3);
- break;
- }
- vvod(ch2, zn2, znak2, func, a, b);
- }
- vivod(ch1, ch2, ch3, zn1, zn2, zn3, func, znak1, znak2, znak3, a);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement