Оптимизировать код за счет сокращения количества условных операторов - C#
Формулировка задачи:
Доброго времени суток.
Прошу помощь в сокращение размера кода, если конечно это возможно.
Z, R, Fi - берутся из листа Excel. R = 60, Z = 68, Fi = 36.
В dataGridView1 так же загружены данные с листа Excel.
Листинг программы
- for (int ugol = 0; ugol < Fi; ugol++)
- {
- if (ugol == 0)
- {
- // для угла Fi = 0
- Double[,] angle0 = new double[Z, R * 2 + 1];
- for (int i = 1; i <= Z; i++)
- {
- for (int j = 0; j <= R * 2; j++)
- {
- angle0[i - 1, j] = Convert.ToDouble(dataGridView1.Rows[i].Cells[j].Value.ToString());
- }
- }
- }
- else if (ugol == 1)
- {
- // для угла Fi = 10
- Double[,] angle10 = new double[Z + 1, R * 2 + 1];
- for (int i = 0; i <= Z; i++)
- {
- for (int j = 0; j <= R * 2; j++)
- {
- angle10[i, j] = Convert.ToDouble(dataGridView1.Rows[i + Z + 4].Cells[j].Value.ToString());
- }
- }
- }
- else if (ugol == 2)
- {
- // для угла Fi = 20
- Double[,] angle20 = new double[Z + 1, R * 2 + 1];
- for (int i = 0; i <= Z; i++)
- {
- for (int j = 0; j <= R * 2; j++)
- {
- angle20[i, j] = Convert.ToDouble(dataGridView1.Rows[i + ugol * (Z + 4) - (ugol - 1)].Cells[j].Value.ToString());
- }
- }
- }
- else if (ugol == 3)
- {
- // для угла Fi = 30
- Double[,] angle30 = new double[Z + 1, R * 2 + 1];
- for (int i = 0; i <= Z; i++)
- {
- for (int j = 0; j <= R * 2; j++)
- {
- angle30[i, j] = Convert.ToDouble(dataGridView1.Rows[i + ugol * (Z + 4) - (ugol - 1)].Cells[j].Value.ToString());
- }
- }
- }
- else if (ugol == 4)
- {
- // для угла Fi = 40
- Double[,] angle40 = new double[Z + 1, R * 2 + 1];
- for (int i = 0; i <= Z; i++)
- {
- for (int j = 0; j <= R * 2; j++)
- {
- angle40[i, j] = Convert.ToDouble(dataGridView1.Rows[i + ugol * (Z + 4) - (ugol - 1)].Cells[j].Value.ToString());
- }
- }
- }
- else if (ugol == 5)
- {
- // для угла Fi = 50
- Double[,] angle50 = new double[Z + 1, R * 2 + 1];
- for (int i = 0; i <= Z; i++)
- {
- for (int j = 0; j <= R * 2; j++)
- {
- angle50[i, j] = Convert.ToDouble(dataGridView1.Rows[i + ugol * (Z + 4) - (ugol - 1)].Cells[j].Value.ToString());
- }
- }
- }
- else if (ugol == 6)
- {
- // для угла Fi = 60
- Double[,] angle60 = new double[Z + 1, R * 2 + 1];
- for (int i = 0; i <= Z; i++)
- {
- for (int j = 0; j <= R * 2; j++)
- {
- angle60[i, j] = Convert.ToDouble(dataGridView1.Rows[i + ugol * (Z + 4) - (ugol - 1)].Cells[j].Value.ToString());
- }
- }
- }
- else if (ugol == 7)
- {
- // для угла Fi = 70
- Double[,] angle70 = new double[Z + 1, R * 2 + 1];
- for (int i = 0; i <= Z; i++)
- {
- for (int j = 0; j <= R * 2; j++)
- {
- angle70[i, j] = Convert.ToDouble(dataGridView1.Rows[i + ugol * (Z + 4) - (ugol - 1)].Cells[j].Value.ToString());
- }
- }
- }
- ..... /* весь код не влез. весь код предоставлен в прикрепленном файле.*/
- /* и так до */
- else //if (ugol == 35)
- {
- // для угла Fi = 350
- Double[,] angle350 = new double[Z + 1, R * 2 + 1];
- for (int i = 0; i <= Z; i++)
- {
- for (int j = 0; j <= R * 2; j++)
- {
- angle350[i, j] = Convert.ToDouble(dataGridView1.Rows[i + ugol * (Z + 4) - (ugol - 1)].Cells[j].Value.ToString());
- }
- }
- }
- }
- }
Решение задачи: «Оптимизировать код за счет сокращения количества условных операторов»
textual
Листинг программы
- private static void GetValues(int Fi, int Z, int R)
- {
- Dictionary<int, double[,]> angles = new Dictionary<int, double[,]>();
- for (int ugol = 0; ugol < Fi; ugol++)
- {
- var size = ugol == 0 ? Z : Z + 1;
- double[,] angle = new double[size, R * 2 + 1];
- for (int i = 1; i <= Z; i++)
- {
- for (int j = 0; j <= R * 2; j++)
- {
- angle[i - 1, j] = Convert.ToDouble(dataGridView1.Rows[i].Cells[j].Value.ToString());
- }
- }
- angles.Add(ugol * 10, angle);
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д