Перевожу с C++ на C#. Выдает ошибку

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

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

Вам поручено изучить некоторые свойства семейства числовых последовательностей. Каждая из них задается следующей рекуррентной формулой: Xn+1 = F(Xn-1, Xn), где n > 1, а F(X,Y) вычисляется по следующему алгоритму: Вычисляется H = (A1*X*Y + A2*X + A3*Y + A4). Если H > B1, то из H вычитается число C до тех пор, пока не выполнится условие H ≤ B2. Получившееся число H является значением функции F. Неотрицательные целочисленные константы A1, A2, A3, A4, B1, B2 и C являются параметрами последовательности. Несложно понять, что так устроенная последовательность удовлетворяет соотношению Xp+n = Xp+q+n для подхо*дящих достаточно больших положительных целых p и q и для всех n ≥ 0. Ваша задача найти наименьшие числа p и q с таким свойством. Обратим внимание, что такие p и q определяются однозначно и не зависят от порядка, в котором производится минимизация. Исходные данные Первая строка содержит семь целых чисел: A1, A2, A3, A4, B1, B2 и C, во второй строке находятся два целых числа X1 и X2, первые два члена последовательности. Гарантируется, что при вычислении значения функции F проме*жу*точное значение H и результат вычисления функции F лежат в диапазоне [0..100000]. Результат Выведите два числа: p и q, для которых последовательность обладает вышеназванным свойством. Выдает ошибку в c# типа для не статического поля требуется ссылка на объект, но если сделать переменную типа string она исчезает, но мне надо чтобы переменная была int. Помогите код на с++ (рабочий, все верно)
Листинг программы
  1. #include <iostream>
  2. #define max 300000
  3. using namespace std;
  4. int a1,a2,a3,a4,b1,b2,c,x1,x2;
  5. int p,q;
  6. int cal(int x, int y) {
  7. int h = a1*x*y+a2*x+a3*y+a4;
  8. if (h > b1) {
  9. while (h > b2) {
  10. h -= c;
  11. }
  12. }
  13. return h;
  14. }
  15. void iter(int& x, int& y) {
  16. int tmp = cal(x, y);
  17. x = y;
  18. y = tmp;
  19. }
  20. int main() {
  21. cin >> a1 >> a2 >> a3 >> a4 >> b1 >> b2 >> c >> x1 >> x2;
  22. int i, tmp1, tmp2, tmp3, tmp4;
  23. tmp3 = x1;
  24. tmp4 = x2;
  25. for (i = 0; i < max; i++) {
  26. iter(x1, x2);
  27. }
  28. tmp1 = x1;
  29. tmp2 = x2;
  30. q = 1;
  31. iter(x1, x2);
  32. while (x1 != tmp1 || x2 != tmp2) {
  33. q++;
  34. iter(x1, x2);
  35. }
  36. tmp1 = tmp3;
  37. tmp2 = tmp4;
  38. iter(tmp1,tmp2);
  39. i = 1;
  40. while (i != q) {
  41. i++;
  42. iter(tmp1, tmp2);
  43. }
  44. p = 1;
  45. while (tmp1 != tmp3 || tmp2 != tmp4) {
  46. p++;
  47. iter(tmp1, tmp2);
  48. iter(tmp3, tmp4);
  49. }
  50. cout << p << " " << q << endl;
  51. }
код на с#, нужна помощь
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.IO;
  7. namespace ConsoleApplication1
  8. {
  9. class Program
  10. {
  11. const int max = 300000;
  12. int a1, a2, a3, a4, b1, b2, c, x1, x2;
  13. int p, q;
  14. int cal(int x, int y)
  15. {
  16. int h = a1 * x * y + a2 * x + a3 * y + a4;
  17. if (h > b1)
  18. {
  19. while (h > b2)
  20. {
  21. h -= c;
  22. }
  23. }
  24. return h;
  25. }
  26. void iter(int x, int y)
  27. {
  28. int tmp = cal(x, y);
  29. x = y;
  30. y = tmp;
  31. }
  32. static void Main(string[] args)
  33. {
  34. string a1, a2, a3, a4, b1, b2, c, x1, x2;
  35. a1 = Console.ReadLine();
  36. a2= Console.ReadLine();
  37. a3=Console.ReadLine();
  38. a4=Console.ReadLine();
  39. b1=Console.ReadLine();
  40. b2=Console.ReadLine();
  41. c=Console.ReadLine();
  42. x1=Console.ReadLine();
  43. x2=Console.ReadLine();
  44. int i, tmp1, tmp2, tmp3, tmp4;
  45. tmp3 = x1;
  46. tmp4 = x2;
  47. for (i = 0; i < max; i++)
  48. {
  49. iter(x1, x2);
  50. }
  51. tmp1 = x1;
  52. tmp2 = x2;
  53. q = 1;
  54. iter(x1, x2);
  55. while (x1 != tmp1 || x2 != tmp2)
  56. {
  57. q++;
  58. iter(x1, x2);
  59. }
  60. tmp1 = tmp3;
  61. tmp2 = tmp4;
  62. iter(tmp1, tmp2);
  63. i = 1;
  64. while (i != q)
  65. {
  66. i++;
  67. iter(tmp1, tmp2);
  68. }
  69. p = 1;
  70. while (tmp1 != tmp3 || tmp2 != tmp4)
  71. {
  72. p++;
  73. iter(tmp1, tmp2);
  74. iter(tmp3, tmp4);
  75. }
  76. Console.WriteLine(p);Console.WriteLine(q);
  77. }
  78.  
  79. }
  80. }

Решение задачи: «Перевожу с C++ на C#. Выдает ошибку»

textual
Листинг программы
  1. using System;
  2. using System.Linq;
  3.  
  4. class Test
  5. {
  6.     const int max = 300000;
  7.     static int[] coeff = new int[7];
  8.  
  9.     static int Cal(int x, int y)
  10.     {
  11.         int h = coeff[0] * x * y + coeff[1] * x + coeff[2] * y + coeff[3];
  12.         if (h > coeff[4])
  13.         {
  14.             while (h > coeff[5])
  15.             {
  16.                 h -= coeff[6];
  17.             }
  18.         }
  19.         return h;
  20.     }
  21.  
  22.     static void Iter(ref int x, ref int y)
  23.     {
  24.         int tmp = Cal(x, y);
  25.         x = y;
  26.         y = tmp;
  27.     }
  28.  
  29.     static void Main(string[] args)
  30.     {
  31.         int p, q;
  32.         coeff = Console.ReadLine().Split(' ').Select(n => Convert.ToInt32(n)).ToArray();
  33.         int[] x = Console.ReadLine().Split(' ').Select(n => Convert.ToInt32(n)).ToArray();
  34.  
  35.         int i, tmp1, tmp2, tmp3, tmp4;
  36.         tmp3 = x[0];
  37.         tmp4 = x[1];
  38.         for (i = 0; i < max; i++)
  39.         {
  40.             Iter(ref x[0], ref x[1]);
  41.         }
  42.         tmp1 = x[0];
  43.         tmp2 = x[1];
  44.         q = 1;
  45.         Iter(ref x[0], ref x[1]);
  46.         while (x[0] != tmp1 || x[1] != tmp2)
  47.         {
  48.             q++;
  49.             Iter(ref x[0], ref x[1]);
  50.         }
  51.         tmp1 = tmp3;
  52.         tmp2 = tmp4;
  53.         Iter(ref tmp1, ref tmp2);
  54.         i = 1;
  55.         while (i != q)
  56.         {
  57.             i++;
  58.             Iter(ref tmp1, ref tmp2);
  59.         }
  60.         p = 1;
  61.         while (tmp1 != tmp3 || tmp2 != tmp4)
  62.         {
  63.             p++;
  64.             Iter(ref tmp1, ref tmp2);
  65.             Iter(ref tmp3, ref tmp4);
  66.         }
  67.         Console.WriteLine($"{p} {q}");
  68.     }
  69. }

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


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

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

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

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

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

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