Advertisement
ryabov

Untitled

Oct 27th, 2021
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.01 KB | None | 0 0
  1. import java.util.Scanner;
  2. public class Laba2_2 {
  3.     final static Scanner scan = new Scanner(System.in);
  4.     final static int MAX_VALUE = 100;
  5.     static int inputNumber(){
  6.         boolean isIncorrect;
  7.         int number = 0;
  8.         do{
  9.             isIncorrect = false;
  10.             try {
  11.                 number = Integer.parseInt(scan.nextLine());
  12.             }
  13.             catch (NumberFormatException e) {
  14.                 System.err.println("Введите натуральное число!");
  15.                 isIncorrect = true;
  16.             }
  17.             if (!isIncorrect && (number < 1 || number > MAX_VALUE)) {
  18.                 System.err.println("Введите число в диапахоне от 1 до 100");
  19.                 isIncorrect = true;
  20.             }
  21.         } while (isIncorrect);
  22.         return number;
  23.     }
  24.     static int findNOD(int firstNumber, int secondNumber){
  25.         while (secondNumber != 0) {
  26.             if (firstNumber > secondNumber)
  27.                 firstNumber = firstNumber - secondNumber;
  28.             else
  29.                 secondNumber = secondNumber - firstNumber;
  30.         }
  31.         return firstNumber;
  32.     }
  33.     static int findNOK(int firstNumber, int secondNumber){
  34.         int nod = findNOD(firstNumber, secondNumber);
  35.         int nok = (firstNumber * secondNumber) / nod;
  36.         return nok;
  37.     }
  38.     static boolean checkDivisors(int numerator, int denominator){
  39.         int divisors;
  40.         divisors = findNOD(numerator, denominator);
  41.         if (divisors > 1) {
  42.             System.out.println("Дробь должна быть несократимой!");
  43.             return false;
  44.         }
  45.         return true;
  46.     }
  47.     static void fixIfDivisorsFind(int[] fraction){
  48.         while(!checkDivisors(fraction[0], fraction[1])){
  49.             System.out.println("Введите числитель дроби");
  50.             fraction[0] = inputNumber();
  51.             System.out.println("Введите знаменатель дроби");
  52.             fraction[1] = inputNumber();
  53.         }
  54.     }
  55.     static int takeDenominator(int n, int q){
  56.         int denominator = findNOK(n, q);
  57.         return denominator;
  58.     }
  59.     static int takeNumerator(int denominator, int m, int n, int p, int q){
  60.         int numerator = (denominator / n * m) + (denominator / q * p);
  61.         return numerator;
  62.     }
  63.     static int[] cutFraction(int numerator, int denominator){
  64.         int nod = findNOD(numerator, denominator);
  65.         int finalNumerator = numerator / nod;
  66.         int finalDenominator = denominator / nod;
  67.         int[] arr = {finalNumerator, finalDenominator};
  68.         return arr;
  69.     }
  70.     static void outputFraction(int[] arr){
  71.         System.out.println("Сумма дробей: " + arr[0] + "/" + arr[1]);
  72.     }
  73.     public static void main(String[] args) {
  74.         System.out.println("Программа считает сумму двух обыкновенных несократимых дробей");
  75.         int m;
  76.         int n;
  77.         System.out.println("Введите числитель первой дроби");
  78.         m = inputNumber();
  79.         System.out.println("Введите знаменатель первой дроби");
  80.         n = inputNumber();
  81.         int[] firstFraction = {m, n};
  82.         fixIfDivisorsFind(firstFraction);
  83.         int p;
  84.         int q;
  85.         System.out.println("Введите числитель второй дроби");
  86.         p = inputNumber();
  87.         System.out.println("Введите знаменатель второй дроби");
  88.         q = inputNumber();
  89.         int[] secondFraction = {p, q};
  90.         fixIfDivisorsFind(secondFraction);
  91.         scan.close();
  92.         int denominator;
  93.         int numerator;
  94.         denominator = takeDenominator(firstFraction[1], secondFraction[1]);
  95.         numerator = takeNumerator(denominator, firstFraction[0], firstFraction[1], secondFraction[0], secondFraction[1]);
  96.         int[] arr = cutFraction(numerator, denominator);
  97.         outputFraction(arr);
  98.     }
  99. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement