Advertisement
gguuppyy

лаб43

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