Advertisement
anticlown

laba.2.3.Gay_ss(Java)

Nov 6th, 2022 (edited)
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 14.07 KB | None | 0 0
  1. import java.util.Scanner;
  2. import java.io.*;
  3.  
  4. public class Main {
  5.   private static final int MIN_SIZE = 2;
  6.   private static final int MAX_SIZE = 10;
  7.   private static final int MIN_VALUE = -1000;
  8.   private static final int MAX_VALUE = 1000;
  9.   private static final Scanner scan = new Scanner(System.in);
  10.  
  11.   public static void outputTaskInfo() {
  12.     System.out.println("Данная программа выполняет «прямой ход» в решении СЛАУ методом Гаусса." + "\n" +
  13.             "Диапазон ввода значений количества уравнений в системе: " + MIN_SIZE + "..." + MAX_SIZE + ". \n" +
  14.             "Диапазон ввода значений коэффициентов при переменных: " + MIN_VALUE + "..." + MAX_VALUE + ".");
  15.   }
  16.  
  17.   public static int getVerificationOfChoice() {
  18.     int choice = 0;
  19.     boolean isIncorrect;
  20.  
  21.     do {
  22.       isIncorrect = false;
  23.       try {
  24.         choice = Integer.parseInt(scan.nextLine());
  25.       } catch (NumberFormatException e) {
  26.         System.out.println("Проверьте корректность ввода данных!");
  27.         isIncorrect = true;
  28.       }
  29.       if (!isIncorrect && (choice != 0 && choice != 1)) {
  30.         System.out.println("Для выбора введите 0 или 1!");
  31.         isIncorrect = true;
  32.       }
  33.     } while (isIncorrect);
  34.  
  35.     return choice;
  36.   }
  37.  
  38.   public static String inputPathToFile() {
  39.     boolean isIncorrect;
  40.     String path;
  41.  
  42.     System.out.println("Укажите путь к файлу: ");
  43.  
  44.     do {
  45.       isIncorrect = false;
  46.       path = scan.nextLine();
  47.       File file = new File(path);
  48.  
  49.       if (!file.exists()) {
  50.         System.out.println("По указанному пути файл не найден! Укажите правильный путь: ");
  51.         isIncorrect = true;
  52.       }
  53.     } while (isIncorrect);
  54.  
  55.     return path;
  56.   }
  57.  
  58.   public static int readSizeFromConsole() {
  59.     int size = 0;
  60.     boolean isIncorrect;
  61.  
  62.     System.out.println("Введите значение количества уравнений системы: ");
  63.  
  64.     do {
  65.       isIncorrect = false;
  66.       try {
  67.         size = Integer.parseInt(scan.nextLine());
  68.       } catch (NumberFormatException e) {
  69.         System.out.println("Проверьте корректность ввода данных!");
  70.         isIncorrect = true;
  71.       }
  72.       if (!isIncorrect && (size < MIN_SIZE || size > MAX_SIZE)) {
  73.         System.out.println("Введите число от " + MIN_SIZE + " до " + MAX_SIZE + "! \n");
  74.         isIncorrect = true;
  75.       }
  76.     } while (isIncorrect);
  77.  
  78.     return size;
  79.   }
  80.  
  81.   public static int readSizeFromFile(final String path) {
  82.     int size;
  83.     boolean isIncorrect = true;
  84.  
  85.     System.out.println("Происходит чтение размеров матрицы...");
  86.  
  87.     try (BufferedReader br = new BufferedReader(new FileReader(path))) {
  88.       size = Integer.parseInt(br.readLine());
  89.     } catch (Exception e) {
  90.       isIncorrect = false;
  91.       System.out.println("Ошибка при чтении данных! Введите количество уравнений с консоли!");
  92.       size = readSizeFromConsole();
  93.     }
  94.  
  95.     return size;
  96.   }
  97.  
  98.   public static void outputSize(final int choice, int size, String path) {
  99.     boolean isIncorrect;
  100.  
  101.     if (choice == 0)
  102.       System.out.println("Количество уравнений в системе равно: " + size + ".");
  103.  
  104.     if (choice == 1) {
  105.       System.out.println("Вывод количества уравнений в файл...");
  106.  
  107.       do {
  108.         isIncorrect = false;
  109.         try {
  110.           FileWriter writer = new FileWriter(path);
  111.           writer.write(size + "\n");
  112.           writer.close();
  113.         } catch (IOException e) {
  114.           isIncorrect = true;
  115.           System.out.println("Ошибка! Измените параметры файла или укажите новую ссылку!");
  116.           path = inputPathToFile();
  117.         }
  118.       } while (isIncorrect);
  119.  
  120.       System.out.println("Данные успешно записаны в файл!");
  121.     }
  122.   }
  123.  
  124.   public static int[][] fillMatrixFromConsole(final int size) {
  125.     int[][] matrix = new int[size][size + 1];
  126.     boolean isIncorrect;
  127.     int columns = size + 1;
  128.  
  129.     for (int i = 0; i < size; i++) {
  130.       for (int j = 0; j < columns; j++) {
  131.         System.out.println("Введите значение коэфф-та в " + (i + 1) + "-ом уравнении при " + (j + 1) + "-ой позиции: ");
  132.  
  133.         do {
  134.           isIncorrect = false;
  135.           try {
  136.             matrix[i][j] = Integer.parseInt(scan.nextLine());
  137.           } catch (NumberFormatException e) {
  138.             System.out.println("Проверьте корректность ввода данных!");
  139.             isIncorrect = true;
  140.           }
  141.  
  142.           if (!isIncorrect && (matrix[i][j] < MIN_VALUE || matrix[i][j] > MAX_VALUE)) {
  143.             isIncorrect = true;
  144.             System.out.println("Введите число от " + MIN_VALUE + " до " + MAX_VALUE + "!");
  145.           }
  146.         } while (isIncorrect);
  147.       }
  148.     }
  149.  
  150.     return matrix;
  151.   }
  152.  
  153.   public static int[][] fillMatrixFromFile(final int size, String path) {
  154.     int[][] matrix = new int[size][size + 1];
  155.     int finalPosI = size + 1;
  156.     int i;
  157.     int count = 1;
  158.  
  159.     System.out.println("Происходит чтение системы...");
  160.  
  161.     for (i = 0; i < size; i++) {
  162.         try (BufferedReader fReader = new BufferedReader(new FileReader(path))){
  163.           for (int j = 0; j < count; j++)
  164.             fReader.readLine();
  165.  
  166.           count++;
  167.           String[] integerInString = fReader.readLine().split(" ");
  168.  
  169.           for (int j = 0; j < finalPosI; j++)
  170.             matrix[i][j] = Integer.parseInt(integerInString[j]);
  171.         } catch (Exception e) {
  172.           System.out.println("Ошибка при чтении системы! Введите систему с консоли!");
  173.           matrix = fillMatrixFromConsole(size);
  174.         }
  175.         for (int j = 0; j < finalPosI; j++) {
  176.           if (matrix[i][j] < MIN_VALUE || matrix[i][j] > MAX_VALUE) {
  177.             System.out.println("Ошибка при считывании матрицы из файла!Введите матрицу с консоли!");
  178.             matrix = fillMatrixFromConsole(size);
  179.           }
  180.         }
  181.       }
  182.  
  183.     return matrix;
  184.   }
  185.   public static void outputMatrix(final int choice, String path, final int[][] matrix, final int size) {
  186.     boolean isIncorrect;
  187.  
  188.     if (choice == 0) {
  189.       System.out.println("Вывод начальной матрицы: ");
  190.  
  191.       for (int i = 0; i < size; i++)
  192.       {
  193.         System.out.print("|");
  194.         for (int j = 0; j < size; j++)
  195.           System.out.print(" " + matrix[i][j] + " ");
  196.         System.out.print ("|  " + matrix[i][size] + "; \n");
  197.       }
  198.  
  199.       System.out.print("\n");
  200.     }
  201.  
  202.     if (choice == 1) {
  203.       System.out.println("Вывод начальной системы уравнений в файл... ");
  204.  
  205.       do {
  206.         isIncorrect = false;
  207.         try {
  208.           FileWriter writer = new FileWriter(path, true);
  209.           BufferedWriter bufferWriter = new BufferedWriter(writer);
  210.  
  211.           for (int i = 0; i < size; i++)
  212.           {
  213.             bufferWriter.write("|");
  214.             for (int j = 0; j < size; j++)
  215.               bufferWriter.write(matrix[i][j] + "  ");
  216.             bufferWriter.write("|  " + matrix[i][size] + "; \n");
  217.           }
  218.           bufferWriter.write("\n");
  219.  
  220.           bufferWriter.close();
  221.           writer.close();
  222.         } catch (IOException e) {
  223.           isIncorrect = true;
  224.           System.out.println("Ошибка! Измените параметры файла или укажите новую ссылку!");
  225.           path = inputPathToFile();
  226.         }
  227.       } while (isIncorrect);
  228.  
  229.       System.out.println("Данные успешно записаны в файл!");
  230.     }
  231.   }
  232.  
  233.   public static float[][] findTriangleMatrix(final int[][] matrix, final int size) {
  234.     float[][] triangleMatrix = new float[size][size + 1];
  235.     int columns = size + 1;
  236.  
  237.     for (int i = 0; i < size; i++) {
  238.       for (int j = 0; j < columns; j++)
  239.         triangleMatrix[i][j] = matrix[i][j];
  240.     }
  241.  
  242.     for (int i = 0; i < size; i++)
  243.     {
  244.       int startPosJ = i + 1;
  245.  
  246.       for (int j = startPosJ; j < size; j++)
  247.       {
  248.         float temp = triangleMatrix[j][i] / triangleMatrix[i][i];
  249.  
  250.         for (int k = i; k < size; k++)
  251.           triangleMatrix[j][k] = triangleMatrix[j][k] - temp * triangleMatrix[i][k];
  252.  
  253.         triangleMatrix[j][size] = triangleMatrix[j][size] - temp * triangleMatrix[i][size];
  254.       }
  255.     }
  256.  
  257.     return triangleMatrix;
  258.   }
  259.  
  260.   public static void outputTriangleMatrix(final int choice, String path, final float[][] matrix, final int size) {
  261.     boolean isIncorrect;
  262.  
  263.     if (choice == 0) {
  264.       System.out.println("Вывод преобразованной системы: ");
  265.  
  266.       for (int i = 0; i < size; i++)
  267.       {
  268.         System.out.print("|");
  269.         for (int j = 0; j < size; j++)
  270.           System.out.print(" " + matrix[i][j] + " ");
  271.         System.out.print ("|  " + matrix[i][size] + "; \n");
  272.       }
  273.  
  274.       System.out.print("\n");
  275.     }
  276.  
  277.     if (choice == 1) {
  278.       System.out.println("Вывод преобразованной системы в файл...");
  279.  
  280.       do {
  281.         isIncorrect = false;
  282.         try {
  283.           FileWriter writer = new FileWriter(path, true);
  284.           BufferedWriter bufferWriter = new BufferedWriter(writer);
  285.  
  286.           for (int i = 0; i < size; i++)
  287.           {
  288.             bufferWriter.write("|");
  289.             for (int j = 0; j < size; j++)
  290.               bufferWriter.write(matrix[i][j] + "  ");
  291.             bufferWriter.write("|  " + matrix[i][size] + "; \n");
  292.           }
  293.           bufferWriter.write("\n");
  294.  
  295.           bufferWriter.close();
  296.           writer.close();
  297.         } catch (IOException e) {
  298.           isIncorrect = true;
  299.           System.out.println("Ошибка! Измените параметры файла или укажите новую ссылку!");
  300.           path = inputPathToFile();
  301.         }
  302.       } while (isIncorrect);
  303.  
  304.       System.out.println("Данные успешно записаны в файл!");
  305.     }
  306.   }
  307.  
  308.   public static float[] findRoots(float[][] triangleMatrix) {
  309.     float[] ansArr = new float[triangleMatrix.length];
  310.     float temp;
  311.     int pos = triangleMatrix.length - 1;
  312.     int k = 1;
  313.     float dividend;
  314.  
  315.     for (int i = 0; i < triangleMatrix.length; i++)
  316.     {
  317.       if (triangleMatrix[pos][pos] != 0)
  318.       {
  319.         dividend = triangleMatrix[pos][pos + k];
  320.  
  321.         for (int j = 0; j < i; j++)
  322.           dividend = dividend - triangleMatrix[pos][pos + i - j] * ansArr[j];
  323.  
  324.         temp = dividend / triangleMatrix[pos][pos];
  325.       }
  326.       else
  327.         temp = 0;
  328.  
  329.       ansArr[i] = temp;
  330.       k++;
  331.       pos--;
  332.     }
  333.  
  334.     return ansArr;
  335.   }
  336.  
  337.   public static void outputAnsArr(final int choice, String path, final float[] ansArr, final int size ) {
  338.     boolean isIncorrect;
  339.  
  340.     if (choice == 0) {
  341.       System.out.println("Вывод полученных корней: ");
  342.  
  343.       for (int i = 0; i < size; i++)
  344.       {
  345.         System.out.println("Значение " + (i + 1) + "-ой переменной равно: " + ansArr[i] + ".");
  346.       }
  347.     }
  348.  
  349.     if (choice == 1) {
  350.       System.out.println("Вывод начальной матрицы в файл...");
  351.  
  352.       do {
  353.         isIncorrect = false;
  354.         try {
  355.           FileWriter writer = new FileWriter(path, true);
  356.           BufferedWriter bufferWriter = new BufferedWriter(writer);
  357.  
  358.           for (int i = 0; i < size; i++)
  359.           {
  360.             bufferWriter.write("Значение " + (i + 1) + "-ой переменной равно: " + ansArr[i] + ".");
  361.             bufferWriter.write("\n");
  362.           }
  363.  
  364.           bufferWriter.close();
  365.           writer.close();
  366.         } catch (IOException e) {
  367.           isIncorrect = true;
  368.           System.out.println("Ошибка! Измените параметры файла или укажите новую ссылку!");
  369.           path = inputPathToFile();
  370.         }
  371.       } while (isIncorrect);
  372.  
  373.       System.out.println("Данные успешно записаны в файл!");
  374.     }
  375.   }
  376.   public static int[][] processUserInput() {
  377.     int size;
  378.     int choiceForInput;
  379.     int[][] matrix = new int[0][];
  380.     String pathToIn;
  381.  
  382.     System.out.println("Вы желаете ввести данные с консоли(0) или взять данные из файла(1)?");
  383.     choiceForInput = getVerificationOfChoice();
  384.  
  385.     if (choiceForInput == 0) {
  386.       size = readSizeFromConsole();
  387.       matrix = fillMatrixFromConsole(size);
  388.     }
  389.     if (choiceForInput == 1) {
  390.       pathToIn = inputPathToFile();
  391.       size = readSizeFromFile(pathToIn);
  392.       matrix = fillMatrixFromFile(size, pathToIn);
  393.     }
  394.  
  395.     return matrix;
  396.   }
  397.  
  398.   public static void processUserOutput(int size, int[][] matrix, float[][] triangleMatrix, float[] ansArr) {
  399.     int choiceForOutput;
  400.     String pathToOut = "";
  401.  
  402.     System.out.println("Вы желаете получить результат в консоли(0) или в файле(1)?");
  403.     choiceForOutput = getVerificationOfChoice();
  404.  
  405.     if (choiceForOutput == 1)
  406.       pathToOut = inputPathToFile();
  407.     outputSize(choiceForOutput, size, pathToOut);
  408.     outputMatrix(choiceForOutput, pathToOut, matrix, size);
  409.     outputTriangleMatrix(choiceForOutput, pathToOut, triangleMatrix, size);
  410.     outputAnsArr(choiceForOutput, pathToOut, ansArr, size);
  411.   }
  412.  
  413.   public static void main (String[] args) {
  414.     outputTaskInfo();
  415.     int[][] matrix = processUserInput();
  416.     float[][] triangleMatrix = findTriangleMatrix(matrix, matrix.length);
  417.     float[] ansArr = findRoots(triangleMatrix);
  418.     processUserOutput(matrix.length, matrix, triangleMatrix, ansArr);
  419.  
  420.     scan.close();
  421.   }
  422. }
  423.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement