ksyshshot

Lab.1.3

Jan 30th, 2023
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 3.47 KB | Source Code | 0 0
  1. Program Lab_1_3;
  2.  
  3. {$APPTYPE CONSOLE}
  4. {$R *.res}
  5.  
  6. Uses
  7.     System.SysUtils;
  8. Const
  9.     SEGMENT_LENGTH = 3;
  10.     MAX_VALUE = 10;
  11.     MIN_VALUE = -10;
  12.     MAX_EPS_VALUE = 0.01;
  13.     MIN_EPS_VALUE = 0.0001;
  14. Var
  15.     IsCorrect: Boolean;
  16.     Root, Eps, LeftBorder, RightBorder: Double;
  17. Begin
  18.     Writeln ('Данная программа уточняет  корень  уравнения е^x – 10х = 0 на отрезке [a,b] методом касательных');
  19.     Writeln ('Длина отрезка не должна быть больше ', SEGMENT_LENGTH);
  20.     Writeln ('Диапазон вводимых значений границ отрезка - от -10 до 10');
  21.     Repeat
  22.         IsCorrect := true;
  23.         Writeln ('Введите начало отрезка');
  24.         Try
  25.             Readln (LeftBorder);
  26.         Except
  27.             Writeln ('Введены некорректные данные');
  28.             IsCorrect := false;
  29.         End;
  30.         If ((IsCorrect) And ((LeftBorder < MIN_VALUE) Or
  31.            (LeftBorder > MAX_VALUE))) Then
  32.         Begin
  33.             Writeln ('Неверное число. Попробуйте ещё раз');
  34.             IsCorrect := false;
  35.         End;
  36.     Until (IsCorrect);
  37.     Repeat
  38.         IsCorrect := true;
  39.         Writeln ('Введите конец отрезка');
  40.         Try
  41.             Readln (RightBorder);
  42.         Except
  43.             Writeln ('Введены некорректные данные');
  44.             IsCorrect := false;
  45.         End;
  46.         If ((IsCorrect) And ((RightBorder < MIN_VALUE) Or
  47.            (RightBorder > MAX_VALUE) Or (Abs(RightBorder - LeftBorder) > SEGMENT_LENGTH))) Then
  48.         Begin
  49.             Writeln ('Неверное число. Попробуйте ещё раз');
  50.             IsCorrect := false;
  51.         End;
  52.     Until (IsCorrect);
  53.     Repeat
  54.         IsCorrect := true;
  55.         Writeln ('Введите точность от ', MIN_EPS_VALUE, ' до ', MAX_EPS_VALUE);
  56.         Try
  57.             Readln (Eps);
  58.         Except
  59.             Writeln ('Введены некорректные данные');
  60.             IsCorrect := false;
  61.         End;
  62.         If ((IsCorrect) And ((Eps < MIN_EPS_VALUE) Or
  63.            (Eps > MAX_EPS_VALUE))) Then
  64.         Begin
  65.             Writeln ('Неверный диапазон точности. Попробуйте ещё раз');
  66.             IsCorrect := false;
  67.         End;
  68.     Until (IsCorrect);
  69.     If ((Exp(LeftBorder) - 10*LeftBorder)*(Exp(LeftBorder)) > 0) Then
  70.     Begin
  71.         Repeat
  72.             Root := LeftBorder;
  73.             LeftBorder := Root - (Exp(Root) - 10*Root)/(Exp(Root) - 10);
  74.         Until (Abs(LeftBorder - Root) < Eps);
  75.         LeftBorder := Round(LeftBorder * 10000)/10000;
  76.         Writeln ('Ближайший корень с заданной точностью: ', LeftBorder:4:4);
  77.     End
  78.     Else
  79.     Begin
  80.         If ((Exp(RightBorder) - 10*RightBorder)*(Exp(RightBorder)) > 0) Then
  81.         Begin
  82.             Repeat
  83.             Root := RightBorder;
  84.             RightBorder := Root - (Exp(Root) - 10*Root)/(Exp(Root) - 10);
  85.         Until (Abs(RightBorder - Root) < Eps);
  86.         RightBorder := Round(RightBorder * 10000)/10000;
  87.         Writeln ('Ближайший корень с заданной точностью: ', RightBorder:4:4);
  88.         End
  89.         Else
  90.             Writeln ('На данном отрезке нет ближайших корней');
  91.     End;
  92.     Readln;
  93. End.
Add Comment
Please, Sign In to add comment