[turbo pascal] Bisekcja - plz help

0

Witam

Mam problem, musze zrobic prace zaliczeniowa na przedmiot "programowanie" a jestem w tym zielony. po prostu bardziej nadaje sie na grafiak niz na programiste, to troceh dla mnei czarna magia. Prosilbym wiec o mala pomoc.
Mam napisac program w tyrbo pascalu o nazwie "Bisekcja". Mam go również opisac ( cokolwiek to znaczy ).
Udalo mi sie stworzyć coś takiego:

var
a, b, c : real;
eps : real;
begin
writeln('Program znajduje miejsce zerowe funkcji');
writeln('w przedziale [a;b]');
write('Podaj wartosc a : ');
readln(a);
write('Podaj wartosc b: ');
readln(b);
write('Podaj dokladnosc: ');
readln(eps);
repeat
c := (a + b)/2;
if (1 - exp(sin(a)cos(a)))(1 - exp(sin(c)*cos(c))) < 0
then
b := c
else
a := c;
writeln(c);
until abs(1 - exp(sin(c)*cos(c))) < eps;
{ badamy wartość bezwzględną! }
writeln('Miejsce zerowe: c = ',c8);
readln;
end.

Moglby mi ktos pomoc ? Skorygowac ewentyalne błedy, wytlumaczyc o co w tycm chodzi, a przede wszystkim pomoc w opisaniu tego programu ? Bo nawet nie wiem co mam pisac.

Pozdrawiam
Ronek

0

No i co... to wszystko ? Link do gógli ? Tyle to sam potrafie zrobić. Ale tam nic konkretnego nie ma.
Przyszedlem tutaj po fachową pomoc w problemie, nikt nie pomoże ? :(

0

Masz przykładowy program bisekcji dla funkcji x*x-2=0.
W bloku definicji funkcji F(x) możesz dawać inne funkcje.
Opis (komentarze w nawiasach { ..} można stworzyć po analizie programu

program bisekcja;
uses Crt;
const  pi=3.14159265; {na wypadek funkcji tryg.}
var x,x1,x2,fx,fxx,fx1,fx2,eps              :Real;
    j                                                   :Integer;
function F(x:Real)                               :Real; {blok def. funkcji}
 begin
  F:=x*x-2;
 end;
begin
TextMode(CO80);
TextBackground(Black);
TextColor(White);
GotoXY(36,10);
Writeln('BISEKCJA');
GotoXY(2,24);
Writeln('wcisnij <enter>');

Readln;
ClrScr;
repeat
 Write('Podaj poczatek przedzialu x1=');
 Readln(x1);
 Write('Podaj koniec przedzialu x2=');
 Readln(x2);
 Write('Podaj dokladnosc eps=');
 Readln(eps);
 fx1:=F(x1);
 fx2:=F(x2);
  if fx1*fx2>0 then
   Writeln('wartosci funkcji w koncach przedzialu  nie sa roznych znakow');
until fx1*fx2<=0;
 if fx1*fx2=0 then
  begin
   if fx1=0 then x:=x1 else x:=x2;
   Writeln('wielkosc wejsciowa x=',x:8:3,' jest pierwiastkiem');
   exit
  end;
for j:=1 to 50 do
 begin
  x:=(x1+x2)/2;
  fx:=F(x);
  fxx:=(fx2-fx1)/(x2-x1);
  Writeln('w punkcie x=',x:8:3,' f(x)=',fx:8:3);
   if Abs(fx/fxx)-eps>0 then
    begin
     if fx*fx1<0 then
      begin
       x2:=x;
       fx2:=fx;
      end
     else
      begin
       if fx*fx1=0 then
        begin
         Writeln('x=',x:8:3,' jest pierwiastkiem');
         Writeln('potrzeba bylo',j:4,'  ','iteracji');
         exit
        end;
       x1:=x;
       fx1:=fx;
      end
     end
    else
     begin
      Writeln('x=',x:8:3,'jest pierwiastkiem');
      Writeln('potrzeba bylo',j:4,'iteracji');
      ReadLn;
      exit
     end
    end;
  Writeln('zbyt malo iteracji');
Readln;
end.
</delphi>
0

@StPan dzieki bardzo !!

Cos dziala, nie wiem o co w tym dokladnie chodzi ale przynajmniej cos mam :)
Jakbys tak jeszcze wytlumaczyl co ten program robi :)
I jak zrobic to tego schemat ?

Normalnie walnac dymki ?
dymka pierwsza wprowadz dane x1
Dymka 2 wprowadz dane x2
wprowadz eps

1 użytkowników online, w tym zalogowanych: 0, gości: 1