Program musi być w pascalu.
"Napisać program znajdujący z dokładnością 0,00000001 rozwiązanie równania:
7,8x = x38 + 3,67,7 " Gdzie znak oznacza potęge. Poniżej moje wypociny... i nie wiem dalej niestety jak to zrobic!
Poniżej najprostszy kod bez wyłapywania różnych różności w równaniu:
function F(x: Real): Real;
begin
Result := twoja_funkcja_dla_ktorej_masz_znalec_rozwiazanie;
//przekształcona do postaci coś = 0;
end;
function Bisekcja(Lewy, Prawy: Real; Eps: Real): Real;
var
Srodek: Real;
begin
if F(Lewy) * F(Prawy) > 0 then
begin
Srodek := (Prawy + Lewy) / 2;
while F(Srodek) >= Eps do
begin
if F(Lewy) * F(Srodek) < 0 then
Prawy := Srodek
else
Lewy := Srodek;
end;
Result := Srodek;
end
else
Result := 0;
end;
Później napisałem coś takiego ale nie działa :
const e=0.00000001;
const f=-0.00000001;
var i,a,b,c,y1a,y1c,y2a,y2c,x:real;
begin
writeln('podaj lewa granice przedzialu');
readln(a);
writeln('podaj prawa granice przedzialu');
readln(b);
repeat
c:=(a+b)/2;
begin
y1a:=exp(aln(4.8));
y2a:=exp(35ln(a)) + exp(3.7ln(6.5));
y1c:=exp(cln(4.8));
y2c:=exp(35ln(c)) + exp(3.7ln(6.5));
end;
if
y1a+y2a> y1c+y2c
then a:=c
else b:=c;
until
y1a+y2a<=e;
writeln;
writeln('rozwiazaniem jest:');
write(a)
end.
A kumpel poradził mi jeszcze cos takiego:
Ale spróbuj tak:
zapis
7,8x = x38 + 3,6^7,7
można zamienić na
7,8x - x38 - 3,6^7,7 = 0
i jest to dokładnie to samo, a to można zapisac w pascalu jako (trzeba dodać math do usesów):
Pow(7.8, x) - Pow(x, 38) - Pow(3.6, 7.7) = 0
zamykasz to w funkcję
function F(x: Real): Real;
begin
F := Pow(7.8, x) - Pow(x, 38) - Pow(3.6, 7.7);
end;
i odpadają Ci te linijki z logarytmami -
ya := F(a);
yc := F(c);
teraz
repeat
c := (a + b) / 2;
if ya * yc < 0 then
b := c
else
a := c;
until F(c) < e;
musisz jeszcze na samym początku (po wczytaniu a i b) sprawdzić, czy F(a)*F(b) < 0 - jak jest to oznacza, że ta funkcja ma w tym przedziale przynajmniej jedno miejsce zerowe (jak będzie > 0, to albo <ort>NIE MA</ort> wcale, albo ma parzystą ilość rozwiązań w tym przedziale)
Jeśli ktoś mogłby mi pomoc to prosilbym. Bo ja już nie mam cierpliwości do tego programu. Siedziałem już tyle dni i ciagle sie krece w kółko. Z góry dzieki chociaż za checie. Pzdr.