Advertisement
gguuppyy

lab43final

Mar 27th, 2024
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.53 KB | None | 0 0
  1. import java.util.Scanner;
  2. import java.io.*;
  3.  
  4. public class Main {
  5.     static Scanner scanner = new Scanner(System.in);
  6.     public static int inputChoice() {
  7.         int vib;
  8.         boolean isIncorrect;
  9.         vib = 0;
  10.         System.out.println("Введите 0, если хотите сделать ввод с консоли; 1, если хотите ввод из файла. ");
  11.         do {
  12.             isIncorrect = false;
  13.             System.out.print("Выбор: ");
  14.             try {
  15.                 vib = Integer.parseInt(scanner.nextLine());
  16.             } catch (Exception e) {
  17.                 isIncorrect = true;
  18.                 System.out.println("Ошибка ввода. ");
  19.             }
  20.             if (!isIncorrect && (vib != 1) && (vib != 0)) {
  21.                 isIncorrect = true;
  22.                 System.out.println("Число должно быть либо 0, либо 1. ");
  23.             }
  24.         } while (isIncorrect);
  25.         return vib;
  26.     }
  27.     public static int enterN() {
  28.         int n;
  29.         boolean isIncorrect;
  30.         n = 0;
  31.         do {
  32.             isIncorrect = false;
  33.             System.out.print("Введите порядок матрицы: ");
  34.             try {
  35.                 n = Integer.parseInt(scanner.nextLine());
  36.             } catch (Exception e) {
  37.                 isIncorrect = true;
  38.                 System.out.println("Ошибка ввода. ");
  39.             }
  40.             if (!isIncorrect && (n < 2)) {
  41.                 isIncorrect = true;
  42.                 System.out.println("Порядок матрицы должен быть числом, большим 1.");
  43.             }
  44.         } while (isIncorrect);
  45.         return n;
  46.     }
  47.     public static int[][] createTriangularMatrix(int n) {
  48.         int[][] a = new int[n][n];
  49.         boolean isIncorrect;
  50.         int i;
  51.         int j;
  52.         for (i = 0; i < n; i++) {
  53.             for (j = 0 ; j < n; j++) {
  54.                 do {
  55.                     isIncorrect = false;
  56.                     System.out.println("Введите a[" + (i + 1) + "][" + (j + 1) + "]: ");
  57.                     try {
  58.                         a[i][j] = Integer.parseInt(scanner.nextLine());
  59.                     } catch (Exception e) {
  60.                         isIncorrect = true;
  61.                         System.out.println("Ошибка ввода!");
  62.                     }
  63.                 } while (isIncorrect);
  64.             }
  65.         }
  66.         return a;
  67.     }
  68.     public static String pTF() {
  69.         String path;
  70.         boolean isIncorrect;
  71.         do {
  72.             isIncorrect = false;
  73.             System.out.println("Укажите путь к файлу: ");
  74.             path = scanner.nextLine();
  75.             File file = new File(path);
  76.             if (!file.exists()) {
  77.                 isIncorrect = true;
  78.                 System.out.println("Такой файл не найден. ");
  79.             }
  80.             if (!path.endsWith(".txt")) {
  81.                 isIncorrect = true;
  82.                 System.out.println("У файла должно быть расширение txt. ");
  83.             }
  84.         } while (isIncorrect);
  85.         return path;
  86.     }
  87.     public static int readSizeFile(String path) {
  88.         int n;
  89.         boolean isIncorrect;
  90.         n = 0;
  91.         isIncorrect = false;
  92.         try {
  93.             Scanner scannerFile = new Scanner(new File(path));
  94.             n = scannerFile.nextInt();
  95.             scannerFile.close();
  96.         } catch (Exception e) {
  97.             isIncorrect = true;
  98.             System.out.println("Ошибка при считывании порядка матрицы. ");
  99.         }
  100.         if (!isIncorrect && n < 2) {
  101.             isIncorrect = true;
  102.             System.out.println("Значение порядка матрицы в файле должно быть больше 1. ");
  103.         }
  104.         if (isIncorrect) {
  105.             System.out.println("Введите порядок матрицы с консоли. ");
  106.             n = enterN();
  107.         }
  108.         return n;
  109.     }
  110.     public static int[][] matrixFile(String path, int n) {
  111.         int a[][];
  112.         a = new int[n][n];
  113.         int i;
  114.         int j;
  115.         try {
  116.             Scanner scannerFile = new Scanner(new File(path));
  117.             for (i = 0; i < n; i++) {
  118.                 for (j = 0; j < n; j++) {
  119.                     a[i][j] = scannerFile.nextInt();
  120.                 }
  121.             }
  122.             scannerFile.close();
  123.         } catch (Exception e) {
  124.             System.out.println("Ошибка при считывании файла. ");
  125.         }
  126.         return a;
  127.     }
  128.     public static int[][] matrixRead(int vib) {
  129.         int[][] a;
  130.         int n;
  131.         String path;
  132.         if (vib == 0) {
  133.             n = enterN();
  134.             a = createTriangularMatrix(n);
  135.         } else {
  136.             path = pTF();
  137.             n = readSizeFile(path);
  138.             a = matrixFile(path, n);
  139.         }
  140.         return a;
  141.     }
  142.     public static int outputChoice() {
  143.         int vib;
  144.         boolean isIncorrect;
  145.         vib = 0;
  146.         System.out.println("Введите 0, если хотите сделать вывод в консоль; 1, если хотите вывод в файл. ");
  147.         do {
  148.             isIncorrect = false;
  149.             System.out.print("Выбор: ");
  150.             try {
  151.                 vib = Integer.parseInt(scanner.nextLine());
  152.             } catch (Exception e) {
  153.                 isIncorrect = true;
  154.                 System.out.println("\nОшибка ввода. ");
  155.             }
  156.             if (!isIncorrect && (vib != 1) && (vib != 0)) {
  157.                 isIncorrect = true;
  158.                 System.out.println("Число должно быть либо 0, либо 1. ");
  159.             }
  160.         } while (isIncorrect);
  161.         return vib;
  162.     }
  163.  
  164.     public static int calculateDet(int[][] matrix) {
  165.         int size = matrix.length;
  166.  
  167.         if (size == 1) {
  168.             return matrix[0][0];
  169.         } else if (size == 2) {
  170.             return matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0];
  171.         } else {
  172.             int det = 0;
  173.             int sign = 1;
  174.  
  175.             for (int i = 0; i < size; i++) {
  176.                 int[][] subMatrix = new int[size - 1][size - 1];
  177.  
  178.                 for (int j = 1; j < size; j++) {
  179.                     for (int k = 0; k < size; k++) {
  180.                         if (k < i) {
  181.                             subMatrix[j - 1][k] = matrix[j][k];
  182.                         } else if (k > i) {
  183.                             subMatrix[j - 1][k - 1] = matrix[j][k];
  184.                         }
  185.                     }
  186.                 }
  187.  
  188.                 det += sign * matrix[0][i] * calculateDet(subMatrix);
  189.                 sign *= -1;
  190.             }
  191.  
  192.             return det;
  193.         }
  194.     }
  195.     public static void printResultConsole(int determinanta, int[][] matrix) {
  196.         int n = matrix.length;
  197.         for (int i = 0; i < n; i++) {
  198.             for (int j = 0; j < n; j++) {
  199.                 System.out.print(matrix[i][j] + " ");
  200.             }
  201.             System.out.println();
  202.         }
  203.         System.out.println("Определитель: " + determinanta);
  204.     }
  205.  
  206.     public static void printResultFile(int determinanta, int[][] matrix) {
  207.         int i;
  208.         int j;
  209.         String path;
  210.         path = pTF();
  211.         try (PrintWriter zapis = new PrintWriter(new FileWriter(path))) {
  212.             for (i = 0; i < matrix.length; i++) {
  213.                 for (j = 0; j < matrix[i].length; j++) {
  214.                     zapis.write(matrix[i][j] + " ");
  215.                 }
  216.                 zapis.write(System.lineSeparator());
  217.             }
  218.             zapis.write("Определитель: " + determinanta);
  219.             System.out.println("Запись в файл прошла успешно!");
  220.         } catch (IOException e) {
  221.             System.out.println("Не удалось записать данные в файл.");
  222.         }
  223.     }
  224.  
  225.     public static void vivodSum(int vib, int determinanta, int [][] matrix) {
  226.         if (vib == 0) {
  227.             printResultConsole(determinanta, matrix);
  228.         } else {
  229.             printResultFile(determinanta, matrix);
  230.         }
  231.     }
  232.     public static void main(String[] args) {
  233.         int vib1;
  234.         int vib2;
  235.         int determinanta;
  236.         int[][] matrix;
  237.         vib1 = inputChoice();
  238.         matrix = matrixRead(vib1);
  239.         determinanta = calculateDet(matrix);
  240.         vib2 = outputChoice();
  241.         vivodSum(vib2, determinanta, matrix);
  242.         scanner.close();
  243.  
  244.     }
  245. }
  246.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement