Advertisement
deced

Untitled

Nov 17th, 2020
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 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.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement