Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>;
- using namespace std;
- const int MAX_VALUE = 100;
- int checkException(int number) {
- bool isIncorrect;
- number = 0;
- do{
- cin >> number;
- isIncorrect = false;
- if (cin.fail() || number < 1){
- cin.clear();
- cin.ignore(1000, '\n');
- cout << "Введите натуральное число!\n";
- isIncorrect = true;
- }
- if (number < 1 || number > MAX_VALUE) {
- cout << "Введите число в диапахоне от 1 до 100\n";
- }
- } while (isIncorrect);
- return number;
- }
- int inputNumber(string text) {
- int number = 0;
- cout << "Введите " + text + " дроби: ";
- number = checkException(number);
- return number;
- }
- int findNOD(int firstNumber, int secondNumber) {
- while (secondNumber != 0) {
- if (firstNumber > secondNumber)
- firstNumber = firstNumber - secondNumber;
- else
- secondNumber = secondNumber - firstNumber;
- }
- return firstNumber;
- }
- int findNOK(int firstNumber, int secondNumber) {
- int nod = findNOD(firstNumber, secondNumber);
- int nok = (firstNumber * secondNumber) / nod;
- return nok;
- }
- void checkDivisors(int numerator, int denominator) {
- int divisors;
- bool isIncorrect;
- do {
- isIncorrect = false;
- divisors = findNOD(numerator, denominator);
- if (divisors > 1) {
- cout << "Дробь должна быть несократимой!\n";
- numerator = inputNumber("числитель");
- denominator = inputNumber("знаменатель");
- isIncorrect = true;
- }
- } while (isIncorrect);
- }
- int takeDenominator(int firstDenominator, int secondDenominator) {
- int denominator = findNOK(firstDenominator, secondDenominator);
- return denominator;
- }
- int takeNumerator(int denominator, int m, int n, int p, int q) {
- int numerator = (denominator / n * m) + (denominator / q * p);
- return numerator;
- }
- void cutFraction(int* numerator, int* denominator) {
- int nod = findNOD(*numerator, *denominator);
- *numerator = *numerator / nod;
- *denominator = *denominator / nod;
- }
- string takeFraction(int numerator, int denominator) {
- string result = to_string(numerator) + "/" + to_string(denominator);
- return result;
- }
- void outputFraction(int numerator, int denominator) {
- cout << "Сумма дробей: " << numerator << "/" << denominator;
- }
- int main() {
- system("chcp 1251");
- system("cls");
- cout << "Программа считает сумму двух обыкновенных несократимых дробей\n";
- int firstNumerator;
- int firstDenominator;
- firstNumerator = inputNumber("числитель первой");
- firstDenominator = inputNumber("знаменатель первой");
- checkDivisors(firstNumerator, firstDenominator);
- int secondNumerator;
- int secondDenominator;
- secondNumerator = inputNumber("числитель второй");
- secondDenominator = inputNumber("знаменатель второй");
- checkDivisors(secondNumerator, secondDenominator);
- int denominator;
- int numerator;
- denominator = takeDenominator(firstDenominator, secondDenominator);
- numerator = takeNumerator(denominator, firstNumerator, firstDenominator, secondNumerator, secondDenominator);
- cutFraction(&numerator, &denominator);
- outputFraction(numerator, denominator);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement