Как перевести код с delphi на С#? - C#
Формулировка задачи:
В общем у меня есть 2 кода программ написанных на delphi. Мне нужны полностью работающие эти программы, но на С#.... Помогите!)
type
TForm1 = class(TForm) XPManifest1: TXPManifest; Edit1: TEdit; Edit2: TEdit; Edit4: TEdit; Button1: TButton; MainMenu1: TMainMenu; N1: TMenuItem; N2: TMenuItem; N3: TMenuItem; N4: TMenuItem; Memo1: TMemo; Label1: TLabel; Label2: TLabel; Label4: TLabel; Label6: TLabel; Label8: TLabel; Edit7: TEdit; Button2: TButton; Image1: TImage; Image2: TImage; Image3: TImage; Image4: TImage; Image5: TImage; Image6: TImage; procedure N4Click(Sender: TObject); procedure N3Click(Sender: TObject); procedure N2Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender:TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
n:array of integer;
m:array of integer;
s:array of array of Real;
v1:array of array of Real;//матрица для закона распределения состояний и вероятностей
sl:array of real;
implementation
{$R *.dfm}
procedure TForm1.N4Click(Sender: TObject);
begin
close;
end;
procedure TForm1.N3Click(Sender: TObject);
begin
form1.Edit1.Text:='';
form1.Edit2.Text:='';
form1.Edit4.Text:='';
form1.Edit7.Text:='';
memo1.Lines.Text:='';
end;
procedure TForm1.N2Click(Sender: TObject);
begin
ShowMessage('Выполнил:Казанцев Виталий'+#13+'группа 07-ВТ-1'+#13+'ИЗ2');
end;
procedure TForm1.Button1Click(Sender: TObject);
var takt,i,nak1,nak2,y,u,v,x,razn,ne:integer;
b,a,t,t2,l,mu,nu,p1,p2,l2:real;
psi:real;
m:boolean;
w:real;
// label GotoLabel;
begin
try //обработка исключительных ситуаций
randomize;//генератор случайных чисел
if (Edit1.Text='') or (Edit2.Text='') or (Edit4.Text='') or (Edit7.Text='') then
ShowMessage('Вы ввели не все параметры!') //проверка заполнения полей необходимыми данными
else begin
t:=strtoint(edit2.text);//время обслуживания одного пенсионера 1м опреатором (мю1, т.е. 1 поток)
t2:=strtoint(edit7.text);//время обслуживания пенсионера вторым оператором (мю2, т.е. второй поток)
takt:=StrToInt(Edit4.Text);//количество тактов (за которое время будут получены данные по системе)
l:=StrToInt(Edit1.Text);//плотность потока пенсионеров
//--------------------------------------------------------------------------------
a:= 2;//внутреннее вероятностного автомата А, приравнивается первому интервалу
b:= 1;//внутреннее значение вероятностного автомата В
x:= 0;//выходной сигнал автомата А
y:= 0;//выходной сигнал автомата В
u:= 0;//детерминированный автомат u - сколько поступило заявок
v:= 0;//детерминированный автомат v - сколько обслужено заявок
nak1:=0;//обнуление накопителя первого потока заявок(от просто больных)
nak2:=0;//обнуление накопителя второго потока заявок(от больных со скорой помощи)
ne:=0;
for i:= takt downto 0 do begin
randomize;
if (a > 1) then begin a:= a-1; x:= 0;
end else begin
a:= round(-60/l*ln(random)); //генерация случайной величины (промежутка времени между заявками)
x:= 1
end;
// Если очереди одинаковы, то вновь прибывшая заявка с равной вероятностью занимает место в одной из них.
if (x=1) and (nak1=nak2) then
begin
psi:= random(2);
if psi=1 then
nak1:=nak1+1 //вероятность появления 1 потока
else
nak2:=nak2+1//вероятность появления 2потока
end else
//Всякая вновь прибывшая заявка становится в более короткую очередь, если очередь не равна по длине.
if (x=1) and (nak1<nak2) then
begin
nak1:=nak1+x;
end//накопитель для первого потока
else
if (x=1) and (nak2<nak1) then
begin
nak2:=nak2+x;
end;//накопитель для второго потока
if (b > 1) then begin //пенсионер обслуживается
b:= b-1; y:= 0;
end else
if (b <= 1)and(x = 0) then begin
b:= 0; y:= 0;
end else
if (b <= 1)and(nak2>=nak1) then begin
b:= t2;//ound(-60/mu*ln(random));//генерация случайной величины (времени обслуживания)
y:= 1;
end else
if (b <= 1)and(nak1>nak2) then begin
b:= t;//ound(-60/mu*ln(random));
y:= 1;
end;
v:= v + y;//накапливание количества обработанных заявок
end;
Memo1.Lines.Clear;
{определение характеристик СМОР}
memo1.Lines.Add('Количество поступивших пенсионеров к 1оператору: '+IntToStr(nak1));
memo1.Lines.Add('Количество поступивших пенсионеров ко 2оператору '+IntToStr(nak2));
memo1.Lines.Add('Общее количество обслуженных пенсионеров: '+IntToStr(v));
ne:=(nak1+nak2)-v;
memo1.Lines.Add('Общее количество недождавшихся пенсионеров: '+IntToStr(ne));
end;
except
ShowMessage('Один или несколько параметров введены неправильно!')
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
form1.Close;
end;
end.type
TForm1 = class(TForm) Label1: TLabel; Edit1: TEdit; Label2: TLabel;
Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; Edit2: TEdit Edit3: TEdit; Edit4: TEdit; Edit5: TEdit; Label8: TLabel; Label9: TLabel; Edit6: TEdit; Edit7: TEdit; Label10: TLabel; Edit8: TEdit; Button1: TButton; StringGrid1: TStringGrid; Label11: TLabel; Edit9: TEdit;
XPManifest1: TXPManifest; Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
s1: array [1..2,1..100] of integer;
s2: array [1..2,1..100] of integer;
tact,mat_oj,m1,n1,lambda1,m2,n2,lambda2:integer; //входные параметры
sigma:real;
i,j,sl,a,x,zanyato1,zanyato2,ob_kol_zayavok,proshli_1_fazu,proshli_obe_fazi:integer;
ob1,ob2,otkaz,pol_ob :integer;
summa12,ver_polnogo_obsl,ver_obsl_1fazi:real;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
label
metka1;
label
metka2;
begin
try //обработка исключений
randomize; //генератор случайных чисел
if (Edit1.Text='') or (Edit2.Text='') or (Edit3.Text='') or
(Edit4.Text='') or (Edit5.Text='') or (Edit6.Text='') or (edit9.Text='')
or (Edit7.Text='') or (Edit8.Text='') then //проверка заполнения необходимых данных
ShowMessage('Вы ввели не все параметры!')
else
begin
tact:=StrToInt(Edit1.Text);//количество тактов
mat_oj:=StrToInt(Edit6.Text);//среднее значение
sigma:=StrToFloat(Edit7.Text);//среднее отклонение
m1:=StrToInt(Edit8.Text);//количество мест в накопителе перед первой фазой обслуживания
n1:=StrToInt(Edit2.Text);//количество каналов обслуживания первой фазы
lambda1:=strtoint(edit3.Text); //производительность каналов обслуживания первой фазы
m2:=strtoint(edit9.Text); //количество мест в накопителе перед второй фазой обслуживания
n2:=strtoint(edit4.Text); // количество каналов обслуживания второй фазы
lambda2:=strtoint(edit5.Text); //производительность каналов обслуживания второй фазы
for i:=1 to n1 do
begin
s1[1,i]:=0; //обнуление матрицы s1
s1[2,i]:=0;
end;
for i:=1 to n2 do
begin
s2[1,i]:=0; //обнуление матрицы s2
s2[2,i]:=0;
end;
zanyato1:=0; //количество занятых мест в накопителе перед первой фазой
zanyato2:=0; //количество занятых мест в накопителе перед второй фазой обслуживания
a:=1; //внутреннее состояние автомата А
ob1:=0; ob2:=0; otkaz:=0;
pol_ob:=0;
//счетчики
ob_kol_zayavok:=0; //для общего количества заявок
proshli_1_fazu:=0; //для заявок, которые прошли только первую фазу обслуживания
proshli_obe_fazi:=0; //для заявок прошедших и первую, и вторую фазу обслуживания
{составление ТУФП}
for j:= tact downto 0 do
begin
if a>1 then begin a:=a-1; x:=0;
end else
begin
summa12:=0;
for i:=1 to 12 do
summa12:=summa12+random;
a:=round(mat_oj+sigma*(summa12-6));
x:=1;
end;
ob_kol_zayavok:=ob_kol_zayavok+x;
zanyato1:=zanyato1+x;//детерминированный автомат для моделирования накопителя 1
ob1:=ob1+1;
if (zanyato1>m1) then
begin
zanyato1:=m1;
ob1:=ob1-1; otkaz:=otkaz+1;
zanyato2:=zanyato2+x; ob2:=ob2+1;
if (zanyato2>m2) then
begin
zanyato2:=m2; ob2:=ob2-1;
end; end;
//sl:=random(3);
// if sl =1 then goto metka1
// else goto metka2;
metka1: for i:=1 to n1 do
begin
if s1[1,i]>1 then
begin
s1[1,i]:=s1[1,i]-1;
s1[2,i]:=0;
end;
if (s1[1,i]=1) and (zanyato1>=1) then
begin
s1[1,i]:=round((-60/lambda1)*ln(random));
zanyato1:=zanyato1-1;
s1[2,i]:=1;
end;
if (s1[1,i]=1) and (zanyato1=0) then
begin
s1[1,i]:=0; s1[2,i]:=1;
end;
if (s1[1,i]=0) and (zanyato1>=1) then
begin
s1[1,i]:=round((-60/lambda1)*ln(random));
zanyato1:=zanyato1-1;
s1[2,i]:=0;
end;
if (s1[1,i]=0) and (zanyato1=0) then
begin
s1[1,i]:=0; s1[2,i]:=0;
end; end;
for i:=1 to n1 do
begin
zanyato2:= zanyato2+s1[2,i];
pol_ob:=pol_ob+1;
if zanyato2>m2 then
begin
zanyato2:=m2; pol_ob:=pol_ob-1;
proshli_1_fazu:=proshli_1_fazu+s1[2,i];
end else
zanyato2:=zanyato2+s1[2,i];
end;
metka2: for i:=1 to n2 do
begin
if s2[1,i]>1 then
begin
s2[1,i]:=s2[1,i]-1; s2[2,i]:=0;
end;
if (s2[1,i]=1) and (zanyato2>=1) then
begin
s2[1,i]:=round((-60/lambda2)*ln(random));
zanyato2:=zanyato2-1;
s2[2,i]:=1;
end;
if (s2[1,i]=1) and (zanyato2=0) then
begin
s2[1,i]:=0; s2[2,i]:=1;
end;
if (s2[1,i]=0) and (zanyato2>=1) then
begin
s2[1,i]:=round((-60/lambda2)*ln(random));
zanyato2:=zanyato2-1;
s2[2,i]:=0;
end;
if (s2[1,i]=0) and (zanyato2=0) then
begin
s2[1,i]:=0; s2[2,i]:=0;
end; end;
for i:=1 to n2 do
proshli_obe_fazi:=proshli_obe_fazi+s2[2,i];
end;
ver_obsl_1fazi:=proshli_1_fazu/ob_kol_zayavok; // вероятность обслуживания только первой фазой обслуживания
ver_polnogo_obsl:=proshli_obe_fazi/ob_kol_zayavok; //вероятность обслуживания на обеих фазах
StringGrid1.Cells[0, 0] := 'Определены параметры ';
StringGrid1.Cells[1, 0] := 'Значения ';
StringGrid1.Cells[0, 1] := 'Общее кол заявок ';
StringGrid1.Cells[0, 2] := 'Прошли только 1-фазу';
StringGrid1.Cells[0, 3] := 'Прошли полное обсл-е ';
StringGrid1.Cells[0, 4] := 'Вер обсл только 1-фазы ';
StringGrid1.Cells[0, 5] := 'Вер обсл на обеих фазах ';
StringGrid1.Cells[0, 6] := 'Вер обсл только 2 фазы ';
StringGrid1.Cells[0, 7] := 'Вер отказа ';
StringGrid1.Cells[1, 1] := inttostr(ob_kol_zayavok);
StringGrid1.Cells[1, 2] := inttostr(proshli_1_fazu);
StringGrid1.Cells[1, 3] := inttostr(proshli_obe_fazi);
StringGrid1.Cells[1, 4] := formatfloat('0.000',ver_obsl_1fazi);
StringGrid1.Cells[1, 5] := formatfloat('0.000',ver_polnogo_obsl);
StringGrid1.Cells[1, 6] := formatfloat('0.000',ob2/ob_kol_zayavok);
StringGrid1.Cells[1, 7] := formatfloat('0.000',otkaz/ob_kol_zayavok);
end;
except
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
form1.Close;
end;
end.Решение задачи: «Как перевести код с delphi на С#?»
textual
Листинг программы
var a : integer; a := a + 1;