Перевод программы с 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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д