Паскаль.
На интервале (a, b) найти с точностью ε= 10⁻⁵ корни уравнения f(x)=0 методом деления отрезка пополам.
Примечание: a, b и ε вводятся с клавиатуры; на экран осуществляется вывод промежуточных результатов в три столбика (n=K, x=K, f(x)=K), где n – номер шага (целое число), x – середина отрезка [a,b] ; x и f(x) выводятся с точностью до 6 знаков после запятой; когда и длина отрезка [a,b] , и модуль f(x) становятся меньше ε , делается сообщение о завершении вычислений.

Приложения:

Ответы

Ответ дал: srzontmp
0
function f(var x: real): real;
begin
  f:=power(x,5)-0.3*abs(x-1);
end;

var a,b,c,eps: real;
    k: integer;
begin
  writeln('метод деления пополам');
  repeat
    write('границы интервала a b через пробел: ');
    readln(a,b);
    if f(a)*f(b)>0 then writeln('не верные границы интервала');
  until f(a)*f(b)<0; 
  write('точность вычислений eps = '); readln(eps);
  repeat
    c:=(a+b)/2;
    if sign(f(c))=sign(f(b)) then b:=c
    else a:=c;
    inc(k);
    writeln('n = ',k,'   x = ',c:8:6,'   f(x) = ',f(c):8:6);
  until (abs(f(c))<eps) and (b-a<eps); 
  writeln('корень x = ',c:8:6,'  f(x) = ',f(c):8:6);  
end.

метод деления пополам
границы интервала a b через пробел: 0 1
точность вычислений eps = 1.0e-5
n = 1   x = 0.500000   f(x) = -0.118750
n = 2   x = 0.750000   f(x) = 0.162305
n = 3   x = 0.625000   f(x) = -0.017133
n = 4   x = 0.687500   f(x) = 0.059840
n = 5   x = 0.656250   f(x) = 0.018591
n = 6   x = 0.640625   f(x) = 0.000087
n = 7   x = 0.632813   f(x) = -0.008677
n = 8   x = 0.636719   f(x) = -0.004335
n = 9   x = 0.638672   f(x) = -0.002134
n = 10   x = 0.639648   f(x) = -0.001026
n = 11   x = 0.640137   f(x) = -0.000470
n = 12   x = 0.640381   f(x) = -0.000192
n = 13   x = 0.640503   f(x) = -0.000052
n = 14   x = 0.640564   f(x) = 0.000017
n = 15   x = 0.640533   f(x) = -0.000018
n = 16   x = 0.640549   f(x) = 0.000000
n = 17   x = 0.640556   f(x) = 0.000009
корень x = 0.640556  f(x) = 0.000009

Ответ дал: Аноним
0
PascalABC.NET 3.3.5, сборка 1644 от 23.03.2018
Внимание! Если программа не работает, обновите версию!

begin
  var f:real->real:=x->x**5-0.3*Abs(x-1);
  var (a,b):=ReadReal2('Введите границы интервала:');
  var (fa,fb):=(f(a),f(b));
  var eps:=ReadReal('Введите требуемую точность:');
  var n:=1;
  Writeln(' n',12*' ','x',14*' ','y');
  while True do begin
    var x:=(a+b)/2;
    var y:=f(x);
    if (Abs(y)<eps) and (Abs(b-a)<eps) then break;
    Writeln(n:3,x:15:6,y:15:6);
    if Sign(fa)=Sign(y) then a:=x else b:=x;
    n+=1
    end    
end.
Приложения:
Вас заинтересует