Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.Scanner;
- import java.io.File;
- import java.io.FileWriter;
- import java.io.IOException;
- public class Main {
- public static int checkForRes() {
- boolean correct;
- int resultEnter;
- Scanner scanner = new Scanner(System.in);
- System.out.print("Введите тип вывода результата: 1 - для файла, 0 - для консоли: ");
- do {
- correct = true;
- resultEnter = scanner.nextInt();
- if (resultEnter != 0 && resultEnter != 1) {
- System.out.print("Ошибка. Введите 1 или 0: ");
- correct = false;
- }
- } while (!correct);
- return resultEnter;
- }
- public static String inputPathToFile() {
- Scanner scanner = new Scanner(System.in);
- String path;
- boolean isCorrect;
- do {
- System.out.print("Введите путь к файлу: ");
- path = scanner.nextLine();
- isCorrect = false;
- File file = new File(path);
- if (!file.exists()) {
- isCorrect = true;
- System.out.println("Ошибка существования файла");
- }
- } while (isCorrect);
- return path;
- }
- public static int inputSizeFromConsole() {
- final int MIN_VALUE = 1;
- Scanner scanner = new Scanner(System.in);
- int size;
- boolean isCorrect;
- do {
- isCorrect = false;
- System.out.print("Введите размер матрицы: ");
- size = scanner.nextInt();
- if (size < MIN_VALUE) {
- isCorrect = true;
- System.out.println("Порядок матрицы не может быть меньше 1");
- }
- } while (isCorrect);
- return size;
- }
- public static int inputSizeFromFile(String path) {
- final int MIN_VALUE = 1;
- Scanner scanner;
- int size = 0;
- boolean isCorrect;
- do {
- scanner = null;
- try {
- scanner = new Scanner(new File(path));
- size = scanner.nextInt();
- isCorrect = false;
- if (size < MIN_VALUE) {
- System.out.println("Порядок матрицы не может быть меньше 1! Исправьте файл и нажмите Enter.");
- isCorrect = true;
- }
- } catch (IOException e) {
- System.out.println("Ошибка при чтении порядка матрицы! Исправьте файл и нажмите Enter.");
- isCorrect = true;
- } finally {
- if (scanner != null) {
- scanner.close();
- }
- }
- if (isCorrect) {
- scanner = new Scanner(System.in);
- scanner.nextLine();
- }
- } while (isCorrect);
- return size;
- }
- public static float[][] inputMatrixFromConsole(int size) {
- Scanner scanner = new Scanner(System.in);
- float[][] matrix = new float[size][size];
- boolean isCorrect;
- System.out.println("Введите матрицу:");
- for (int i = 0; i < size; i++) {
- for (int j = 0; j < size; j++) {
- do {
- isCorrect = false;
- try {
- matrix[i][j] = scanner.nextFloat();
- } catch (Exception e) {
- System.out.println("Проверьте корректность введённых значений");
- isCorrect = true;
- }
- scanner.nextLine(); // Пропустить оставшуюся часть строки ввода
- } while (isCorrect);
- }
- }
- return matrix;
- }
- public static float[][] inputMatrixFromFile(String path, int size) {
- Scanner scanner = null;
- String line;
- boolean isCorrect = true;
- float[][] matrix = new float[size][size];
- try {
- scanner = new Scanner(new File(path));
- for (int i = 0; i < size; i++) {
- line = scanner.nextLine();
- String[] values = line.split(" ");
- for (int j = 0; j < size; j++) {
- try {
- matrix[i][j] = Float.parseFloat(values[j]);
- } catch (NumberFormatException e) {
- System.out.println("Ошибка при чтении матрицы! Исправьте файл и нажмите Enter!");
- isCorrect = true;
- break;
- }
- }
- if (isCorrect) {
- break;
- }
- }
- } catch (IOException e) {
- System.out.println("Ошибка при чтении матрицы! Исправьте файл и нажмите Enter!");
- matrix = null;
- } finally {
- if (scanner !=null) {
- scanner.close();
- }
- }
- return matrix;
- }
- public static float calculateDeterminant(float[][] matrix) {
- int size = matrix.length;
- if (size == 1) {
- return matrix[0][0];
- } else if (size == 2) {
- return matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0];
- } else {
- float determinant = 0;
- int sign = 1;
- for (int i = 0; i < size; i++) {
- float[][] subMatrix = new float[size - 1][size - 1];
- for (int j = 1; j < size; j++) {
- for (int k = 0; k < size; k++) {
- if (k < i) {
- subMatrix[j - 1][k] = matrix[j][k];
- } else if (k > i) {
- subMatrix[j - 1][k - 1] = matrix[j][k];
- }
- }
- }
- determinant += sign * matrix[0][i] * calculateDeterminant(subMatrix);
- sign *= -1;
- }
- return determinant;
- }
- }
- public static void outputResult(int resultType, String path, float determinant) {
- if (resultType == 1) {
- try {
- FileWriter writer = new FileWriter(path);
- writer.write(String.valueOf(determinant));
- writer.close();
- System.out.println("Результат успешно записан в файл " + path);
- } catch (IOException e) {
- System.out.println("Ошибка при записи результата в файл");
- }
- } else {
- System.out.println("Определитель матрицы: " + determinant);
- }
- }
- public static void main(String[] args) {
- int resultType = checkForRes();
- String path;
- if (resultType == 1) {
- path = inputPathToFile();
- } else {
- path = null;
- }
- int size;
- float[][] matrix;
- if (path != null) {
- size = inputSizeFromFile(path);
- matrix = inputMatrixFromFile(path, size);
- } else {
- size = inputSizeFromConsole();
- matrix = inputMatrixFromConsole(size);
- }
- if (matrix != null) {
- float determinant = calculateDeterminant(matrix);
- outputResult(resultType, path, determinant);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement