unit unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TPoint3D = Record //Точка в трехмерном пространстве X, Y, Z : Integer; End; TfmForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } f : text; end; var fmForm1: TfmForm1; Arr,U : Array[1..50, 1..50, 1..50] Of Integer; //Массив из 50х50х50 элементов Napr1 : Array[1..50, 1..50, 1..50] Of TPoint3D; //50х50х50 (для каждой точки) направляющих векторов длиной = 1 - для // поиска координат следующей точки E : Array[1..50, 1..50, 1..50] Of Double; //Напряженность для каждой точки {procedure TfmForm1.Button1Click(Sender: TObject); procedure SaveMatrixToFile; } implementation {$R *.dfm} procedure TfmForm1.Button1Click(Sender: TObject); Var Cycle, Cycle2, Cycle3: Integer; //Для организации циклов LengthOfNapr : Double; //Длина направляющего вектора Napr H,dh,S,ds,dz : Double; //Длина вектора Napr1, так как она не всегда равна 1 Q1 : Double; //Общий заряд при dS = h*h = 1*1 Q2,C1,C2 : Double; //Общий заряд при dS = H*H Ei,Ej,Ek,E,Esi,Esj,Esk,C,Q,Spov,eps0:real; i,j,k,R:integer; begin For Cycle:= 1 To 50 Do For Cycle2:= 1 To 50 Do For Cycle3:= 1 To 50 Do U[Cycle, Cycle2, Cycle3] := 0; For i:= 1 To 50 Do For j:= 1 To 50 Do For k:= 1 To 50 Do begin If ((i-25) * (i-25) + (j-25) * (j-25) + (k-25) * (k-25) <= 169)Then U[i, j, k]:=2; end; dz:=1e-4; R:=14; Spov:=0; Ei:=0; Ej:=0; Ek:=0; E:=0; Esi:=0; Esj:=0; Esk:=0; Q := 0; Q2 := 0; C1 := 0; C2 := 0; eps0:=8.854e-12; For k:= 1 To 50 Do For j:= 1 To 50 Do For i:= 1 To 50 Do begin { if ((i-25) * (i-25) + (j-25) * (j-25) + (k-25) * (k-25) <= 196{169}{)Then} begin Esi:=(U[i+1,j,k]-U[i,j,k])/dz; Ei:=Ei+Esi; end; end; for i:=1 to 50 do for k:=1 to 50 do for j:=1 to 50 do begin {if ((i-25) * (i-25) + (j-25) * (j-25) + (k-25) * (k-25) <= 196{169}{)Then} begin Esj:=(U[i,j+1,k]-U[i,j,k])/dz; Ej:=Ej+Esj; end; end; for i:=1 to 50 do for j:=1 to 50 do for k:=1 to 50 do begin { if ((i-25) * (i-25) + (j-25) * (j-25) + (k-25) * (k-25) <= 196{169}{)Then} begin Esk:=(U[i,j,k+1]-U[i,j,k])/dz; Ek:=Ek+Esk; end; end; E:=sqrt(Ei*Ei+Ej*Ej+Ek*Ek); Spov:=4*pi*sqr(R*dz); {writeln(' S = ',Spov:5,' (m*m)');} Q:=E*Spov*eps0; C:=Q/2; {writeln(' q = ',Q:5,' (Kl); ',' C = ',C:5,' (F)');} {readln; } ShowMessage('E = ' + FormatFloat('0.00000000000000000000000000000', E)+#10#13 +'Spov = ' + FormatFloat('0.0000000000000000000000000000000', Spov) + #10#13 + 'Q = ' + FormatFloat('0.00000000000000000000000000000', Q)+#10#13 +'C = ' + FormatFloat('0.00000000000000000000000000000', C)); end; procedure TfmForm1.Button2Click(Sender: TObject); const Tab=chr(9); SaveFileName1='ux.prn'; SaveFileName2='uy.prn'; SaveFileName3='uz.prn'; var i, j, k : word; begin assignfile(f,SaveFileName1); rewrite(f); for i:=1 to 50 do begin for j:=1 to 50 do begin write(f,u[i,j,25]:3); if i<50 then write(f,Tab); end; writeln(f,''); end; CloseFile(f); assignFile(f,SaveFileName2); rewrite(f); for i:=1 to 50 do begin for k:=1 to 50 do begin write(f,u[i,25,k]:3); if i<50 then write(f,Tab); end; writeln(f,''); end; closeFile(f); assignFile(f,SaveFileName3); rewrite(f); for j:=1 to 50 do begin for k:=1 to 50 do begin write(f,u[25,j,k]:3); if j<50 then write(f,Tab); end; writeln(f,''); end; closeFile(f); end; end.