#include "pch.h"
#include
using namespace std;
double f(double x)
{
double m = -7 * pow(x, 3) - 5.8*x - 4;
return m;
}
int main()
double a = -1; double b = 2;
flag1:
double c = 0.5*(a + b);
if (f(c) == 0)
cout << "The result is " << c << endl;
if (f(c)*f(a) < 0)
b = c;
goto flag1;
if (f(c)*f(b) < 0)
a = c;
if (c >= a && c <= b)
cout << "The solution belongs to the interval" << endl;
else
cout << "The solution doesn't belongs to the interval";
return 0;
Тут с флагами. Если не нравятся флаги - перестройте под себя.
function f(x: real): real;
begin
f:=x*x*x - 4.2*x - 4;
end;
{ основная программа }
var a,b,c,eps: real;
k: integer;
{ a - начало интервала, b - конец }
write('a = '); readln(a);
write('b = '); readln(b);
if f(a)*f(b)<0 then
write('точность вычислений eps: '); readln(eps);
k:=1;
while abs(a-b)>eps do
writeln('итерация ',k,' a =',a:12:8, ' b =',b:12:8);
c:=(a+b)/2;
if f(c)<>0 then
if f(c)*f(b)<0 then a:=c
else b:=c
k:=k+1;
writeln('корень = ',a:12:8);
end
writeln('на интервале [',a,',',b,']',' корней нет');
end.
a = -3
b = 4
точность вычислений eps: 0.0001
итерация 1 a = -3.00000000 b = 4.00000000
итерация 2 a = 0.50000000 b = 4.00000000
итерация 3 a = 2.25000000 b = 4.00000000
итерация 4 a = 2.25000000 b = 3.12500000
итерация 5 a = 2.25000000 b = 2.68750000
итерация 6 a = 2.25000000 b = 2.46875000
итерация 7 a = 2.35937500 b = 2.46875000
итерация 8 a = 2.41406250 b = 2.46875000
итерация 9 a = 2.41406250 b = 2.44140625
итерация 10 a = 2.41406250 b = 2.42773438
итерация 11 a = 2.41406250 b = 2.42089844
итерация 12 a = 2.41748047 b = 2.42089844
итерация 13 a = 2.41918945 b = 2.42089844
итерация 14 a = 2.41918945 b = 2.42004395
итерация 15 a = 2.41918945 b = 2.41961670
итерация 16 a = 2.41918945 b = 2.41940308
итерация 17 a = 2.41929626 b = 2.41940308
корень = 2.41934967
#include "pch.h"
#include
#include
using namespace std;
double f(double x)
{
double m = -7 * pow(x, 3) - 5.8*x - 4;
return m;
}
int main()
{
double a = -1; double b = 2;
flag1:
double c = 0.5*(a + b);
if (f(c) == 0)
cout << "The result is " << c << endl;
if (f(c)*f(a) < 0)
{
b = c;
goto flag1;
}
if (f(c)*f(b) < 0)
{
a = c;
goto flag1;
}
if (c >= a && c <= b)
cout << "The solution belongs to the interval" << endl;
else
cout << "The solution doesn't belongs to the interval";
return 0;
}
Тут с флагами. Если не нравятся флаги - перестройте под себя.
function f(x: real): real;
begin
f:=x*x*x - 4.2*x - 4;
end;
{ основная программа }
var a,b,c,eps: real;
k: integer;
{ a - начало интервала, b - конец }
begin
write('a = '); readln(a);
write('b = '); readln(b);
if f(a)*f(b)<0 then
begin
write('точность вычислений eps: '); readln(eps);
k:=1;
while abs(a-b)>eps do
begin
writeln('итерация ',k,' a =',a:12:8, ' b =',b:12:8);
c:=(a+b)/2;
if f(c)<>0 then
begin
if f(c)*f(b)<0 then a:=c
else b:=c
end;
k:=k+1;
end;
writeln('корень = ',a:12:8);
end
else
writeln('на интервале [',a,',',b,']',' корней нет');
end.
a = -3
b = 4
точность вычислений eps: 0.0001
итерация 1 a = -3.00000000 b = 4.00000000
итерация 2 a = 0.50000000 b = 4.00000000
итерация 3 a = 2.25000000 b = 4.00000000
итерация 4 a = 2.25000000 b = 3.12500000
итерация 5 a = 2.25000000 b = 2.68750000
итерация 6 a = 2.25000000 b = 2.46875000
итерация 7 a = 2.35937500 b = 2.46875000
итерация 8 a = 2.41406250 b = 2.46875000
итерация 9 a = 2.41406250 b = 2.44140625
итерация 10 a = 2.41406250 b = 2.42773438
итерация 11 a = 2.41406250 b = 2.42089844
итерация 12 a = 2.41748047 b = 2.42089844
итерация 13 a = 2.41918945 b = 2.42089844
итерация 14 a = 2.41918945 b = 2.42004395
итерация 15 a = 2.41918945 b = 2.41961670
итерация 16 a = 2.41918945 b = 2.41940308
итерация 17 a = 2.41929626 b = 2.41940308
корень = 2.41934967