program Sekibun1; // 定積分(区分求積法) {$APPTYPE CONSOLE} uses SysUtils; var FNo : Integer; function F(X : Real) : Real; (* 被積分関数 *) var Y : Real; begin case FNo of 1 : Y := Sqr(X); 2 : Y := Sin(X); else begin Write('x=', X:5:2, ' y='); ReadLn(Y); end; end; F := Y; end; {F} function Teisekibun(A,B : Real; N : Integer) : Real; (* 区分求積法 S=Σyk dx (k=1〜n) *) (* dx=(b−a)/n,xk=a+kdx,yk=f(xk) *) var S,X,DX : Real; K : Integer; begin DX := (B-A)/N; X := A; S := 0; for K := 1 to N do begin X := X+DX; S := S+F(X); end; S := S*DX; Teisekibun := S; end; {Teisekibun} var A,B : Real; N : Integer; begin {Main} WriteLn('定積分(区分求積法)'); WriteLn; WriteLn('被積分関数を選んでください'); WriteLn('[0] xに対するyの値をその都度入力する'); WriteLn('[1] y=x^2'); WriteLn('[2] y=sin x'); Write('どれにしますか [0-2] ? '); ReadLn(FNo); Write('積分区間 [a b] ? '); ReadLn(A,B); WriteLn; Write('何分割しますか (0 を入れると終了) [n] ? '); ReadLn(N); while N > 0 do begin WriteLn('S=', Teisekibun(A,B,N):0:5); WriteLn; Write('何分割しますか (0 を入れると終了) [n] ? '); ReadLn(N); end; end.