Просмотр кода
Идентификатор: a8236a1b Описание: Код загружен: 24 апреля 2012, 16:30 (Толяныч)
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls, ExtCtrls, Math; type TForm1 = class(TForm) Memo1: TMemo; EdA: TLabeledEdit; EdMin: TLabeledEdit; EdMax: TLabeledEdit; EdEps: TLabeledEdit; procedure FormClick(Sender: TObject); private { Private declarations } public end; var Form1: TForm1 ; A,Pmin,Pmax,Eps : double ; Grad,x,y,z,dx,dist,V0,V1,Delt,Px : double ; NN : integer ; implementation {$R *.dfm} procedure TForm1.FormClick(Sender: TObject); function FunV ( N : integer) : double ; var ix,iy,iz : integer ; tmp : double ; begin // DateSeparator := '.' ; tmp := 0 ; dx := A / ( N * 4 ) ; for ix := 0 to N-1 do begin x := dx * ( ix * 2 + 1) ; for iy := 0 to N-1 do begin y := dx * ( iy * 2 + 1) ; for iz := 0 to N-1 do begin z := dx * ( iz * 2 + 1) ; dist := Sqrt ( x*x + y*y + z*z ) ; tmp := tmp + (dist * Grad) + Pmin ; end ; end ; end ; Result := tmp * dx * dx * dx; end; //----------------- begin A := StrToFloat (EdA.Text) ; Pmin := StrToFloat (EdMin.Text) ; Pmax := StrToFloat (EdMax.Text) ; Eps := StrToFloat (EdEps.Text) ; V0 := 1.0 ; Grad := (Pmax-Pmin)/(A/2*Sqrt(3)) ; NN := 4 ; repeat V1 := FunV(NN) ; Delt := (V1-V0)/V1 ; V0 := V1 ; Memo1.Lines.Add( Format('%6.4f %6.4f',[V1,Delt])) ; NN := NN + NN ; until Delt<Eps ; V1 := V1 * A * A * A ; Memo1.Lines.Add( Format('Result = %6.4f',[V1])) ; end; end.