Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- int nod(int A, int B) {
- if (B == 0) {
- return A;
- } else {
- return nod(B, A % B);
- }
- }
- int inputAndCheck1() {
- int num;
- bool isIncorrect;
- do {
- isIncorrect = false;
- cin >> num;
- if (cin.get() != '\n') {
- cout << "Ошибка. Введите целое число: \n";
- isIncorrect = true;
- cin.clear();
- while (cin.get() != '\n');
- }
- } while (isIncorrect);
- return num;
- }
- int inputAndCheck2(int num) {
- int denom;
- bool isIncorrect;
- do {
- isIncorrect = false;
- denom = inputAndCheck1();
- if (denom == 0) {
- cout << ("Ошибка. Делить на ноль нельзя. Повторите ввод знаменателя: \n");
- isIncorrect = true;
- } else if (abs(num) > abs(denom)) {
- cout << "Ошибка. Числитель должен быть меньше знаменателя по модулю, дробь обыкновенная. Повторите ввод знаменателя: \n";
- isIncorrect = true;
- } else if ((nod(abs(num), abs(denom)) != 1) || (num < 0 && denom < 0)) {
- cout << "Ошибка. Дробь должна быть несократимой. Повторите ввод знаменателя: \n";
- isIncorrect = true;
- }
- } while (isIncorrect);
- return denom;
- }
- void subtractionAndPrint(int m, int n, int p, int q) {
- int newNumerator, newDenominator, x;
- newNumerator = m * q - p * n;
- newDenominator = n * q;
- x = nod(abs(newNumerator), abs(newDenominator));
- newNumerator /= x;
- newDenominator /= x;
- if (newNumerator % newDenominator == 0)
- cout << "Результат вычитания дробей: \n" << newNumerator / newDenominator;
- else
- cout << "Результат вычитания дробей: \n" << m << "/" << n << " - " << p << "/" << q << " = " << newNumerator << "/" << newDenominator;
- }
- int main() {
- int m, n, p, q;
- cout << "Эта программа выполняет вычитание 2-х обыкновенных несократимых дробей M/N и P/Q: \n";
- cout << "Введите M: \n";
- m = inputAndCheck1();
- cout << "Введите N: \n";
- n = inputAndCheck2(m);
- cout << "Введите P: \n";
- p = inputAndCheck1();
- cout << "Введите Q: \n";
- q = inputAndCheck2(p);
- subtractionAndPrint(m, n, p, q);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement