Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Program Lab_1_3;
- {$APPTYPE CONSOLE}
- {$R *.res}
- Uses
- System.SysUtils;
- Const
- SEGMENT_LENGTH = 3;
- MAX_VALUE = 10;
- MIN_VALUE = -10;
- MAX_EPS_VALUE = 0.01;
- MIN_EPS_VALUE = 0.0001;
- Var
- IsCorrect: Boolean;
- Root, Eps, LeftBorder, RightBorder: Double;
- Begin
- Writeln ('Данная программа уточняет корень уравнения е^x – 10х = 0 на отрезке [a,b] методом касательных');
- Writeln ('Длина отрезка не должна быть больше ', SEGMENT_LENGTH);
- Writeln ('Диапазон вводимых значений границ отрезка - от -10 до 10');
- Repeat
- IsCorrect := true;
- Writeln ('Введите начало отрезка');
- Try
- Readln (LeftBorder);
- Except
- Writeln ('Введены некорректные данные');
- IsCorrect := false;
- End;
- If ((IsCorrect) And ((LeftBorder < MIN_VALUE) Or
- (LeftBorder > MAX_VALUE))) Then
- Begin
- Writeln ('Неверное число. Попробуйте ещё раз');
- IsCorrect := false;
- End;
- Until (IsCorrect);
- Repeat
- IsCorrect := true;
- Writeln ('Введите конец отрезка');
- Try
- Readln (RightBorder);
- Except
- Writeln ('Введены некорректные данные');
- IsCorrect := false;
- End;
- If ((IsCorrect) And ((RightBorder < MIN_VALUE) Or
- (RightBorder > MAX_VALUE) Or (Abs(RightBorder - LeftBorder) > SEGMENT_LENGTH))) Then
- Begin
- Writeln ('Неверное число. Попробуйте ещё раз');
- IsCorrect := false;
- End;
- Until (IsCorrect);
- Repeat
- IsCorrect := true;
- Writeln ('Введите точность от ', MIN_EPS_VALUE, ' до ', MAX_EPS_VALUE);
- Try
- Readln (Eps);
- Except
- Writeln ('Введены некорректные данные');
- IsCorrect := false;
- End;
- If ((IsCorrect) And ((Eps < MIN_EPS_VALUE) Or
- (Eps > MAX_EPS_VALUE))) Then
- Begin
- Writeln ('Неверный диапазон точности. Попробуйте ещё раз');
- IsCorrect := false;
- End;
- Until (IsCorrect);
- If ((Exp(LeftBorder) - 10*LeftBorder)*(Exp(LeftBorder)) > 0) Then
- Begin
- Repeat
- Root := LeftBorder;
- LeftBorder := Root - (Exp(Root) - 10*Root)/(Exp(Root) - 10);
- Until (Abs(LeftBorder - Root) < Eps);
- LeftBorder := Round(LeftBorder * 10000)/10000;
- Writeln ('Ближайший корень с заданной точностью: ', LeftBorder:4:4);
- End
- Else
- Begin
- If ((Exp(RightBorder) - 10*RightBorder)*(Exp(RightBorder)) > 0) Then
- Begin
- Repeat
- Root := RightBorder;
- RightBorder := Root - (Exp(Root) - 10*Root)/(Exp(Root) - 10);
- Until (Abs(RightBorder - Root) < Eps);
- RightBorder := Round(RightBorder * 10000)/10000;
- Writeln ('Ближайший корень с заданной точностью: ', RightBorder:4:4);
- End
- Else
- Writeln ('На данном отрезке нет ближайших корней');
- End;
- Readln;
- End.
Add Comment
Please, Sign In to add comment