Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.*;
- import java.util.Scanner;
- class MyClass {
- static Scanner scanner = new Scanner(System.in);
- public static void printTask() {
- System.out.println("Данная программа выполняет «прямой ход» в решении системы линейных алгебраических уравнений методом Гаусса");
- }
- public static double[][] gauss(double[][] matrix) {
- int n = matrix.length;
- for (int k = 0; k < n; k++)
- for (int j = k + 1; j < n; j++) {
- double temp = matrix[j][k] / matrix[k][k];
- for (int i = k; i < n; i++)
- matrix[j][i] = matrix[j][i] - temp * matrix[k][i];
- matrix[j][n] = matrix[j][n] - temp * matrix[k][n];
- }
- return matrix;
- }
- public static void userInputArrayFromConsole(int n) throws FileNotFoundException {
- final int MIN_VALUE = -500;
- final int MAX_VALUE = 500;
- double[][] matrix = new double[n][];
- System.out.println("Введите коэффициенты в диапазоне " + MIN_VALUE + ".." + MAX_VALUE + ":");
- for (int i = 0; i < n; i++) {
- matrix[i] = new double[n + 1];
- for (int j = 0; j < n; j++) {
- matrix[i][j] = inputValue(MIN_VALUE, MAX_VALUE);
- }
- }
- System.out.println("Введите свободные члены в диапазоне " + MIN_VALUE + ".." + MAX_VALUE + ":");
- for (int i = 0; i < n; i++)
- matrix[i][n] = inputValue(MIN_VALUE, MAX_VALUE);
- outputMethod(gauss(matrix));
- }
- public static PrintWriter userOutputPath() throws FileNotFoundException {
- String path;
- PrintWriter file;
- System.out.println("Введите абсолютный путь к файлу для вывода результата");
- String zero = scanner.nextLine();
- path = scanner.nextLine();
- file = new PrintWriter(path);
- return file;
- }
- public static Scanner userInputPath() throws FileNotFoundException {
- String path;
- boolean isNotValid;
- Scanner file = null;
- String zero = scanner.nextLine();
- do {
- isNotValid = false;
- System.out.println("Введите абсолютный путь к файлу с входными данными");
- path = scanner.nextLine();
- try {
- file = new Scanner(new File(path));
- } catch (FileNotFoundException e) {
- isNotValid = true;
- System.out.println("Файл не найден");
- }
- } while (isNotValid);
- return file;
- }
- public static void userInputFromFile() throws FileNotFoundException {
- int n;
- Scanner file = userInputPath();
- n = file.nextInt();
- double[][] matrix = new double[n][];
- for (int i = 0; i < n; i++) {
- matrix[i] = new double[n + 1];
- for (int j = 0; j < n; j++)
- matrix[i][j] = file.nextInt();
- }
- for (int i = 0; i < n; i++)
- matrix[i][n] = file.nextInt();
- outputMethod(gauss(matrix));
- }
- public static void printWithPath(double[][] matrix) throws FileNotFoundException {
- PrintWriter out = userOutputPath();
- for (int i = 0; i < matrix.length; i++) {
- for (int j = 0; j < matrix[i].length; j++)
- out.printf("%.0f ", matrix[i][j]);
- out.println();
- }
- for (int i = 0; i < matrix.length; i++)
- out.printf("%.0f\n", matrix[i][matrix[i].length - 1]);
- out.close();
- System.out.println("Результат работы помещён в файл");
- }
- public static void printWithoutPath(double[][] matrix) {
- System.out.println("После «прямого хода»");
- for (int i = 0; i < matrix.length; i++) {
- for (int j = 0; j < matrix[i].length - 1; j++)
- System.out.printf("%.0f ", matrix[i][j]);
- System.out.println();
- }
- for (int i = 0; i < matrix.length; i++)
- System.out.printf("%.0f\n", matrix[i][matrix[i].length - 1]);
- }
- public static void outputMethod(double[][] matrix) throws FileNotFoundException {
- int method;
- System.out.println("Куда хотите вывести результат?");
- System.out.println("1 - в консоль");
- System.out.println("2 - в файл");
- do {
- method = scanner.nextInt();
- switch (method) {
- case 1: { printWithoutPath(matrix); break; }
- case 2: { printWithPath(matrix); break; }
- default: System.out.println("Введите корректный способ вывода");
- }
- } while (method != 2 && method != 1);
- }
- public static void inputMethod() throws FileNotFoundException {
- int method;
- System.out.println("Каким способом хотите ввести данные?");
- System.out.println("1 - с помощью консоли");
- System.out.println("2 - с помощью файла");
- do {
- method = scanner.nextInt();
- switch (method) {
- case 1: { userInputFromConsole(); break; }
- case 2: { userInputFromFile(); break; }
- default: System.out.println("Введите корректный способ ввода");
- }
- } while (method != 2 && method != 1);
- }
- public static void userInputFromConsole() throws FileNotFoundException {
- final int MIN_SIZE = 1;
- final int MAX_SIZE = 20;
- int n;
- System.out.print("Введите порядок матрицы в диапазоне " + MIN_SIZE + ".." + MAX_SIZE + ": ");
- n = (int) Math.round(inputValue(MIN_SIZE, MAX_SIZE));
- userInputArrayFromConsole(n);
- }
- public static double inputValue(int min, int max) {
- double currentValue;
- boolean isNotValid = true;
- do {
- currentValue = scanner.nextInt();
- if (currentValue >= min && currentValue <= max)
- isNotValid = false;
- else
- System.out.println("Введите число в заданном диапазоне");
- } while (isNotValid);
- return currentValue;
- }
- public static void main(String[] args) throws Exception {
- printTask();
- inputMethod();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement