Перевод программы с Pascal на C#

Узнай цену своей работы

Формулировка задачи:

Помогите плз!!! Надо перевести этот код pascal в С#.
Листинг программы
  1. KT*T=600
  2. KU=200.
  3. uses crt,graph;
  4. CONST
  5. MaxT=15;
  6. MaxU=100;
  7. MaxV=100;
  8. MaxRB=100;
  9. MaxH=100;
  10. Type
  11. MassVetType=array[1..MaxV] of integer;
  12. Var
  13. U1,U2:MassVetType;
  14. M:Array [1..MaxV div 2,1..MaxV div 2] of Integer;
  15. P:MassVetType;
  16. i,j,CH,CRB,CE,CC,CR,CT,CD,CU,CV,KT,KU:integer;
  17. Impulse,IC,Peredat,InputU,OutputU:byte;
  18. CheckOnly:byte;
  19. TR :array[1..MaxT]of record
  20. TTP :byte;
  21. B,E,K :integer;
  22. end;
  23. TTE,MFTE,CBEO,RUE,TAU,TTK,MFTK,CBKO,RUK,
  24. TAUU,B,Bu,TTD,MFTD,CBDO,RUD,TAUD:real;
  25. RB,RK,RD:real;
  26. Level0,Level1:real;
  27. KFrontF,KBackF:real;
  28. KInU,KOutU:byte;
  29. Method:byte;
  30. MDU,M1,M2,
  31. TT,
  32. TIMP,TSAD,
  33. H,
  34. HP,TP,TK:real;
  35. UR:array [1..MaxRB] of real;
  36. C:array [1..MaxRB] of real;
  37. R:array [1..MaxH] of real;
  38. F: Text;
  39. Chr:Char;
  40. Strg:String[7];
  41. SUR_N:integer;
  42. UR_N:array [1..10] of integer;
  43. SUH_N:integer;
  44. UH_N:array [1..10] of integer;
  45. GRPH:boolean;
  46.  
  47. PROCEDURE READDATA ;
  48. begin
  49. KT:=60;KU:=40;
  50. M1:=0.05;
  51. M2:=0.001;
  52. TTE:=2.2E-8;
  53. TTK:=1.7E-6;
  54. TTD:=9.0E-8;
  55. MFTE:=0.033;
  56. MFTK:=0.036;
  57. MFTD:=0.034;
  58. CBEO:=3.4E-2;
  59. CBKO:=4.0E-2;
  60. CBDO:=4.0E-2;
  61. B:=100;
  62. Bu:=1;
  63. TAU:=2.0E-1;
  64. TAUU:=6.2E-1;
  65. TAUD:=6.0E-1;
  66. RUE:=1.0E3;
  67. RUK:=1.0E3;
  68. RUD:=1.0E3;
  69. RB:=0.1;
  70. RK:=0.012;
  71. RD:=0.1;
  72. GRPH:=true;
  73. HP:=0.01;
  74. Impulse:=0;
  75. TSAD:=30;
  76. TIMP:=30;
  77. Peredat:=0;
  78. IC:=0;
  79. KFrontF:=1; KBackF:=1;
  80. KInU:=50; KOutU:=20;
  81. Method:=2;
  82. CheckOnly:=0;
  83. Level1:=2.4; Level0:=0.4;
  84. Assign(F, ParamStr(1));
  85. Reset(F);
  86. while not Eof(F) do
  87. begin
  88. Strg:='';
  89. repeat
  90. read(F,Chr);
  91. Strg:=Strg+Chr;
  92. until (Chr='=');
  93. case Strg[1] of
  94. 'P':read(F,Peredat);
  95. 'O':read(F,OutputU);
  96. 'I':case Strg[2] of
  97. 'M':read(F,Impulse);
  98. 'N':read(F,InputU);
  99. 'C':read(F,IC);
  100. end;
  101. 'C':case Strg[2] of
  102. 'T':read(F,CT);
  103. 'D':read(F,CD);
  104. 'E':read(F,CE);
  105. 'H':read(F,CheckOnly);
  106. 'C':read(F,CC);
  107. 'R':read(F,CR);
  108. 'U':read(F,CU);
  109. 'V':read(F,CV);
  110. 'B':case Strg[3] of
  111. 'E':read(F,CBEO);
  112. 'K':read(F,CBKO);
  113. 'D':read(F,CBDO);
  114. end;
  115. '=':for j:=1 to CC do read(F,C[j]);
  116. end;
  117. 'M':case Strg[2] of
  118. '1':read(F,M1);
  119. '2':read(F,M2);
  120. 'E':read(F,Method);
  121. 'F':case Strg[4] of
  122. 'E':read(F,MFTE);
  123. 'K':read(F,MFTK);
  124. 'D':read(F,MFTD);
  125. end;
  126. end;
  127. 'B':case Strg[2] of
  128. '=':read(F,B);
  129. 'u':read(F,Bu);
  130. end;
  131. 'T':case Strg[2] of
  132. 'I':read(F,TIMP);
  133. 'S':read(F,TSAD);
  134. 'T':case Strg[3] of
  135. 'E':read(F,TTE);
  136. 'K':read(F,TTK);
  137. 'D':read(F,TTD);
  138. end;
  139. 'A':case Strg[4] of
  140. '=':read(F,TAU);
  141. 'U':read(F,TAUU);
  142. 'D':read(F,TAUD);
  143. end;
  144. 'K':read(F,TK);
  145. 'R':for j:=1 to CT+CD do
  146. begin readln(F);
  147. read(F,TR[j].TTP, TR[j].B, TR[j].E, TR[j].K);
  148. end;
  149. end;
  150. 'R':case Strg[2] of
  151. 'U':case Strg[3] of
  152. 'E':read(F,RUE);
  153. 'K':read(F,RUK);
  154. 'D':read(F,RUD);
  155. end;
  156. '=':for i:=1 to CR do read(F,R[i]);
  157. 'B':read(F,RB);
  158. 'K':read(F,RK);
  159. 'D':read(F,RD);
  160. end;
  161. 'U':for i:=1 to CV do begin readln(F);
  162. read(F,U1[i],U2[i]);
  163. end;
  164. 'E':for j:=1 to CE do read(F,UR[j]);
  165. 'K':case Strg[2] of
  166. 'I':read(F,KInU);
  167. 'O':read(F,KOutU);
  168. 'U':read(F,KU);{ U koefficient }
  169. 'T':read(F,KT);{ T koefficient }
  170. 'F':read(F,KFrontF);
  171. 'B':read(F,KBackF);
  172. end;
  173. 'S':case Strg[6] of
  174. 'R':begin
  175. read(F,SUR_N);
  176. for i:=1 to SUR_N do read(F,UR_N[i]);
  177. end;
  178. 'H':begin
  179. read(F,SUH_N);
  180. for i:=1 to SUH_N do read(F,UH_N[i]);
  181. end;
  182. end;
  183. 'L':case Strg[6] of
  184. '0':read(F,Level0);
  185. '1':read(F,Level1);
  186. end;
  187. 'G':begin
  188. read(F,i); if i=0 then GRPH:=false;
  189. end;
  190. 'H':read(F,HP);
  191. end;
  192. readln(F);
  193. end;
  194. close(F);
  195. clrscr;
  196. if ParamStr(2)<>'nowrite' then
  197. begin
  198. writeln('--- Исходные данные --- файл: ',ParamStr(1));
  199. writeln(' CT=',CT,' CD=',CD,' CE=',CE,' CC=',CC,' CR=',CR,' CU=',CU,' CV=',CV);
  200. writeln('Ветви:');
  201. for j:=1 to CV do write(' {',U1[j],',',U2[j],'}');
  202. writeln;
  203. writeln('Транзисторы и диоды:');
  204. for j:=1 to CT+CD do
  205. write('{',TR[j].TTP,TR[j].B,TR[j].E,TR[j].K,'}');
  206. writeln;
  207. for j:=1 to CE do write(' E[',j,']=',UR[j]:1:1);
  208. writeln;
  209. for j:=1 to CC do write(' C[',j,']=',C[j]:1:3);
  210. writeln;
  211. for i:=1 to CR do write(' R[',i,']=',R[i]:3:3);
  212. writeln;
  213. writeln('TK=',TK:1:0,' KU=',KU,' KT=',KT,' M1=',M1:1:3,' M2=',M2:1:3);
  214. write('Выводимые напряжения ');
  215. if GRPH then writeln('(графически):')
  216. else writeln('(таблично):');
  217. write('Ребер (',SUR_N,'):');
  218. for i:=1 to SUR_N do write(' ',UR_N[i]);
  219. writeln;
  220. write('Хорд (',SUH_N,'):');
  221. for i:=1 to SUH_N do write(' ',UH_N[i]);
  222. writeln; writeln('Шаг печати =',HP:1:3);
  223. writeln;
  224. writeln('Электрические параметры');
  225. writeln('MFTE=',MFTE:1:3,' MFTK=',MFTK:1:3,' MFTD=',MFTD:1:3);
  226. writeln('B=',B:3:3,' Bu=',Bu:3:3);
  227. writeln('TTE=',TTE:1:6,' TTK=',TTK:1:6,' TTD=',TTD:1:6);
  228. writeln('TAU=',TAU:1:6,' TAUU=',TAUU:1:6,' TAUD=',TAUD:1:6);
  229. writeln('CBEO=',CBEO:1:6,' CBKO=',CBKO:1:6,' CBDO=',CBDO:1:6);
  230. write('RB=',RB:3:2,' RK=',RK:3:2,' RD=',RD:3:2);
  231. writeln('RUE=',RUE:3:2,' RUK=',RUK:3:2,' RUD=',RUD:3:2);
  232. readkey;
  233. clrscr;
  234. writeln('---------------Дополнительные параметры файл: ',ParamStr(1),' -----');
  235. write('Импульсный режим - ');
  236. case Impulse=1 of
  237. true:writeln('включено.');
  238. false:writeln('выключено.');
  239. end;
  240. write('Режим передаточной функции - ');
  241. case Peredat=1 of
  242. true:begin
  243. writeln('включено.');
  244. writeln('Шаг входного напряжения - ',KInU);
  245. writeln('Шаг выходного напряжения - ',KOutU);
  246. end;
  247. false:writeln('выключено.');
  248. end;
  249. writeln('Время задержки - ',TSad:3:2,'нс.');
  250. writeln('Длительность импульса - ',TImp:3:2,'нс.');
  251. writeln('Тангенс наклона переднего фронта - ',KFrontF:3:3);
  252. writeln('Тангенс наклона заднего фронта - ',KBackF:3:3);
  253. writeln('Входное напряжение - ребро #',InputU);
  254. writeln('Выходное напряжение - ребро #',OutputU);
  255. write('Управляющее напряжение - ');
  256. case IC=1 of
  257. true:
  258. begin
  259. writeln('отрицательное');
  260. writeln(' ноль: -',Level0:3:2,' В, единица: -',Level1:3:2,' В.');
  261. end;
  262. false:
  263. begin
  264. writeln('положительное');
  265. writeln(' ноль: ',Level0,' В, единица: ',Level1,' В.');
  266. end;
  267. end;
  268. write('Метод интегрирования - ');
  269. case Method=1 of
  270. true: writeln('старый.');
  271. false: writeln('новый.');
  272. end;
  273. write('Коррекция дерева - ');
  274. case CheckOnly=1 of
  275. true: writeln('вручную');
  276. false: writeln('автоматически');
  277. end;
  278. readkey;
  279. clrscr;
  280. end;
  281. END;
далее...

Решение задачи: «Перевод программы с Pascal на C#»

textual
Листинг программы
  1. MDU:=0;
  2.    for i:=1 to CC do
  3.      if MDU<abs(DUC[i]) then MDU:=abs(DUC[i]);
  4.    case Method=1 of
  5.  
  6.    true:  H:=M1/(M2+MDU); {старый метод с постоянными шагами}
  7.  
  8.    false:  {новый метод с шагами переменной величины}
  9.    if KL<>0 then
  10.      begin
  11.        while i<=CC do
  12.          begin
  13.            if ((DUC[i]>=0) and (RDU[i]>=0)) or ((DUC[i]<0) and (RDU[i]<0)) then
  14.           begin
  15.             i:=i+1;
  16.             if i>CC then
  17.                begin
  18.              KL:=1;
  19.              H:=M1/(M2+MDU)
  20.                end;
  21.           end
  22.          else
  23.            begin
  24.              H:=M1/(2*M2+MDU+RMDU);
  25.              i:=1;while i<=CC do
  26.                begin
  27.              S:=(DUC[i]*RDU[i])/(RDU[i]+DUC[i]);
  28.              i:=i+1;
  29.                end;
  30.              KL:=0;
  31.            end;
  32.          end;
  33.      end
  34.    else
  35.       begin
  36.     KL:=1;
  37.     H:=M1/(M2+MDU)
  38.       end;
  39.    end;{of case to Method selection}
  40.  
  41.    for i:=1 to CC do
  42.      UR[i+CE]:=UR[i+CE]+H*DUC[i];{ UR[i+CE] ==> UC[i] }
  43.  
  44.    RMDU:=MDU;
  45.    TT:=TT+H;
  46.    LUp:=Level1/KFrontF;    {проекция переднего фронта}
  47.    LDown:=Level1/KBackF;   {проекция  заднего  фронта}
  48. {   UR[inputU]:=sin(TT);}
  49.    if Impulse=1 then
  50.    begin
  51.      {формирование импульса}
  52.      if TT>TSAD then UR[InputU]:=( (TT-TSAD)*KFrontF+Level0);{передний фронт}
  53.      if (TT>=TSAD+LUp) and (TT<TSad+LUp+TImp){верхний уровень}
  54.      or (UR[InputU]>Level1) then UR[InputU]:=Level1;
  55.  
  56.      if (TT>=TSAD+TImp+LUp)
  57.      then UR[InputU]:=KBackF*(-TT+TSAD+TIMP+Level0+LUp+LDown);
  58.      {задний фронт}
  59.  
  60.      if (TT>(TImp+TSad+LUp+LDown)) or (abs(UR[InputU])<Level0)
  61.      then UR[InputU]:=Level0;  {нулевой уровень}
  62.  
  63.      if TT>TSAD then if IC=1 then UR[InputU]:=-UR[InputU];
  64.  
  65.    end;
  66.  
  67.    KSH:=KSH+1;
  68.  
  69.    if TT>=TP then
  70.      if GRPH then begin
  71.            {writeln('T=',TT,'  H=',H,' U[C2]=',UR[5]);}
  72.             j:=9;
  73.  
  74. if {(UR[InputU]<1.5*Level1) and} (Peredat=1) and (TT>TSAD-5) then
  75. begin
  76. putpixel(round(320+abs(UR[InputU]*KInU)),420-abs(round(abs(UR[OutputU])*KOutU)),13);
  77. {30 - шаг по оси U, 30 - по оси Т}
  78. end;
  79.  
  80.             for i:=1 to SUR_N do
  81.              begin
  82.               putpixel(round(20+TT*KT),240-round(UR[UR_N[i]]*KU),j);
  83.               j:=j+1;
  84.              end;
  85.             for i:=1 to SUH_N do
  86.              begin
  87.               putpixel(round(20+TT*KT),240-round(UH[UH_N[i]]*KU),j);
  88.               j:=j+1;
  89.              end;
  90.             TP:=TP+H;
  91.           end
  92.          else begin
  93.            write(' ',TT:3:3,' | ');
  94.            write(F,' ',TT:3:3,' | ');
  95.             for i:=1 to SUR_N do
  96.              begin
  97.               write(UR[UR_N[i]]:1:3,' | ');
  98.               write(F,UR[UR_N[i]]:1:3,' | ');
  99.              end;
  100.             for i:=1 to SUH_N do
  101.              begin
  102.               write(UH[UH_N[i]]:1:3,' | ');
  103.               write(F,UH[UH_N[i]]:1:3,' | ');
  104.              end;
  105.            writeln;
  106.            writeln(F);
  107.             TP:=TP+HP;
  108.          end;
  109.  until (TT>=TK) or (TT*KT>=639) or keypressed;
  110.   if not GRPH then
  111. end;
  112. {=========P R O G R AM=========}
  113. BEGIN
  114.  
  115.  READDATA;
  116.  CorrectTree;
  117.  TR2Polusnik(U1,U2,CU,CV);{ changes CU }
  118.  ChooseNormalTree({input}CU,CV,U1,U2,{output}CRB,CH,P);
  119.  CreateM(CRB,CH);
  120.  Solution;
  121.  
  122. END.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы