Перевод программы с Pascal на C#
Формулировка задачи:
Помогите плз!!! Надо перевести этот код pascal в С#.
далее...
KT*T=600
KU=200.
uses crt,graph;
CONST
MaxT=15;
MaxU=100;
MaxV=100;
MaxRB=100;
MaxH=100;
Type
MassVetType=array[1..MaxV] of integer;
Var
U1,U2:MassVetType;
M:Array [1..MaxV div 2,1..MaxV div 2] of Integer;
P:MassVetType;
i,j,CH,CRB,CE,CC,CR,CT,CD,CU,CV,KT,KU:integer;
Impulse,IC,Peredat,InputU,OutputU:byte;
CheckOnly:byte;
TR :array[1..MaxT]of record
TTP :byte;
B,E,K :integer;
end;
TTE,MFTE,CBEO,RUE,TAU,TTK,MFTK,CBKO,RUK,
TAUU,B,Bu,TTD,MFTD,CBDO,RUD,TAUD:real;
RB,RK,RD:real;
Level0,Level1:real;
KFrontF,KBackF:real;
KInU,KOutU:byte;
Method:byte;
MDU,M1,M2,
TT,
TIMP,TSAD,
H,
HP,TP,TK:real;
UR:array [1..MaxRB] of real;
C:array [1..MaxRB] of real;
R:array [1..MaxH] of real;
F: Text;
Chr:Char;
Strg:String[7];
SUR_N:integer;
UR_N:array [1..10] of integer;
SUH_N:integer;
UH_N:array [1..10] of integer;
GRPH:boolean;
PROCEDURE READDATA ;
begin
KT:=60;KU:=40;
M1:=0.05;
M2:=0.001;
TTE:=2.2E-8;
TTK:=1.7E-6;
TTD:=9.0E-8;
MFTE:=0.033;
MFTK:=0.036;
MFTD:=0.034;
CBEO:=3.4E-2;
CBKO:=4.0E-2;
CBDO:=4.0E-2;
B:=100;
Bu:=1;
TAU:=2.0E-1;
TAUU:=6.2E-1;
TAUD:=6.0E-1;
RUE:=1.0E3;
RUK:=1.0E3;
RUD:=1.0E3;
RB:=0.1;
RK:=0.012;
RD:=0.1;
GRPH:=true;
HP:=0.01;
Impulse:=0;
TSAD:=30;
TIMP:=30;
Peredat:=0;
IC:=0;
KFrontF:=1; KBackF:=1;
KInU:=50; KOutU:=20;
Method:=2;
CheckOnly:=0;
Level1:=2.4; Level0:=0.4;
Assign(F, ParamStr(1));
Reset(F);
while not Eof(F) do
begin
Strg:='';
repeat
read(F,Chr);
Strg:=Strg+Chr;
until (Chr='=');
case Strg[1] of
'P':read(F,Peredat);
'O':read(F,OutputU);
'I':case Strg[2] of
'M':read(F,Impulse);
'N':read(F,InputU);
'C':read(F,IC);
end;
'C':case Strg[2] of
'T':read(F,CT);
'D':read(F,CD);
'E':read(F,CE);
'H':read(F,CheckOnly);
'C':read(F,CC);
'R':read(F,CR);
'U':read(F,CU);
'V':read(F,CV);
'B':case Strg[3] of
'E':read(F,CBEO);
'K':read(F,CBKO);
'D':read(F,CBDO);
end;
'=':for j:=1 to CC do read(F,C[j]);
end;
'M':case Strg[2] of
'1':read(F,M1);
'2':read(F,M2);
'E':read(F,Method);
'F':case Strg[4] of
'E':read(F,MFTE);
'K':read(F,MFTK);
'D':read(F,MFTD);
end;
end;
'B':case Strg[2] of
'=':read(F,B);
'u':read(F,Bu);
end;
'T':case Strg[2] of
'I':read(F,TIMP);
'S':read(F,TSAD);
'T':case Strg[3] of
'E':read(F,TTE);
'K':read(F,TTK);
'D':read(F,TTD);
end;
'A':case Strg[4] of
'=':read(F,TAU);
'U':read(F,TAUU);
'D':read(F,TAUD);
end;
'K':read(F,TK);
'R':for j:=1 to CT+CD do
begin readln(F);
read(F,TR[j].TTP, TR[j].B, TR[j].E, TR[j].K);
end;
end;
'R':case Strg[2] of
'U':case Strg[3] of
'E':read(F,RUE);
'K':read(F,RUK);
'D':read(F,RUD);
end;
'=':for i:=1 to CR do read(F,R[i]);
'B':read(F,RB);
'K':read(F,RK);
'D':read(F,RD);
end;
'U':for i:=1 to CV do begin readln(F);
read(F,U1[i],U2[i]);
end;
'E':for j:=1 to CE do read(F,UR[j]);
'K':case Strg[2] of
'I':read(F,KInU);
'O':read(F,KOutU);
'U':read(F,KU);{ U koefficient }
'T':read(F,KT);{ T koefficient }
'F':read(F,KFrontF);
'B':read(F,KBackF);
end;
'S':case Strg[6] of
'R':begin
read(F,SUR_N);
for i:=1 to SUR_N do read(F,UR_N[i]);
end;
'H':begin
read(F,SUH_N);
for i:=1 to SUH_N do read(F,UH_N[i]);
end;
end;
'L':case Strg[6] of
'0':read(F,Level0);
'1':read(F,Level1);
end;
'G':begin
read(F,i); if i=0 then GRPH:=false;
end;
'H':read(F,HP);
end;
readln(F);
end;
close(F);
clrscr;
if ParamStr(2)<>'nowrite' then
begin
writeln('--- Исходные данные --- файл: ',ParamStr(1));
writeln(' CT=',CT,' CD=',CD,' CE=',CE,' CC=',CC,' CR=',CR,' CU=',CU,' CV=',CV);
writeln('Ветви:');
for j:=1 to CV do write(' {',U1[j],',',U2[j],'}');
writeln;
writeln('Транзисторы и диоды:');
for j:=1 to CT+CD do
write('{',TR[j].TTP,TR[j].B,TR[j].E,TR[j].K,'}');
writeln;
for j:=1 to CE do write(' E[',j,']=',UR[j]:1:1);
writeln;
for j:=1 to CC do write(' C[',j,']=',C[j]:1:3);
writeln;
for i:=1 to CR do write(' R[',i,']=',R[i]:3:3);
writeln;
writeln('TK=',TK:1:0,' KU=',KU,' KT=',KT,' M1=',M1:1:3,' M2=',M2:1:3);
write('Выводимые напряжения ');
if GRPH then writeln('(графически):')
else writeln('(таблично):');
write('Ребер (',SUR_N,'):');
for i:=1 to SUR_N do write(' ',UR_N[i]);
writeln;
write('Хорд (',SUH_N,'):');
for i:=1 to SUH_N do write(' ',UH_N[i]);
writeln; writeln('Шаг печати =',HP:1:3);
writeln;
writeln('Электрические параметры');
writeln('MFTE=',MFTE:1:3,' MFTK=',MFTK:1:3,' MFTD=',MFTD:1:3);
writeln('B=',B:3:3,' Bu=',Bu:3:3);
writeln('TTE=',TTE:1:6,' TTK=',TTK:1:6,' TTD=',TTD:1:6);
writeln('TAU=',TAU:1:6,' TAUU=',TAUU:1:6,' TAUD=',TAUD:1:6);
writeln('CBEO=',CBEO:1:6,' CBKO=',CBKO:1:6,' CBDO=',CBDO:1:6);
write('RB=',RB:3:2,' RK=',RK:3:2,' RD=',RD:3:2);
writeln('RUE=',RUE:3:2,' RUK=',RUK:3:2,' RUD=',RUD:3:2);
readkey;
clrscr;
writeln('---------------Дополнительные параметры файл: ',ParamStr(1),' -----');
write('Импульсный режим - ');
case Impulse=1 of
true:writeln('включено.');
false:writeln('выключено.');
end;
write('Режим передаточной функции - ');
case Peredat=1 of
true:begin
writeln('включено.');
writeln('Шаг входного напряжения - ',KInU);
writeln('Шаг выходного напряжения - ',KOutU);
end;
false:writeln('выключено.');
end;
writeln('Время задержки - ',TSad:3:2,'нс.');
writeln('Длительность импульса - ',TImp:3:2,'нс.');
writeln('Тангенс наклона переднего фронта - ',KFrontF:3:3);
writeln('Тангенс наклона заднего фронта - ',KBackF:3:3);
writeln('Входное напряжение - ребро #',InputU);
writeln('Выходное напряжение - ребро #',OutputU);
write('Управляющее напряжение - ');
case IC=1 of
true:
begin
writeln('отрицательное');
writeln(' ноль: -',Level0:3:2,' В, единица: -',Level1:3:2,' В.');
end;
false:
begin
writeln('положительное');
writeln(' ноль: ',Level0,' В, единица: ',Level1,' В.');
end;
end;
write('Метод интегрирования - ');
case Method=1 of
true: writeln('старый.');
false: writeln('новый.');
end;
write('Коррекция дерева - ');
case CheckOnly=1 of
true: writeln('вручную');
false: writeln('автоматически');
end;
readkey;
clrscr;
end;
END;Решение задачи: «Перевод программы с Pascal на C#»
textual
Листинг программы
MDU:=0;
for i:=1 to CC do
if MDU<abs(DUC[i]) then MDU:=abs(DUC[i]);
case Method=1 of
true: H:=M1/(M2+MDU); {старый метод с постоянными шагами}
false: {новый метод с шагами переменной величины}
if KL<>0 then
begin
while i<=CC do
begin
if ((DUC[i]>=0) and (RDU[i]>=0)) or ((DUC[i]<0) and (RDU[i]<0)) then
begin
i:=i+1;
if i>CC then
begin
KL:=1;
H:=M1/(M2+MDU)
end;
end
else
begin
H:=M1/(2*M2+MDU+RMDU);
i:=1;while i<=CC do
begin
S:=(DUC[i]*RDU[i])/(RDU[i]+DUC[i]);
i:=i+1;
end;
KL:=0;
end;
end;
end
else
begin
KL:=1;
H:=M1/(M2+MDU)
end;
end;{of case to Method selection}
for i:=1 to CC do
UR[i+CE]:=UR[i+CE]+H*DUC[i];{ UR[i+CE] ==> UC[i] }
RMDU:=MDU;
TT:=TT+H;
LUp:=Level1/KFrontF; {проекция переднего фронта}
LDown:=Level1/KBackF; {проекция заднего фронта}
{ UR[inputU]:=sin(TT);}
if Impulse=1 then
begin
{формирование импульса}
if TT>TSAD then UR[InputU]:=( (TT-TSAD)*KFrontF+Level0);{передний фронт}
if (TT>=TSAD+LUp) and (TT<TSad+LUp+TImp){верхний уровень}
or (UR[InputU]>Level1) then UR[InputU]:=Level1;
if (TT>=TSAD+TImp+LUp)
then UR[InputU]:=KBackF*(-TT+TSAD+TIMP+Level0+LUp+LDown);
{задний фронт}
if (TT>(TImp+TSad+LUp+LDown)) or (abs(UR[InputU])<Level0)
then UR[InputU]:=Level0; {нулевой уровень}
if TT>TSAD then if IC=1 then UR[InputU]:=-UR[InputU];
end;
KSH:=KSH+1;
if TT>=TP then
if GRPH then begin
{writeln('T=',TT,' H=',H,' U[C2]=',UR[5]);}
j:=9;
if {(UR[InputU]<1.5*Level1) and} (Peredat=1) and (TT>TSAD-5) then
begin
putpixel(round(320+abs(UR[InputU]*KInU)),420-abs(round(abs(UR[OutputU])*KOutU)),13);
{30 - шаг по оси U, 30 - по оси Т}
end;
for i:=1 to SUR_N do
begin
putpixel(round(20+TT*KT),240-round(UR[UR_N[i]]*KU),j);
j:=j+1;
end;
for i:=1 to SUH_N do
begin
putpixel(round(20+TT*KT),240-round(UH[UH_N[i]]*KU),j);
j:=j+1;
end;
TP:=TP+H;
end
else begin
write(' ',TT:3:3,' | ');
write(F,' ',TT:3:3,' | ');
for i:=1 to SUR_N do
begin
write(UR[UR_N[i]]:1:3,' | ');
write(F,UR[UR_N[i]]:1:3,' | ');
end;
for i:=1 to SUH_N do
begin
write(UH[UH_N[i]]:1:3,' | ');
write(F,UH[UH_N[i]]:1:3,' | ');
end;
writeln;
writeln(F);
TP:=TP+HP;
end;
until (TT>=TK) or (TT*KT>=639) or keypressed;
if not GRPH then
end;
{=========P R O G R AM=========}
BEGIN
READDATA;
CorrectTree;
TR2Polusnik(U1,U2,CU,CV);{ changes CU }
ChooseNormalTree({input}CU,CV,U1,U2,{output}CRB,CH,P);
CreateM(CRB,CH);
Solution;
END.