Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.company;
- import java.io.File;
- import java.io.FileNotFoundException;
- import java.io.FileWriter;
- import java.io.IOException;
- import java.util.Scanner;
- public class Main {
- static final int minValue = -23170;
- static final int maxValue = 23170;
- static final double minStep = 0.0001;
- static final double maxStep = 0.1;
- static Scanner scanner;
- static double[] inputIntervalFromConsole() {
- double[] interval = new double[2];
- boolean isIncorrect;
- do {
- isIncorrect = false;
- System.out.println("\nВведите A из следующего диапазона [" + minValue + ";" + maxValue + "]: ");
- try {
- interval[0] = Double.parseDouble(scanner.nextLine());
- if ((interval[0] < minValue) || (interval[0] > maxValue)) {
- System.out.println("Введено число не из диапазона! Пожалуйста, повторите попытку");
- isIncorrect = true;
- }
- } catch (Exception ex) {
- System.out.println("Ошибка! Введено не число! Пожалуйста, повторите попытку");
- isIncorrect = true;
- }
- }
- while (isIncorrect);
- do {
- isIncorrect = false;
- System.out.printf("Введите B из следующего диапазона [%5.3f; %5d]: ", interval[0], maxValue);
- try {
- interval[1] = Double.parseDouble(scanner.nextLine());
- if ((interval[1] < minValue) || (interval[1] > maxValue)) {
- System.out.println("Введено число не из диапазона! Пожалуйста, повторите попытку");
- isIncorrect = true;
- }
- if (interval[1] < interval[0]) {
- System.out.println("Введено число не из диапазона! Пожалуйста, повторите попытку");
- isIncorrect = true;
- }
- } catch (Exception ex) {
- System.out.println("Ошибка! Введено не число! Пожалуйста, повторите попытку");
- isIncorrect = true;
- }
- }
- while (isIncorrect);
- return interval;
- }
- static double[] inputIntervalFromFile() throws FileNotFoundException {
- double[] interval = new double[2];
- String path;
- File file;
- Scanner fileScanner;
- boolean isIncorrect = true;
- do {
- do {
- System.out.println("Введите путь к файлу с интервалом");
- path = scanner.nextLine();
- file = new File(path);
- if (file.exists() && file.isFile()) {
- isIncorrect = false;
- } else {
- System.out.println("Файл не найден");
- }
- } while (isIncorrect);
- fileScanner = new Scanner(file);
- try {
- interval[0] = fileScanner.nextDouble();
- interval[1] = fileScanner.nextDouble();
- } catch (Exception ex) {
- isIncorrect = true;
- }
- if ((interval[1] < minValue) || (interval[1] > maxValue)) {
- System.out.println("В файле находилось число не из диапазона! Пожалуйста, повторите попытку");
- isIncorrect = true;
- }
- if (interval[1] < interval[0]) {
- System.out.println("В файле находилось число не из диапазона! Пожалуйста, повторите попытку");
- isIncorrect = true;
- }
- } while (isIncorrect);
- return interval;
- }
- static double[] inputInterval() throws FileNotFoundException {
- boolean isInCorrect;
- String input;
- double[] interval = new double[2];
- do {
- isInCorrect = true;
- System.out.println("Выберите режим ввода (1 - файл, 2 - консоль)");
- input = scanner.nextLine();
- if (input.equals("1")) {
- interval = inputIntervalFromFile();
- isInCorrect = false;
- } else if (input.equals("2")) {
- interval = inputIntervalFromConsole();
- isInCorrect = false;
- }
- } while (isInCorrect);
- System.out.printf("Указанный промежуток: [%5.3f; %5.3f]", interval[0], interval[1]);
- return interval;
- }
- static double inputStep() {
- boolean isIncorrect;
- double step = 0;
- do {
- isIncorrect = false;
- System.out.printf("\nВведите шаг поиска значения из следующего диапазона [%6.4f; %3.1f]: ", minStep, maxStep);
- try {
- step = Double.parseDouble(scanner.nextLine());
- if ((step < minStep) || (step > maxStep)) {
- System.out.println("Введено число не из диапазона! Пожалуйста, повторите попытку");
- isIncorrect = true;
- }
- } catch (Exception ex) {
- System.out.println("Ошибка! Введено не число! Пожалуйста, повторите попытку");
- isIncorrect = true;
- }
- }
- while (isIncorrect);
- return step;
- }
- // 4 cycle
- static double findMaxValue(double[] interval, double step) {
- double y, x, max = 0;
- x = interval[0];
- y = (2 * x + 3) / (2 * x * x - 3 * x + 4);
- max = y;
- while (x < interval[1]) {
- y = (2 * x + 3) / (2 * x * x - 3 * x + 4);
- if (y > max) {
- max = y;
- }
- x = x + step;
- }
- return max;
- }
- static void writeOutputToFile(double max) throws IOException {
- FileWriter fileWriter = new FileWriter("output.txt");
- fileWriter.write("Наибольшее значение данной функции на заданном промежутке = " + max);
- fileWriter.close();
- }
- public static void main(String[] args) throws IOException {
- scanner = new Scanner(System.in);
- double step, max;
- System.out.println("Данная программа находит наибольшее значение y = (2 * x + 3) / (2 * x^2 - 3 * x + 4) функции на промежутке [a; b].");
- double[] interval = inputInterval();
- step = inputStep();
- max = findMaxValue(interval, step);
- System.out.printf("Наибольшее значение данной функции на заданном промежутке = %5.3f", max);
- writeOutputToFile(max);
- scanner.close();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement