Dużo punktów, więc myślę, że warto... ; ) Proszę to potraktować na serio, bo inaczej zgłoszę spam.
Trzeba napisać program podający miejsce zerowe funkcji metodą bisekcji (połowienia odcinka). Chodzi o to, że mamy jakąś fukcję ściśle monotoniczną w przedziale <a;b>, i funkcja ta posiada dokładnie jedno miejsce zerowe w tym przedziale (zakładamy). Metoda połowienia odcinka, polega na tym, iż dzielimy odległość między a i b na pół i sprawdzamy, czy to miejsce jest miejscem zerowym, jeśli tak, to wypisujemy wynik i koniec. Jeśli nie, to miejsce zerowe jest albo po prawej stronie albo po lewej, sprawdzamy po której połówce jest stosując fukcję warunkową if f(a)*f(a+b/2) <0 then... miejsce zerowe jest po lewej stronie, jeśli nie po prawej i od nowa dzielimy odcinek instrukcją "do" rób, albo "repeat", "until".
Proszę o pomoc w napisaniu, zadanie na poniedziałek.
Aniakrk207it
Proszę...tylko podaj taką funkcję jaką potrzebujesz w miejscu deklaracji funkcji
// Funkcja, której miejsce zerowe obliczamy // f(x) = x^3*(x+sin(x^2-1)-1)-1 // <-1,0> i <1,2> //-----------------------------------------
function f(x : real) : real; begin Result := x * x * x * (x + sin(x * x - 1) - 1) - 1; end;
var a,b,x0,fa,fb,f0 : real;
begin writeln('Obliczanie pierwiastka funkcji - metoda bisekcji'); writeln('f(x) = x^3*(x+sin(x^2-1)-1)-1'); writeln('------------------------------------------------'); writeln; writeln('Podaj zakres poszukiwan pierwiastka:'); writeln; write('a = '); readln(a); write('b = '); readln(b); writeln; writeln('------------------------------------------------'); writeln('WYNIK:'); writeln; fa := f(a); fb := f(b); if fa * fb > 0 then writeln('Funkcja nie spelnia zalozen') else begin while abs(a - b) > EPSX do begin x0 := (a + b) / 2; f0 := f(x0); if abs(f0) < EPS0 then break; if fa * f0 < 0 then b := x0 else begin a := x0; fa := f0; end; end; writeln('x0 = ',x0:15:8); end; writeln; writeln('------------------------------------------------'); writeln('Koniec. Nacisnij Enter...'); readln; end.
Program Miejsce zerowe metodą bisekcji;
uses math;
const
EPS0 = 0.0000000001; // dokładność porównania z zerem
EPSX = 0.0000000001; // dokładność wyznaczenia pierwiastka
// Funkcja, której miejsce zerowe obliczamy
// f(x) = x^3*(x+sin(x^2-1)-1)-1
// <-1,0> i <1,2>
//-----------------------------------------
function f(x : real) : real;
begin
Result := x * x * x * (x + sin(x * x - 1) - 1) - 1;
end;
var
a,b,x0,fa,fb,f0 : real;
begin
writeln('Obliczanie pierwiastka funkcji - metoda bisekcji');
writeln('f(x) = x^3*(x+sin(x^2-1)-1)-1');
writeln('------------------------------------------------');
writeln;
writeln('Podaj zakres poszukiwan pierwiastka:');
writeln;
write('a = '); readln(a);
write('b = '); readln(b);
writeln;
writeln('------------------------------------------------');
writeln('WYNIK:');
writeln;
fa := f(a); fb := f(b);
if fa * fb > 0 then writeln('Funkcja nie spelnia zalozen')
else
begin
while abs(a - b) > EPSX do
begin
x0 := (a + b) / 2; f0 := f(x0);
if abs(f0) < EPS0 then break;
if fa * f0 < 0 then b := x0
else
begin
a := x0; fa := f0;
end;
end;
writeln('x0 = ',x0:15:8);
end;
writeln;
writeln('------------------------------------------------');
writeln('Koniec. Nacisnij Enter...');
readln;
end.