deced

Untitled

Nov 17th, 2020
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.16 KB | None | 0 0
  1. package com.company;
  2.  
  3. import java.io.File;
  4. import java.io.FileNotFoundException;
  5. import java.io.FileWriter;
  6. import java.io.IOException;
  7. import java.util.Scanner;
  8.  
  9. public class Main {
  10.     static final int minValue = -23170;
  11.     static final int maxValue = 23170;
  12.     static final double minStep = 0.0001;
  13.     static final double maxStep = 0.1;
  14.     static Scanner scanner;
  15.  
  16.     static double[] inputIntervalFromConsole() {
  17.         double[] interval = new double[2];
  18.         boolean isIncorrect;
  19.         do {
  20.             isIncorrect = false;
  21.             System.out.println("\nВведите A из следующего диапазона [" + minValue + ";" + maxValue + "]: ");
  22.             try {
  23.                 interval[0] = Double.parseDouble(scanner.nextLine());
  24.                 if ((interval[0] < minValue) || (interval[0] > maxValue)) {
  25.                     System.out.println("Введено число не из диапазона! Пожалуйста, повторите попытку");
  26.                     isIncorrect = true;
  27.                 }
  28.             } catch (Exception ex) {
  29.                 System.out.println("Ошибка! Введено не число! Пожалуйста, повторите попытку");
  30.                 isIncorrect = true;
  31.             }
  32.         }
  33.         while (isIncorrect);
  34.  
  35.         do {
  36.             isIncorrect = false;
  37.             System.out.printf("Введите B из следующего диапазона [%5.3f; %5d]: ", interval[0], maxValue);
  38.             try {
  39.                 interval[1] = Double.parseDouble(scanner.nextLine());
  40.                 if ((interval[1] < minValue) || (interval[1] > maxValue)) {
  41.                     System.out.println("Введено число не из диапазона! Пожалуйста, повторите попытку");
  42.                     isIncorrect = true;
  43.                 }
  44.                 if (interval[1] < interval[0]) {
  45.                     System.out.println("Введено число не из диапазона! Пожалуйста, повторите попытку");
  46.                     isIncorrect = true;
  47.                 }
  48.             } catch (Exception ex) {
  49.                 System.out.println("Ошибка! Введено не число! Пожалуйста, повторите попытку");
  50.                 isIncorrect = true;
  51.             }
  52.         }
  53.         while (isIncorrect);
  54.         return interval;
  55.     }
  56.  
  57.     static double[] inputIntervalFromFile() throws FileNotFoundException {
  58.         double[] interval = new double[2];
  59.         String path;
  60.         File file;
  61.         Scanner fileScanner;
  62.         boolean isIncorrect = true;
  63.  
  64.         do {
  65.             do {
  66.                 System.out.println("Введите путь к файлу с интервалом");
  67.                 path = scanner.nextLine();
  68.                 file = new File(path);
  69.                 if (file.exists() && file.isFile()) {
  70.                     isIncorrect = false;
  71.                 } else {
  72.                     System.out.println("Файл не найден");
  73.                 }
  74.             } while (isIncorrect);
  75.             fileScanner = new Scanner(file);
  76.             try {
  77.                 interval[0] = fileScanner.nextDouble();
  78.                 interval[1] = fileScanner.nextDouble();
  79.             } catch (Exception ex) {
  80.                 isIncorrect = true;
  81.             }
  82.             if ((interval[1] < minValue) || (interval[1] > maxValue)) {
  83.                 System.out.println("В файле находилось число не из диапазона! Пожалуйста, повторите попытку");
  84.                 isIncorrect = true;
  85.             }
  86.             if (interval[1] < interval[0]) {
  87.                 System.out.println("В файле находилось число не из диапазона! Пожалуйста, повторите попытку");
  88.                 isIncorrect = true;
  89.             }
  90.         } while (isIncorrect);
  91.         return interval;
  92.     }
  93.  
  94.     static double[] inputInterval() throws FileNotFoundException {
  95.         boolean isInCorrect;
  96.         String input;
  97.         double[] interval = new double[2];
  98.         do {
  99.             isInCorrect = true;
  100.             System.out.println("Выберите режим ввода (1 - файл, 2 - консоль)");
  101.             input = scanner.nextLine();
  102.             if (input.equals("1")) {
  103.                 interval = inputIntervalFromFile();
  104.                 isInCorrect = false;
  105.             } else if (input.equals("2")) {
  106.                 interval = inputIntervalFromConsole();
  107.                 isInCorrect = false;
  108.             }
  109.         } while (isInCorrect);
  110.         System.out.printf("Указанный промежуток: [%5.3f; %5.3f]", interval[0], interval[1]);
  111.         return interval;
  112.     }
  113.  
  114.     static double inputStep() {
  115.         boolean isIncorrect;
  116.         double step = 0;
  117.         do {
  118.             isIncorrect = false;
  119.             System.out.printf("\nВведите шаг поиска значения из следующего диапазона [%6.4f; %3.1f]: ", minStep, maxStep);
  120.             try {
  121.                 step = Double.parseDouble(scanner.nextLine());
  122.                 if ((step < minStep) || (step > maxStep)) {
  123.                     System.out.println("Введено число не из диапазона! Пожалуйста, повторите попытку");
  124.                     isIncorrect = true;
  125.                 }
  126.             } catch (Exception ex) {
  127.                 System.out.println("Ошибка! Введено не число! Пожалуйста, повторите попытку");
  128.                 isIncorrect = true;
  129.             }
  130.         }
  131.         while (isIncorrect);
  132.         return step;
  133.     }
  134.  
  135.     // 4 cycle
  136.     static double findMaxValue(double[] interval, double step) {
  137.  
  138.         double y, x, max = 0;
  139.         x = interval[0];
  140.         y = (2 * x + 3) / (2 * x * x - 3 * x + 4);
  141.         max = y;
  142.         while (x < interval[1]) {
  143.             y = (2 * x + 3) / (2 * x * x - 3 * x + 4);
  144.             if (y > max) {
  145.                 max = y;
  146.             }
  147.             x = x + step;
  148.         }
  149.         return max;
  150.     }
  151.  
  152.     static void writeOutputToFile(double max) throws IOException {
  153.         FileWriter fileWriter = new FileWriter("output.txt");
  154.         fileWriter.write("Наибольшее значение данной функции на заданном промежутке = " + max);
  155.         fileWriter.close();
  156.     }
  157.  
  158.     public static void main(String[] args) throws IOException {
  159.         scanner = new Scanner(System.in);
  160.         double step, max;
  161.         System.out.println("Данная программа находит наибольшее значение y = (2 * x + 3) / (2 * x^2 - 3 * x + 4) функции на промежутке [a; b].");
  162.         double[] interval = inputInterval();
  163.         step = inputStep();
  164.         max = findMaxValue(interval, step);
  165.         System.out.printf("Наибольшее значение данной функции на заданном промежутке = %5.3f", max);
  166.         writeOutputToFile(max);
  167.         scanner.close();
  168.     }
  169. }
  170.  
Add Comment
Please, Sign In to add comment