Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.Scanner;
- import java.io.*;
- public class Main {
- static Scanner scanner = new Scanner(System.in);
- public static int inputChoice() {
- int vib;
- boolean isIncorrect;
- vib = 0;
- System.out.println("Введите 0, если хотите сделать ввод с консоли; 1, если хотите ввод из файла. ");
- do {
- isIncorrect = false;
- System.out.print("Выбор: ");
- try {
- vib = Integer.parseInt(scanner.nextLine());
- } catch (Exception e) {
- isIncorrect = true;
- System.out.println("Ошибка ввода. ");
- }
- if (!isIncorrect && (vib != 1) && (vib != 0)) {
- isIncorrect = true;
- System.out.println("Число должно быть либо 0, либо 1. ");
- }
- } while (isIncorrect);
- return vib;
- }
- public static int enterN() {
- int n;
- boolean isIncorrect;
- n = 0;
- do {
- isIncorrect = false;
- System.out.print("Введите порядок матрицы: ");
- try {
- n = Integer.parseInt(scanner.nextLine());
- } catch (Exception e) {
- isIncorrect = true;
- System.out.println("Ошибка ввода. ");
- }
- if (!isIncorrect && (n < 2)) {
- isIncorrect = true;
- System.out.println("Порядок матрицы должен быть числом, большим 1.");
- }
- } while (isIncorrect);
- return n;
- }
- public static int[][] createTriangularMatrix(int n) {
- int[][] a = new int[n][n];
- boolean isIncorrect;
- int i;
- int j;
- for (i = 0; i < n; i++) {
- for (j = 0 ; j < n; j++) {
- do {
- isIncorrect = false;
- System.out.println("Введите a[" + (i + 1) + "][" + (j + 1) + "]: ");
- try {
- a[i][j] = Integer.parseInt(scanner.nextLine());
- } catch (Exception e) {
- isIncorrect = true;
- System.out.println("Ошибка ввода!");
- }
- } while (isIncorrect);
- }
- }
- return a;
- }
- public static String pTF() {
- String path;
- boolean isIncorrect;
- do {
- isIncorrect = false;
- System.out.println("Укажите путь к файлу: ");
- path = scanner.nextLine();
- File file = new File(path);
- if (!file.exists()) {
- isIncorrect = true;
- System.out.println("Такой файл не найден. ");
- }
- if (!path.endsWith(".txt")) {
- isIncorrect = true;
- System.out.println("У файла должно быть расширение txt. ");
- }
- } while (isIncorrect);
- return path;
- }
- public static int readSizeFile(String path) {
- int n;
- boolean isIncorrect;
- n = 0;
- isIncorrect = false;
- try {
- Scanner scannerFile = new Scanner(new File(path));
- n = scannerFile.nextInt();
- scannerFile.close();
- } catch (Exception e) {
- isIncorrect = true;
- System.out.println("Ошибка при считывании порядка матрицы. ");
- }
- if (!isIncorrect && n < 2) {
- isIncorrect = true;
- System.out.println("Значение порядка матрицы в файле должно быть больше 1. ");
- }
- if (isIncorrect) {
- System.out.println("Введите порядок матрицы с консоли. ");
- n = enterN();
- }
- return n;
- }
- public static int[][] matrixFile(String path, int n) {
- int a[][];
- a = new int[n][n];
- int i;
- int j;
- try {
- Scanner scannerFile = new Scanner(new File(path));
- for (i = 0; i < n; i++) {
- for (j = 0; j < n; j++) {
- a[i][j] = scannerFile.nextInt();
- }
- }
- scannerFile.close();
- } catch (Exception e) {
- System.out.println("Ошибка при считывании файла. ");
- }
- return a;
- }
- public static int[][] matrixRead(int vib) {
- int[][] a;
- int n;
- String path;
- if (vib == 0) {
- n = enterN();
- a = createTriangularMatrix(n);
- } else {
- path = pTF();
- n = readSizeFile(path);
- a = matrixFile(path, n);
- }
- return a;
- }
- public static int outputChoice() {
- int vib;
- boolean isIncorrect;
- vib = 0;
- System.out.println("Введите 0, если хотите сделать вывод в консоль; 1, если хотите вывод в файл. ");
- do {
- isIncorrect = false;
- System.out.print("Выбор: ");
- try {
- vib = Integer.parseInt(scanner.nextLine());
- } catch (Exception e) {
- isIncorrect = true;
- System.out.println("\nОшибка ввода. ");
- }
- if (!isIncorrect && (vib != 1) && (vib != 0)) {
- isIncorrect = true;
- System.out.println("Число должно быть либо 0, либо 1. ");
- }
- } while (isIncorrect);
- return vib;
- }
- public static int calculateDet(int[][] 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 {
- int det = 0;
- int sign = 1;
- for (int i = 0; i < size; i++) {
- int[][] subMatrix = new int[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];
- }
- }
- }
- det += sign * matrix[0][i] * calculateDet(subMatrix);
- sign *= -1;
- }
- return det;
- }
- }
- public static void printResultConsole(int determinanta, int[][] matrix) {
- int n = matrix.length;
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < n; j++) {
- System.out.print(matrix[i][j] + " ");
- }
- System.out.println();
- }
- System.out.println("Определитель: " + determinanta);
- }
- public static void printResultFile(int determinanta, int[][] matrix) {
- int i;
- int j;
- String path;
- path = pTF();
- try (PrintWriter zapis = new PrintWriter(new FileWriter(path))) {
- for (i = 0; i < matrix.length; i++) {
- for (j = 0; j < matrix[i].length; j++) {
- zapis.write(matrix[i][j] + " ");
- }
- zapis.write(System.lineSeparator());
- }
- zapis.write("Определитель: " + determinanta);
- System.out.println("Запись в файл прошла успешно!");
- } catch (IOException e) {
- System.out.println("Не удалось записать данные в файл.");
- }
- }
- public static void vivodSum(int vib, int determinanta, int [][] matrix) {
- if (vib == 0) {
- printResultConsole(determinanta, matrix);
- } else {
- printResultFile(determinanta, matrix);
- }
- }
- public static void main(String[] args) {
- int vib1;
- int vib2;
- int determinanta;
- int[][] matrix;
- vib1 = inputChoice();
- matrix = matrixRead(vib1);
- determinanta = calculateDet(matrix);
- vib2 = outputChoice();
- vivodSum(vib2, determinanta, matrix);
- scanner.close();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement