Advertisement
ryabov

Untitled

Oct 26th, 2021
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.46 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>;
  3. using namespace std;
  4. const int MAX_VALUE = 100;
  5. int checkException(int number) {
  6.     bool isIncorrect;
  7.     number = 0;
  8.     do{
  9.         cin >> number;
  10.         isIncorrect = false;
  11.         if (cin.fail() || number < 1){
  12.             cin.clear();
  13.             cin.ignore(1000, '\n');
  14.             cout << "Введите натуральное число!\n";
  15.             isIncorrect = true;
  16.         }
  17.         if (number < 1 || number > MAX_VALUE) {
  18.             cout << "Введите число в диапахоне от 1 до 100\n";
  19.         }
  20.     } while (isIncorrect);
  21.     return number;
  22. }
  23. int inputNumber(string text) {
  24.     int number = 0;
  25.     cout << "Введите " + text + " дроби: ";
  26.     number = checkException(number);
  27.     return number;
  28. }
  29. int findNOD(int firstNumber, int secondNumber) {
  30.     while (secondNumber != 0) {
  31.         if (firstNumber > secondNumber)
  32.             firstNumber = firstNumber - secondNumber;
  33.         else
  34.             secondNumber = secondNumber - firstNumber;
  35.     }
  36.     return firstNumber;
  37. }
  38. int findNOK(int firstNumber, int secondNumber) {
  39.     int nod = findNOD(firstNumber, secondNumber);
  40.     int nok = (firstNumber * secondNumber) / nod;
  41.     return nok;
  42. }
  43. void checkDivisors(int numerator, int denominator) {
  44.     int divisors;
  45.     bool isIncorrect;
  46.     do {
  47.         isIncorrect = false;
  48.         divisors = findNOD(numerator, denominator);
  49.         if (divisors > 1) {
  50.             cout << "Дробь должна быть несократимой!\n";
  51.             numerator = inputNumber("числитель");
  52.             denominator = inputNumber("знаменатель");
  53.             isIncorrect = true;
  54.         }
  55.     } while (isIncorrect);
  56. }
  57. int takeDenominator(int firstDenominator, int secondDenominator) {
  58.     int denominator = findNOK(firstDenominator, secondDenominator);
  59.     return denominator;
  60. }
  61. int takeNumerator(int denominator, int m, int n, int p, int q) {
  62.     int numerator = (denominator / n * m) + (denominator / q * p);
  63.     return numerator;
  64. }
  65. void cutFraction(int* numerator, int* denominator) {
  66.     int nod = findNOD(*numerator, *denominator);
  67.     *numerator = *numerator / nod;
  68.     *denominator = *denominator / nod;
  69. }
  70. string takeFraction(int numerator, int denominator) {
  71.     string result = to_string(numerator) + "/" + to_string(denominator);
  72.     return result;
  73. }
  74. void outputFraction(int numerator, int denominator) {
  75.     cout << "Сумма дробей: " << numerator << "/" << denominator;
  76. }
  77. int main() {
  78.     system("chcp 1251");
  79.     system("cls");
  80.     cout << "Программа считает сумму двух обыкновенных несократимых дробей\n";
  81.     int firstNumerator;
  82.     int firstDenominator;
  83.     firstNumerator = inputNumber("числитель первой");
  84.     firstDenominator = inputNumber("знаменатель первой");
  85.     checkDivisors(firstNumerator, firstDenominator);
  86.     int secondNumerator;
  87.     int secondDenominator;
  88.     secondNumerator = inputNumber("числитель второй");
  89.     secondDenominator = inputNumber("знаменатель второй");
  90.     checkDivisors(secondNumerator, secondDenominator);
  91.     int denominator;
  92.     int numerator;
  93.     denominator = takeDenominator(firstDenominator, secondDenominator);
  94.     numerator = takeNumerator(denominator, firstNumerator, firstDenominator, secondNumerator, secondDenominator);
  95.     cutFraction(&numerator, &denominator);
  96.     outputFraction(numerator, denominator);
  97.     return 0;
  98. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement