Advertisement
ksyshshot

Untitled

Sep 29th, 2022
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.16 KB | Source Code | 0 0
  1. import java.util.Scanner;
  2. import static java.lang.Math.*;
  3. public class Main {
  4.     public static void main(String[] args) {
  5.         Scanner scan = new Scanner(System.in);
  6.         final int SEGMENT_LENGTH = 3;
  7.         final int MAX_VALUE = 10;
  8.         final int MIN_VALUE = -10;
  9.         final double MAX_EPS_VALUE = 0.01;
  10.         final double MIN_EPS_VALUE = 0.0001;
  11.         boolean isIncorrect;
  12.         double root, leftBorder = 0, rightBorder = 0, eps = 0;
  13.  
  14.         System.out.println("Данная программа уточняет  корень  уравнения е^x – 10х = 0 на отрезке [a,b] методом касательных");
  15.         System.out.println("Диапазон вводимых значений границ отрезка - от " + MIN_VALUE + " до " + MAX_VALUE);
  16.         System.out.println("Длина отрезка не должна быть больше " + SEGMENT_LENGTH);
  17.         do {
  18.             isIncorrect = false;
  19.             System.out.println("Введите начало отрезка");
  20.             try {
  21.                 leftBorder = Double.parseDouble(scan.nextLine());
  22.             } catch (Exception e) {
  23.                 isIncorrect = true;
  24.                 System.out.println("Введены некорректные данные");
  25.             }
  26.             if ((!isIncorrect) && ((leftBorder < MIN_VALUE) || (leftBorder > MAX_VALUE))) {
  27.                 isIncorrect = true;
  28.                 System.out.println("Число вне разрешённого диапазона");
  29.             }
  30.         } while (isIncorrect);
  31.         do {
  32.             isIncorrect = false;
  33.             System.out.println("Введите конец отрезка");
  34.             try {
  35.                 rightBorder = Double.parseDouble(scan.nextLine());
  36.             } catch (Exception e) {
  37.                 isIncorrect = true;
  38.                 System.out.println("Введены некорректные данные");
  39.             }
  40.             if ((!isIncorrect) && ((rightBorder < MIN_VALUE) || (rightBorder > MAX_VALUE) || (abs(rightBorder - leftBorder) > SEGMENT_LENGTH))) {
  41.                 isIncorrect = true;
  42.                 System.out.println("Число вне разрешённого диапазона");
  43.             }
  44.         } while (isIncorrect);
  45.         do {
  46.             isIncorrect = false;
  47.             System.out.println("Введите точность вычислений (от " + MIN_EPS_VALUE + " до " + MAX_EPS_VALUE + ")\n");
  48.             try {
  49.                 eps = Double.parseDouble(scan.nextLine());
  50.             } catch (Exception e) {
  51.                 isIncorrect = true;
  52.                 System.out.println("Введены некорректные данные");
  53.             }
  54.             if ((!isIncorrect) && ((eps < MIN_EPS_VALUE) || (eps > MAX_EPS_VALUE))) {
  55.                 isIncorrect = true;
  56.                 System.out.println("Число вне разрешённого диапазона");
  57.             }
  58.         } while (isIncorrect);
  59.         scan.close();
  60.         if ((exp(leftBorder) - 10 * leftBorder) * exp(leftBorder) > 0) {
  61.             do {
  62.                 root = leftBorder;
  63.                 leftBorder = root - (exp(root) - 10 * root) / (exp(root) - 10);
  64.             } while (abs(leftBorder - root) > eps);
  65.             leftBorder = ceil(leftBorder * 10000) / 10000;
  66.             System.out.println("Ближайший корень с заданной точностью: " + leftBorder);
  67.         }
  68.         else {
  69.             if ((exp(rightBorder) - 10 * rightBorder) * exp(rightBorder) > 0) {
  70.                 do {
  71.                     root = rightBorder;
  72.                     rightBorder = root - (exp(root) - 10 * root) / (exp(root) - 10);
  73.                 } while (abs(rightBorder - root) > eps);
  74.                 rightBorder = ceil(rightBorder * 10000) / 10000; // округляет до целого
  75.                 System.out.printf("Ближайший корень с заданной точностью: " + rightBorder);
  76.             }
  77.             else {
  78.                 System.out.println("На данном отрезке нет ближайших корней");
  79.             }
  80.         }
  81.     }
  82. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement