Оптимизировать код за счет сокращения количества условных операторов - C#

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

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

Доброго времени суток. Прошу помощь в сокращение размера кода, если конечно это возможно. Z, R, Fi - берутся из листа Excel. R = 60, Z = 68, Fi = 36. В dataGridView1 так же загружены данные с листа Excel.
Листинг программы
  1. for (int ugol = 0; ugol < Fi; ugol++)
  2. {
  3. if (ugol == 0)
  4. {
  5. // для угла Fi = 0
  6. Double[,] angle0 = new double[Z, R * 2 + 1];
  7. for (int i = 1; i <= Z; i++)
  8. {
  9. for (int j = 0; j <= R * 2; j++)
  10. {
  11. angle0[i - 1, j] = Convert.ToDouble(dataGridView1.Rows[i].Cells[j].Value.ToString());
  12. }
  13. }
  14. }
  15. else if (ugol == 1)
  16. {
  17. // для угла Fi = 10
  18. Double[,] angle10 = new double[Z + 1, R * 2 + 1];
  19. for (int i = 0; i <= Z; i++)
  20. {
  21. for (int j = 0; j <= R * 2; j++)
  22. {
  23. angle10[i, j] = Convert.ToDouble(dataGridView1.Rows[i + Z + 4].Cells[j].Value.ToString());
  24. }
  25. }
  26. }
  27. else if (ugol == 2)
  28. {
  29. // для угла Fi = 20
  30. Double[,] angle20 = new double[Z + 1, R * 2 + 1];
  31. for (int i = 0; i <= Z; i++)
  32. {
  33. for (int j = 0; j <= R * 2; j++)
  34. {
  35. angle20[i, j] = Convert.ToDouble(dataGridView1.Rows[i + ugol * (Z + 4) - (ugol - 1)].Cells[j].Value.ToString());
  36. }
  37. }
  38. }
  39. else if (ugol == 3)
  40. {
  41. // для угла Fi = 30
  42. Double[,] angle30 = new double[Z + 1, R * 2 + 1];
  43. for (int i = 0; i <= Z; i++)
  44. {
  45. for (int j = 0; j <= R * 2; j++)
  46. {
  47. angle30[i, j] = Convert.ToDouble(dataGridView1.Rows[i + ugol * (Z + 4) - (ugol - 1)].Cells[j].Value.ToString());
  48. }
  49. }
  50. }
  51. else if (ugol == 4)
  52. {
  53. // для угла Fi = 40
  54. Double[,] angle40 = new double[Z + 1, R * 2 + 1];
  55. for (int i = 0; i <= Z; i++)
  56. {
  57. for (int j = 0; j <= R * 2; j++)
  58. {
  59. angle40[i, j] = Convert.ToDouble(dataGridView1.Rows[i + ugol * (Z + 4) - (ugol - 1)].Cells[j].Value.ToString());
  60. }
  61. }
  62. }
  63. else if (ugol == 5)
  64. {
  65. // для угла Fi = 50
  66. Double[,] angle50 = new double[Z + 1, R * 2 + 1];
  67. for (int i = 0; i <= Z; i++)
  68. {
  69. for (int j = 0; j <= R * 2; j++)
  70. {
  71. angle50[i, j] = Convert.ToDouble(dataGridView1.Rows[i + ugol * (Z + 4) - (ugol - 1)].Cells[j].Value.ToString());
  72. }
  73. }
  74. }
  75. else if (ugol == 6)
  76. {
  77. // для угла Fi = 60
  78. Double[,] angle60 = new double[Z + 1, R * 2 + 1];
  79. for (int i = 0; i <= Z; i++)
  80. {
  81. for (int j = 0; j <= R * 2; j++)
  82. {
  83. angle60[i, j] = Convert.ToDouble(dataGridView1.Rows[i + ugol * (Z + 4) - (ugol - 1)].Cells[j].Value.ToString());
  84. }
  85. }
  86. }
  87. else if (ugol == 7)
  88. {
  89. // для угла Fi = 70
  90. Double[,] angle70 = new double[Z + 1, R * 2 + 1];
  91. for (int i = 0; i <= Z; i++)
  92. {
  93. for (int j = 0; j <= R * 2; j++)
  94. {
  95. angle70[i, j] = Convert.ToDouble(dataGridView1.Rows[i + ugol * (Z + 4) - (ugol - 1)].Cells[j].Value.ToString());
  96. }
  97. }
  98. }
  99. ..... /* весь код не влез. весь код предоставлен в прикрепленном файле.*/
  100. /* и так до */
  101. else //if (ugol == 35)
  102. {
  103. // для угла Fi = 350
  104. Double[,] angle350 = new double[Z + 1, R * 2 + 1];
  105. for (int i = 0; i <= Z; i++)
  106. {
  107. for (int j = 0; j <= R * 2; j++)
  108. {
  109. angle350[i, j] = Convert.ToDouble(dataGridView1.Rows[i + ugol * (Z + 4) - (ugol - 1)].Cells[j].Value.ToString());
  110. }
  111. }
  112. }
  113. }
  114. }

Решение задачи: «Оптимизировать код за счет сокращения количества условных операторов»

textual
Листинг программы
  1.         private static void GetValues(int Fi, int Z, int R)
  2.         {
  3.             Dictionary<int, double[,]> angles = new Dictionary<int, double[,]>();
  4.             for (int ugol = 0; ugol < Fi; ugol++)
  5.             {
  6.                 var size = ugol == 0 ? Z : Z + 1;
  7.                 double[,] angle = new double[size, R * 2 + 1];
  8.                 for (int i = 1; i <= Z; i++)
  9.                 {
  10.                     for (int j = 0; j <= R * 2; j++)
  11.                     {
  12.                         angle[i - 1, j] = Convert.ToDouble(dataGridView1.Rows[i].Cells[j].Value.ToString());
  13.                     }
  14.                 }
  15.                 angles.Add(ugol * 10, angle);
  16.             }
  17.         }

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


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

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

15   голосов , оценка 4.133 из 5

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

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

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