Необходимо переписать код программы с Delphi 7 на C#. Возможно в этом коде есть ошибки.
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Math, ExtCtrls, graphDtrans, CheckLst;
type
TMain=class(TForm)
Label1:TLabel;
CheckListBox1:TCheckListBox;
Panel1:TPanel;
procedure FormCreate(Sender:TObject);
private
{ Private declarations }
public
{ Public declaration}
end;
const nn=100;
Type func=function(x:double):double;
var
Main:TMain;
b:massiv;
y,ymax,bk,a,a1,ak,h,h1,Gamast,Gamag,Rml,g,gm,l,fk:double;
m,ksi,V0,Tau,s,lambda,alfak,Mu0,delta:double;
result,bbb:double;
j:integer;
implementation
{$R *.dfm}
//-------------------------зависимость Psi от M и Ksi--------------------------------\\
function Psi(m,ksi:double):double;
begin
if (Ksi<=a*Pi/Tau) then Psi:=1/m-(1-s)*V0
else Psi:=Gamast/(m*Gamag);
end;
//-------------------------зависимость P от M -----------------------------------------\\
function p(x:double):double;
begin
p:=(2*h*abs(x))/(exp(2*abs(x))-1)*(1-exp(-abs(x)*m));
end;
//-----------------------------------------sign-------------------------------------------------\\
function sign(x:double):integer;
begin
if x>0 then sign:=1 else sign:=-1;
//if x=0 then sign:=0;
end;
//---------------------------------------поиск корней-------------------------------------------\\
{$F+}
function fkorn(x:double):double;
begin
if x<>Pi/2 then fkorn:=a1*tan(x)*x-abs(m);
end;
{$F-}
//--------------------------------Численное деление пополам-----------------------------------\\
function korny(aa,bb,e:double;f:func):double;
var c:double;
begin
bb:=70;
repeat
aa:=0.000013;
bb:=bb+0.03999;
until f(aa)*f(bb)<0;
bbb:=bb;
if(bb-aa<=0) then begin showmessage(‘Интервал указан неправильно!’);halt and else
if f(aa)*f(bb)>0 then begin showmessage(‘Указанный интервал не подходит для данного метода, т.к. значения ф-ции на’);
showmessage(‘концах отрезка’+flosttostr(aa)+’,’+floattostr(bb)+’ не удовлетворяют неравенству:(‘+floattostr(f(a))+’)*(‘+floattostr(f(bb))+’)<0’);halt end else
repeat
c:=(aa+bb)/2;
if f(a)=0 then c:=aa;
if f(bb)=0 then c:=bb;
if (f(aa)*f(c)<0) then bb:=c else aa:=c;
until(bb-aa<e)or(f(c)=0);
korny:=c;
end;
//--------------------------------подынтегральная функция-----------------------------------\\
{$F+}
function fx(x:double):double;
var B0:double;
test:double;
begin
B0:=(2*Mu0*sign(m)*cosh(m*y))/((m-alfak)*sinh(abs(m)*delta))*((cos(m*1)-1)+j*sin(m*l));
test:=gm*B0*fk;
fx:=test;
end;
{$F-}
//--------------------------------Численное интегрирование-----------------------------------\\
//--------------------------------метод прямоугольников -----------------------------------\\
function rectangls(a,b,e:double;f:func):double;
var s1,s2,h:double;I,n:integer;
begin
if(b-s<=0) then begin showmessage(‘Интервал указан неправильно!’);halt; and else
n:=100;
repeat
s1:=0;
s2:=0;
h:=(b-a)/n;
for i:=1 to n do
s1:=s1+h*f(h*i-h/2);
n:=n*2;
h:=(b-a)/n;
for i:=1 to n do
s2:=s2+h*f(h*i-h/2);
until abs(s2-s1)<e;
rectangls:=s2;
end;
//--------------------------------расчет суммы Ak и Fk--------------------------------------\\
procedure ras4et;
var k:integer;
begin
result:=0;
for k:=1 to 160 do
begin
m:=79.5+(k-1);
alfak:=korny(0,bbb,0.0001,fkorn);
gm:=p(m)*psi(m,Ksi);
lamdak:=(alfak*alfak+m*m)/(abs(m)*abs(gm));
bk:=sign(lamdak)*rectangls(-h1,h1,0.001,fx);
ak:=(lambda*bk)/(lambda+j*Rml);
fk:=((2*alfak)/(2*alfak*a1+sin(2*alfak)*a1*abs(gm))*cos(alfak)*y);
result:=result+ak*fk;
end;
end;
procedure TMain.FormCreate(Sender:TObject);
begin
y:=0;
ymax:=1;
h:=0.0104;
Tau:=0.09;
h1:=h*Pi/Tau;
l:=0.2502;
Mu0:=12.56e-7;
Gamag:=5e6;
Gamast:=2.5e6;
ksi:=1;
delta:=0.0116;
a:=0.0063;
a1:=a*Pi/Tau;
bbb:=1;
Rml:=5;
end;
end.