Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.Scanner;
- import java.io.*;
- public class Main {
- private static final int MIN_SIZE = 2;
- private static final int MAX_SIZE = 10;
- private static final int MIN_VALUE = -1000;
- private static final int MAX_VALUE = 1000;
- private static final Scanner scan = new Scanner(System.in);
- public static void outputTaskInfo() {
- System.out.println("Данная программа выполняет «прямой ход» в решении СЛАУ методом Гаусса." + "\n" +
- "Диапазон ввода значений количества уравнений в системе: " + MIN_SIZE + "..." + MAX_SIZE + ". \n" +
- "Диапазон ввода значений коэффициентов при переменных: " + MIN_VALUE + "..." + MAX_VALUE + ".");
- }
- public static int getVerificationOfChoice() {
- int choice = 0;
- boolean isIncorrect;
- do {
- isIncorrect = false;
- try {
- choice = Integer.parseInt(scan.nextLine());
- } catch (NumberFormatException e) {
- System.out.println("Проверьте корректность ввода данных!");
- isIncorrect = true;
- }
- if (!isIncorrect && (choice != 0 && choice != 1)) {
- System.out.println("Для выбора введите 0 или 1!");
- isIncorrect = true;
- }
- } while (isIncorrect);
- return choice;
- }
- public static String inputPathToFile() {
- boolean isIncorrect;
- String path;
- System.out.println("Укажите путь к файлу: ");
- do {
- isIncorrect = false;
- path = scan.nextLine();
- File file = new File(path);
- if (!file.exists()) {
- System.out.println("По указанному пути файл не найден! Укажите правильный путь: ");
- isIncorrect = true;
- }
- } while (isIncorrect);
- return path;
- }
- public static int readSizeFromConsole() {
- int size = 0;
- boolean isIncorrect;
- System.out.println("Введите значение количества уравнений системы: ");
- do {
- isIncorrect = false;
- try {
- size = Integer.parseInt(scan.nextLine());
- } catch (NumberFormatException e) {
- System.out.println("Проверьте корректность ввода данных!");
- isIncorrect = true;
- }
- if (!isIncorrect && (size < MIN_SIZE || size > MAX_SIZE)) {
- System.out.println("Введите число от " + MIN_SIZE + " до " + MAX_SIZE + "! \n");
- isIncorrect = true;
- }
- } while (isIncorrect);
- return size;
- }
- public static int readSizeFromFile(final String path) {
- int size;
- boolean isIncorrect = true;
- System.out.println("Происходит чтение размеров матрицы...");
- try (BufferedReader br = new BufferedReader(new FileReader(path))) {
- size = Integer.parseInt(br.readLine());
- } catch (Exception e) {
- isIncorrect = false;
- System.out.println("Ошибка при чтении данных! Введите количество уравнений с консоли!");
- size = readSizeFromConsole();
- }
- return size;
- }
- public static void outputSize(final int choice, int size, String path) {
- boolean isIncorrect;
- if (choice == 0)
- System.out.println("Количество уравнений в системе равно: " + size + ".");
- if (choice == 1) {
- System.out.println("Вывод количества уравнений в файл...");
- do {
- isIncorrect = false;
- try {
- FileWriter writer = new FileWriter(path);
- writer.write(size + "\n");
- writer.close();
- } catch (IOException e) {
- isIncorrect = true;
- System.out.println("Ошибка! Измените параметры файла или укажите новую ссылку!");
- path = inputPathToFile();
- }
- } while (isIncorrect);
- System.out.println("Данные успешно записаны в файл!");
- }
- }
- public static int[][] fillMatrixFromConsole(final int size) {
- int[][] matrix = new int[size][size + 1];
- boolean isIncorrect;
- int columns = size + 1;
- for (int i = 0; i < size; i++) {
- for (int j = 0; j < columns; j++) {
- System.out.println("Введите значение коэфф-та в " + (i + 1) + "-ом уравнении при " + (j + 1) + "-ой позиции: ");
- do {
- isIncorrect = false;
- try {
- matrix[i][j] = Integer.parseInt(scan.nextLine());
- } catch (NumberFormatException e) {
- System.out.println("Проверьте корректность ввода данных!");
- isIncorrect = true;
- }
- if (!isIncorrect && (matrix[i][j] < MIN_VALUE || matrix[i][j] > MAX_VALUE)) {
- isIncorrect = true;
- System.out.println("Введите число от " + MIN_VALUE + " до " + MAX_VALUE + "!");
- }
- } while (isIncorrect);
- }
- }
- return matrix;
- }
- public static int[][] fillMatrixFromFile(final int size, String path) {
- int[][] matrix = new int[size][size + 1];
- int finalPosI = size + 1;
- int i;
- int count = 1;
- System.out.println("Происходит чтение системы...");
- for (i = 0; i < size; i++) {
- try (BufferedReader fReader = new BufferedReader(new FileReader(path))){
- for (int j = 0; j < count; j++)
- fReader.readLine();
- count++;
- String[] integerInString = fReader.readLine().split(" ");
- for (int j = 0; j < finalPosI; j++)
- matrix[i][j] = Integer.parseInt(integerInString[j]);
- } catch (Exception e) {
- System.out.println("Ошибка при чтении системы! Введите систему с консоли!");
- matrix = fillMatrixFromConsole(size);
- }
- for (int j = 0; j < finalPosI; j++) {
- if (matrix[i][j] < MIN_VALUE || matrix[i][j] > MAX_VALUE) {
- System.out.println("Ошибка при считывании матрицы из файла!Введите матрицу с консоли!");
- matrix = fillMatrixFromConsole(size);
- }
- }
- }
- return matrix;
- }
- public static void outputMatrix(final int choice, String path, final int[][] matrix, final int size) {
- boolean isIncorrect;
- if (choice == 0) {
- System.out.println("Вывод начальной матрицы: ");
- for (int i = 0; i < size; i++)
- {
- System.out.print("|");
- for (int j = 0; j < size; j++)
- System.out.print(" " + matrix[i][j] + " ");
- System.out.print ("| " + matrix[i][size] + "; \n");
- }
- System.out.print("\n");
- }
- if (choice == 1) {
- System.out.println("Вывод начальной системы уравнений в файл... ");
- do {
- isIncorrect = false;
- try {
- FileWriter writer = new FileWriter(path, true);
- BufferedWriter bufferWriter = new BufferedWriter(writer);
- for (int i = 0; i < size; i++)
- {
- bufferWriter.write("|");
- for (int j = 0; j < size; j++)
- bufferWriter.write(matrix[i][j] + " ");
- bufferWriter.write("| " + matrix[i][size] + "; \n");
- }
- bufferWriter.write("\n");
- bufferWriter.close();
- writer.close();
- } catch (IOException e) {
- isIncorrect = true;
- System.out.println("Ошибка! Измените параметры файла или укажите новую ссылку!");
- path = inputPathToFile();
- }
- } while (isIncorrect);
- System.out.println("Данные успешно записаны в файл!");
- }
- }
- public static float[][] findTriangleMatrix(final int[][] matrix, final int size) {
- float[][] triangleMatrix = new float[size][size + 1];
- int columns = size + 1;
- for (int i = 0; i < size; i++) {
- for (int j = 0; j < columns; j++)
- triangleMatrix[i][j] = matrix[i][j];
- }
- for (int i = 0; i < size; i++)
- {
- int startPosJ = i + 1;
- for (int j = startPosJ; j < size; j++)
- {
- float temp = triangleMatrix[j][i] / triangleMatrix[i][i];
- for (int k = i; k < size; k++)
- triangleMatrix[j][k] = triangleMatrix[j][k] - temp * triangleMatrix[i][k];
- triangleMatrix[j][size] = triangleMatrix[j][size] - temp * triangleMatrix[i][size];
- }
- }
- return triangleMatrix;
- }
- public static void outputTriangleMatrix(final int choice, String path, final float[][] matrix, final int size) {
- boolean isIncorrect;
- if (choice == 0) {
- System.out.println("Вывод преобразованной системы: ");
- for (int i = 0; i < size; i++)
- {
- System.out.print("|");
- for (int j = 0; j < size; j++)
- System.out.print(" " + matrix[i][j] + " ");
- System.out.print ("| " + matrix[i][size] + "; \n");
- }
- System.out.print("\n");
- }
- if (choice == 1) {
- System.out.println("Вывод преобразованной системы в файл...");
- do {
- isIncorrect = false;
- try {
- FileWriter writer = new FileWriter(path, true);
- BufferedWriter bufferWriter = new BufferedWriter(writer);
- for (int i = 0; i < size; i++)
- {
- bufferWriter.write("|");
- for (int j = 0; j < size; j++)
- bufferWriter.write(matrix[i][j] + " ");
- bufferWriter.write("| " + matrix[i][size] + "; \n");
- }
- bufferWriter.write("\n");
- bufferWriter.close();
- writer.close();
- } catch (IOException e) {
- isIncorrect = true;
- System.out.println("Ошибка! Измените параметры файла или укажите новую ссылку!");
- path = inputPathToFile();
- }
- } while (isIncorrect);
- System.out.println("Данные успешно записаны в файл!");
- }
- }
- public static float[] findRoots(float[][] triangleMatrix) {
- float[] ansArr = new float[triangleMatrix.length];
- float temp;
- int pos = triangleMatrix.length - 1;
- int k = 1;
- float dividend;
- for (int i = 0; i < triangleMatrix.length; i++)
- {
- if (triangleMatrix[pos][pos] != 0)
- {
- dividend = triangleMatrix[pos][pos + k];
- for (int j = 0; j < i; j++)
- dividend = dividend - triangleMatrix[pos][pos + i - j] * ansArr[j];
- temp = dividend / triangleMatrix[pos][pos];
- }
- else
- temp = 0;
- ansArr[i] = temp;
- k++;
- pos--;
- }
- return ansArr;
- }
- public static void outputAnsArr(final int choice, String path, final float[] ansArr, final int size ) {
- boolean isIncorrect;
- if (choice == 0) {
- System.out.println("Вывод полученных корней: ");
- for (int i = 0; i < size; i++)
- {
- System.out.println("Значение " + (i + 1) + "-ой переменной равно: " + ansArr[i] + ".");
- }
- }
- if (choice == 1) {
- System.out.println("Вывод начальной матрицы в файл...");
- do {
- isIncorrect = false;
- try {
- FileWriter writer = new FileWriter(path, true);
- BufferedWriter bufferWriter = new BufferedWriter(writer);
- for (int i = 0; i < size; i++)
- {
- bufferWriter.write("Значение " + (i + 1) + "-ой переменной равно: " + ansArr[i] + ".");
- bufferWriter.write("\n");
- }
- bufferWriter.close();
- writer.close();
- } catch (IOException e) {
- isIncorrect = true;
- System.out.println("Ошибка! Измените параметры файла или укажите новую ссылку!");
- path = inputPathToFile();
- }
- } while (isIncorrect);
- System.out.println("Данные успешно записаны в файл!");
- }
- }
- public static int[][] processUserInput() {
- int size;
- int choiceForInput;
- int[][] matrix = new int[0][];
- String pathToIn;
- System.out.println("Вы желаете ввести данные с консоли(0) или взять данные из файла(1)?");
- choiceForInput = getVerificationOfChoice();
- if (choiceForInput == 0) {
- size = readSizeFromConsole();
- matrix = fillMatrixFromConsole(size);
- }
- if (choiceForInput == 1) {
- pathToIn = inputPathToFile();
- size = readSizeFromFile(pathToIn);
- matrix = fillMatrixFromFile(size, pathToIn);
- }
- return matrix;
- }
- public static void processUserOutput(int size, int[][] matrix, float[][] triangleMatrix, float[] ansArr) {
- int choiceForOutput;
- String pathToOut = "";
- System.out.println("Вы желаете получить результат в консоли(0) или в файле(1)?");
- choiceForOutput = getVerificationOfChoice();
- if (choiceForOutput == 1)
- pathToOut = inputPathToFile();
- outputSize(choiceForOutput, size, pathToOut);
- outputMatrix(choiceForOutput, pathToOut, matrix, size);
- outputTriangleMatrix(choiceForOutput, pathToOut, triangleMatrix, size);
- outputAnsArr(choiceForOutput, pathToOut, ansArr, size);
- }
- public static void main (String[] args) {
- outputTaskInfo();
- int[][] matrix = processUserInput();
- float[][] triangleMatrix = findTriangleMatrix(matrix, matrix.length);
- float[] ansArr = findRoots(triangleMatrix);
- processUserOutput(matrix.length, matrix, triangleMatrix, ansArr);
- scan.close();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement