Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.Scanner;
- import static java.lang.Math.*;
- public class Main {
- public static void main(String[] args) {
- Scanner scan = new Scanner(System.in);
- final int SEGMENT_LENGTH = 3;
- final int MAX_VALUE = 10;
- final int MIN_VALUE = -10;
- final double MAX_EPS_VALUE = 0.01;
- final double MIN_EPS_VALUE = 0.0001;
- boolean isIncorrect;
- double root, leftBorder = 0, rightBorder = 0, eps = 0;
- System.out.println("Данная программа уточняет корень уравнения е^x – 10х = 0 на отрезке [a,b] методом касательных");
- System.out.println("Диапазон вводимых значений границ отрезка - от " + MIN_VALUE + " до " + MAX_VALUE);
- System.out.println("Длина отрезка не должна быть больше " + SEGMENT_LENGTH);
- do {
- isIncorrect = false;
- System.out.println("Введите начало отрезка");
- try {
- leftBorder = Double.parseDouble(scan.nextLine());
- } catch (Exception e) {
- isIncorrect = true;
- System.out.println("Введены некорректные данные");
- }
- if ((!isIncorrect) && ((leftBorder < MIN_VALUE) || (leftBorder > MAX_VALUE))) {
- isIncorrect = true;
- System.out.println("Число вне разрешённого диапазона");
- }
- } while (isIncorrect);
- do {
- isIncorrect = false;
- System.out.println("Введите конец отрезка");
- try {
- rightBorder = Double.parseDouble(scan.nextLine());
- } catch (Exception e) {
- isIncorrect = true;
- System.out.println("Введены некорректные данные");
- }
- if ((!isIncorrect) && ((rightBorder < MIN_VALUE) || (rightBorder > MAX_VALUE) || (abs(rightBorder - leftBorder) > SEGMENT_LENGTH))) {
- isIncorrect = true;
- System.out.println("Число вне разрешённого диапазона");
- }
- } while (isIncorrect);
- do {
- isIncorrect = false;
- System.out.println("Введите точность вычислений (от " + MIN_EPS_VALUE + " до " + MAX_EPS_VALUE + ")\n");
- try {
- eps = Double.parseDouble(scan.nextLine());
- } catch (Exception e) {
- isIncorrect = true;
- System.out.println("Введены некорректные данные");
- }
- if ((!isIncorrect) && ((eps < MIN_EPS_VALUE) || (eps > MAX_EPS_VALUE))) {
- isIncorrect = true;
- System.out.println("Число вне разрешённого диапазона");
- }
- } while (isIncorrect);
- scan.close();
- if ((exp(leftBorder) - 10 * leftBorder) * exp(leftBorder) > 0) {
- do {
- root = leftBorder;
- leftBorder = root - (exp(root) - 10 * root) / (exp(root) - 10);
- } while (abs(leftBorder - root) > eps);
- leftBorder = ceil(leftBorder * 10000) / 10000;
- System.out.println("Ближайший корень с заданной точностью: " + leftBorder);
- }
- else {
- if ((exp(rightBorder) - 10 * rightBorder) * exp(rightBorder) > 0) {
- do {
- root = rightBorder;
- rightBorder = root - (exp(root) - 10 * root) / (exp(root) - 10);
- } while (abs(rightBorder - root) > eps);
- rightBorder = ceil(rightBorder * 10000) / 10000; // округляет до целого
- System.out.printf("Ближайший корень с заданной точностью: " + rightBorder);
- }
- else {
- System.out.println("На данном отрезке нет ближайших корней");
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement