Advertisement
gguuppyy

лаба2н2

Oct 21st, 2023 (edited)
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.17 KB | Source Code | 0 0
  1. import java.util.Scanner;
  2.  
  3. public class Main {
  4.  
  5.     final static Scanner scan = new Scanner(System.in);
  6.  
  7.     static int nod(int A, int B) {
  8.         if (B == 0) {
  9.             return A;
  10.         } else {
  11.             return nod(B, A % B);
  12.         }
  13.     }
  14.  
  15.     static int inputAndCheck1() {
  16.         int num = 0;
  17.         boolean isIncorrect;
  18.         do {
  19.             isIncorrect = false;
  20.             try {
  21.                 num = Integer.parseInt(scan.nextLine());
  22.             } catch (Exception err) {
  23.                 System.out.println("Ошибка. Введите целое число: \n");
  24.                 isIncorrect = true;
  25.             }
  26.         } while (isIncorrect);
  27.         return num;
  28.     }
  29.  
  30.     static int inputAndCheck2(int num) {
  31.         int denom;
  32.         boolean isIncorrect;
  33.         do {
  34.             isIncorrect = false;
  35.             denom = inputAndCheck1();
  36.             if (denom == 0) {
  37.                 System.out.println("Ошибка. Делить на ноль нельзя. Повторите ввод знаменателя:");
  38.                 isIncorrect = true;
  39.             } else if (Math.abs(num) > Math.abs(denom)) {
  40.                 System.out.println("Ошибка. Числитель должен быть меньше знаменателя по модулю, дробь обыкновенная. Повторите ввод знаменателя:");
  41.                 isIncorrect = true;
  42.             } else if ((nod(Math.abs(num), Math.abs(denom)) != 1) || (num < 0 && denom < 0)) {
  43.                 System.out.println("Ошибка. Дробь должна быть несократимой. Повторите ввод знаменателя:");
  44.                 isIncorrect = true;
  45.             }
  46.         } while (isIncorrect);
  47.         return denom;
  48.     }
  49.  
  50.     static void subtractionAndPrint(int m, int n, int p, int q) {
  51.         int newNumerator;
  52.         int newDenominator;
  53.         int x;
  54.         newNumerator = m * q - p * n;
  55.         newDenominator = n * q;
  56.         x = nod(Math.abs(newNumerator), Math.abs(newDenominator));
  57.         newNumerator /= x;
  58.         newDenominator /= x;
  59.  
  60.         if (newNumerator % newDenominator == 0) {
  61.             System.out.println("Результат вычитания дробей: \n" + newNumerator / newDenominator);
  62.         } else {
  63.             System.out.println("Результат вычитания дробей: \n" + m + "/" + n + " - " + p + "/" + q + " = " + newNumerator + "/" + newDenominator);
  64.         }
  65.     }
  66.  
  67.     public static void main(String[] args) {
  68.         int m;
  69.         int n;
  70.         int p;
  71.         int q;
  72.         System.out.println("Эта программа выполняет вычитание 2-х обыкновенных несократимых дробей M/N и P/Q:");
  73.  
  74.         System.out.println("Введите M:");
  75.         m = inputAndCheck1();
  76.         System.out.println("Введите N:");
  77.         n = inputAndCheck2(m);
  78.         System.out.println("Введите P:");
  79.         p = inputAndCheck1();
  80.         System.out.println("Введите Q:");
  81.         q = inputAndCheck2(p);
  82.         scan.close();
  83.  
  84.         subtractionAndPrint(m, n, p, q);
  85.     }
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement