program Houteishiki3; {$APPTYPE CONSOLE} uses SysUtils; var A,B : array [0..9] of Real; X,XNew,Y,DY : Real; N,K,I : Integer; YN : Char; begin WriteLn('高次方程式の実数解(ニュートン法)'); WriteLn; Write('何次方程式ですか [1-9] ? '); ReadLn(N); WriteLn; WriteLn('係数を入れてください'); for K := N downto 0 do begin Write(' a', K, ' ? '); ReadLn(A[K]); end; WriteLn; for K := N downto 2 do Write(A[K]:0:2, 'x^', K, ' + '); WriteLn(A[1]:0:2, 'x + ', A[0]:0:2, ' = 0'); for K := 1 to N do B[K-1] := K*A[K]; B[N] := 0; repeat WriteLn; Write('xの初期値 ? '); ReadLn(XNew); I := 0; repeat Inc(I); X := XNew; Y := 0; DY := 0; for K := N downto 0 do begin Y := Y*X+A[K]; DY := DY*X+B[K]; end; if DY <> 0 then XNew := X-Y/DY until (XNew = X) or (DY = 0) or (I >= 100); if XNew = X then WriteLn('x=', X:0:8) else if DY = 0 then WriteLn('微分係数が0になってしまいました') else WriteLn('100回繰り返しましたが収束しませんでした'); WriteLn; Write('xの初期値を変更して調べますか [y/n] ? '); ReadLn(YN); until UpCase(YN) = 'N'; end.