Advertisement
gguuppyy

лаба2н2

Oct 21st, 2023 (edited)
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.59 KB | Source Code | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int nod(int A, int B) {
  6.     if (B == 0) {
  7.         return A;
  8.     } else {
  9.         return nod(B, A % B);
  10.     }
  11. }
  12.  
  13. int inputAndCheck1() {
  14.     int num;
  15.     bool isIncorrect;
  16.     do {
  17.         isIncorrect = false;
  18.         cin >> num;
  19.         if (cin.get() != '\n') {
  20.             cout << "Ошибка. Введите целое число: \n";
  21.             isIncorrect = true;
  22.             cin.clear();
  23.             while (cin.get() != '\n');
  24.         }
  25.     } while (isIncorrect);
  26.     return num;
  27. }
  28.  
  29. int inputAndCheck2(int num) {
  30.     int denom;
  31.     bool isIncorrect;
  32.     do {
  33.         isIncorrect = false;
  34.         denom = inputAndCheck1();
  35.         if (denom == 0) {
  36.             cout << ("Ошибка. Делить на ноль нельзя. Повторите ввод знаменателя: \n");
  37.             isIncorrect = true;
  38.         } else if (abs(num) > abs(denom)) {
  39.             cout << "Ошибка. Числитель должен быть меньше знаменателя по модулю, дробь обыкновенная. Повторите ввод знаменателя: \n";
  40.             isIncorrect = true;
  41.         } else if ((nod(abs(num), abs(denom)) != 1) || (num < 0 && denom < 0)) {
  42.             cout << "Ошибка. Дробь должна быть несократимой. Повторите ввод знаменателя: \n";
  43.             isIncorrect = true;
  44.         }
  45.     } while (isIncorrect);
  46.     return denom;
  47. }
  48.  
  49. void subtractionAndPrint(int m, int n, int p, int q) {
  50.     int newNumerator, newDenominator,  x;
  51.     newNumerator = m * q - p * n;
  52.     newDenominator = n * q;
  53.     x = nod(abs(newNumerator), abs(newDenominator));
  54.     newNumerator /= x;
  55.     newDenominator /= x;
  56.  
  57.     if (newNumerator % newDenominator == 0)
  58.         cout << "Результат вычитания дробей: \n" << newNumerator / newDenominator;
  59.     else
  60.         cout << "Результат вычитания дробей: \n" << m << "/" << n << " - " << p << "/" << q << " = " << newNumerator << "/" << newDenominator;
  61. }
  62.  
  63. int main() {
  64.     int m, n, p, q;
  65.     cout << "Эта программа выполняет вычитание 2-х обыкновенных несократимых дробей M/N и P/Q: \n";
  66.     cout << "Введите M: \n";
  67.     m = inputAndCheck1();
  68.     cout << "Введите N: \n";
  69.     n = inputAndCheck2(m);
  70.     cout << "Введите P: \n";
  71.     p = inputAndCheck1();
  72.     cout << "Введите Q: \n";
  73.     q = inputAndCheck2(p);
  74.  
  75.     subtractionAndPrint(m, n, p, q);
  76.     return 0;
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement