home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS 1992 September / Simtel20_Sept92.cdr / msdos / turbopas / pas_sci.arc / NEWDR2.PAS < prev    next >
Pascal/Delphi Source File  |  1985-08-24  |  882b  |  50 lines

  1. program newdr;    { -> 245 }
  2.  
  3. var    x,x2    : real;
  4.     alldone    : boolean;
  5.     error    : boolean;
  6.  
  7. procedure func(x: real;
  8.         var fx,dfx: real);
  9. begin
  10.   fx:=x*x-2.0;
  11.   dfx:=2.0*x
  12. end;    { func }
  13.  
  14. procedure newton(var x: real);
  15. const     tol    = 1.0E-6;
  16.  
  17. var    fx,dfx,dx,x1:    real;
  18.  
  19. begin    { newton }
  20.   repeat
  21.     x1:=x;
  22.     func(x,fx,dfx);
  23.     if(abs(dfx)<tol) then
  24.        begin
  25.           if(dfx>=0.0) then dfx:=tol
  26.           else dfx := -tol
  27.        end;
  28.     dx:=fx/dfx;
  29.     x:=x1-dx;
  30.     writeln('x=',x1,',fx=',fx,',dfx=',dfx);
  31.   until abs(dx)<=abs(tol*x)
  32. end;    { newton }
  33.  
  34. begin        { main program }
  35.   alldone:=false;
  36.   repeat
  37.     writeln;
  38.     write('First guess (999. to exit): ');    { first guess }
  39.     readln(x);
  40.     if x=999. then alldone:=true
  41.     else
  42.       begin
  43.     newton(x);
  44.     writeln;
  45.     writeln('The solution is ',x);
  46.     writeln
  47.       end
  48.   until alldone
  49. end.
  50.