Проверить корректность перевода кода с Pascal - C#

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

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

Здравствуйте, помогите проверить, правильно ли перевел код, результаты почему-то разные код на паскале
Листинг программы
  1. uses crt;
  2. type vektor=array[1..2]of real;
  3. var x1:vektor;k,q:integer; eps,beta,c:real;
  4. procedure v(var a:vektor; b:vektor);
  5. begin
  6. a[1]:=b[1];
  7. a[2]:=b[2];
  8. end;
  9. function max(x1,x2:real):real;
  10. begin
  11. if x1>x2 then
  12. max:=x1
  13. else
  14. max:=x2;
  15. end;
  16. function funct1(c:real;x:vektor):real;
  17. var fi,g1,g2,g3,g4:real;
  18. begin
  19. fi:=0;
  20. g1:=2*x[1]-x[2]-2;
  21. fi:=fi+max(0,g1);
  22. g2:=-x[1];
  23. fi:=fi+max(0,g2);
  24. g3:=-x[2];
  25. fi:=fi+max(0,g3);
  26. funct1:=sqr(fi)*c/2;
  27. end;
  28. function funct2(c:real;x:vektor):real;
  29. var fi,g1,g2,g3,g4:real;
  30. begin
  31. fi:=0;
  32. g1:=2*x[1]-x[2]-2;
  33. fi:=fi+max(0,g1);
  34. g2:=-x[1];
  35. fi:=fi+max(0,g2);
  36. g3:=-x[2];
  37. fi:=fi+max(0,g3);
  38. fi:=sqr(fi)*c/2;
  39. funct2:=fi+sqr(x[1]+4)+sqr(x[2]-4);
  40. end;
  41. procedure minimization(c:real;var x1:vektor);
  42. var x,y,g:vektor;
  43. e:array[1..2,1..2]of integer; alf,l,eps:real; k,q,j:integer;
  44. begin
  45. eps:=0.01;
  46. l:=0.001;
  47. alf:=0.01;
  48. e[1,1]:=1;e[1,2]:=0;e[2,1]:=0;e[2,2]:=1;
  49. v(y,x1);
  50. k:=1;
  51. q:=0;
  52. repeat
  53. for j:=1 to 2 do
  54. begin
  55. g[1]:=y[1]+e[j,1]*l;
  56. g[2]:=y[2]+e[j,2]*l;
  57. if funct2(c,g)<funct2(c,y) then
  58. v(y,g)
  59. else
  60. begin
  61. g[1]:=y[1]-e[j,1]*l;
  62. g[2]:=y[2]-e[j,2]*l;
  63. if funct2(c,g)<funct2(c,y) then
  64. v(y,g);
  65. end;
  66. end;
  67. if funct2(c,y)<funct2(c,x1) then
  68. begin
  69. v(x,x1);
  70. v(x1,y);
  71. y[1]:=x1[1]+alf*(x1[1]-x[1]);
  72. y[2]:=x1[2]+alf*(x1[2]-x[2]);
  73. end
  74. else
  75. begin
  76. if l<=eps then
  77. q:=1
  78. else
  79. l:=l/2;
  80. end;
  81. k:=k+1;
  82. until q=1;
  83. end;
  84. begin
  85. write('eps=');
  86. read(eps);
  87. write('x[1]=');
  88. read(x1[1]);
  89. write('x[2]=');
  90. read(x1[2]);
  91. write('beta=');
  92. read(beta);
  93. write('C=');
  94. read(c);
  95. k:=1;
  96. q:=0;
  97. repeat
  98. minimization(c,x1);
  99. if funct1(c,x1)<eps then
  100. q:=1
  101. else
  102. begin
  103. c:=c*beta;
  104. k:=k+1;
  105. end;
  106. until q=1;
  107. writeln(x1[1],' ',x1[2]);
  108. end.
Код на С#
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. namespace metod_strafov
  7. {
  8. class Program
  9. {
  10. static float eps = 0;
  11. static float[] xy = new float[2];
  12. static float c = 0;
  13. static float beta = 0;
  14. static void Main(string[] args)
  15. {
  16. Console.WriteLine("Укажите точность: ");
  17. eps = (float)Convert.ToDouble(Console.ReadLine());
  18. Console.WriteLine("Укажите координату x точки: ");
  19. xy[0] = (float)Convert.ToDouble(Console.ReadLine());
  20. Console.WriteLine("Укажите координату y точки: ");
  21. xy[1] = (float)Convert.ToDouble(Console.ReadLine());
  22. Console.WriteLine("Укажите начальное значение параметра штрафа: ");
  23. beta = (float)Convert.ToDouble(Console.ReadLine());
  24. Console.WriteLine("Укажите значение увеличения параметра: ");
  25. c = (float)Convert.ToDouble(Console.ReadLine());
  26. int q = 0;
  27. int k = 1;
  28. do
  29. {
  30. minimization(c);
  31. if (f1(c, xy) < eps)
  32. q = 1;
  33. else
  34. {
  35. c = c * beta;
  36. k++;
  37. }
  38. }
  39. while (q != 1);
  40. Console.WriteLine("Результат: " + xy[0].ToString() + ' ' + xy[1].ToString());
  41. //Console.WriteLine(" " + k);
  42. Console.Read();
  43. }
  44. static float f1(float c, float[] x)
  45. {
  46. float fi = 0;
  47. float g1 = 0;
  48. float g2 = 0;
  49. float g3 = 0;
  50. g1 = 2 * x[0] - x[1] - 2;
  51. fi += Math.Max(0, g1);
  52. g2 = -x[0];
  53. fi += Math.Max(0, g2);
  54. g3 = -x[1];
  55. fi += Math.Max(0, g3);
  56. return (fi * fi * c / 2);
  57. }
  58. static float f2(float c, float[] x)
  59. {
  60. float fi = 0;
  61. float g1 = 0;
  62. float g2 = 0;
  63. float g3 = 0;
  64. g1 = 2 * x[0] - x[1] - 2;
  65. fi += Math.Max(0, g1);
  66. g2 = -x[0];
  67. fi += Math.Max(0, g2);
  68. g3 = -x[1];
  69. fi += Math.Max(0, g3);
  70. fi = fi * fi * c / 2;
  71. return (float)(fi + Math.Pow(x[0] + 4, 2) + Math.Pow(x[1] - 4, 2));
  72. }
  73. static void minimization(float c)
  74. {
  75. float[] x = new float[2];
  76. //float[] x1 = new float[2];
  77. float[] y = xy;
  78. float[] g = new float[2];
  79. int[,] e = new int[2, 2] { { 1, 0 }, { 0, 1 } };
  80. float alf = 0.01f;
  81. //float l = 0.001f;
  82. float l = 2;
  83. float eps = 0.01f;
  84. int k = 1;
  85. int q = 0;
  86. do
  87. {
  88. for (int j = 0; j < 1; j++)
  89. {
  90. g[0] = y[0] + e[j, 0] * l;
  91. g[1] = y[1] + e[j, 1] * l;
  92. if (f2(c, g) < f2(c, y))
  93. {
  94. //y = g;
  95. y[0] = g[0];
  96. y[1] = g[1];
  97. }
  98. else
  99. {
  100. g[0] = y[0] - e[j, 0] * l;
  101. g[1] = y[1] - e[j, 1] * l;
  102. if (f2(c, g) < f2(c, y))
  103. {
  104. //y = g;
  105. y[0] = g[0];
  106. y[1] = g[1];
  107. }
  108. }
  109. }
  110. if (f2(c, y) < f2(c, xy))
  111. {
  112. //x = x1;
  113. //x1 = y;
  114. x[0] = xy[0];
  115. x[1] = xy[1];
  116. xy[0] = y[0];
  117. xy[1] = y[1];
  118. y[0] = xy[0] + alf * (xy[0] - x[0]);
  119. y[1] = xy[1] + alf * (xy[1] - x[1]);
  120. }
  121. else
  122. {
  123. if (l <= eps)
  124. q = 1;
  125. else
  126. l = l / 2;
  127. }
  128. k++;
  129. }
  130. while (q != 1);
  131. }
  132. }
  133. }

Решение задачи: «Проверить корректность перевода кода с Pascal»

textual
Листинг программы
  1. float[] y = new float[2];
  2. y[0] = xy[0];
  3. y[1] = xy[1];

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


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

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

10   голосов , оценка 4.6 из 5

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

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

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