Looks
1

В двумерном массиве появляются лишние элементы

02.02.2013, 17:42. Показов 527. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, у меня задание "В одномерном массиве с четным количеством элементов (2N) находятся координаты N точек плоскости. Они располагаются в следующем порядке: x1, y1, х2, y2, x3, y3, и т.д. Определить три точки, которые являются вершинами треугольника, для которого разность числа точек вне его и внутри является минимальной."
Этой самой кнопкой
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
private void button1_Click(object sender, EventArgs e)
        {
            float[] arr;
            float[,] arr2;
            int   i, k = 0, k1=0, k2=0, j = 0, j1, j2, count = 0;
            double a, b, c, x1, x2, x3, y1, y2, y3;
 
            if (((textBox1.Text != "") && (textBox1.Text != "-")))
            {
                    string[] str = textBox1.Text.Split(' ');
                    for (i = 0; i < str.Length; i++)
                        if (str[i].Length != 0)
                            count++;
                    if (count % 2 == 0)
                    {
                        arr = new float[count];
                        count = 0;
                        for (i = 0; i < str.Length; i++)
                            if (str[i].Length != 0)
                            {
                                arr[count] = Convert.ToSingle(str[i]);
                                count++;
                            }
                        arr2 = new float[(count / 2)+1, 2];
                        for (i = 0; i < count; i+=2)
                            {
                            arr2[i/2 , 0] = arr[i];
                            arr2[i/2 , 1] = arr[i+1];
                            j++;
                            }
                        for (i = 0; k2 < j-2; i++)
                        {
                            x1 = arr2[i, 0];
                            y1 = arr2[i, 1];
                            for (j1 = i+1; k1 < j - i; j1++)
                            {
                                x2 = arr2[j1, 0];  
                                y2 = arr2[j1, 1];
                                for (j2 = j1+1; k < j - j1; j2++)
                                {
                                    x3 = arr2[j2, 0];
                                    y3 = arr2[j2, 1];
                                    a = Math.Pow((Math.Pow(x2 - x1, 2) + Math.Pow(y2 - y1, 2)), 1 / 2);
                                    b = Math.Pow((Math.Pow(x3 - x2, 2) + Math.Pow(y3 - y2, 2)), 1 / 2);
                                    c = Math.Pow((Math.Pow(x3 - x1, 2) + Math.Pow(y3 - y1, 2)), 1 / 2);
                                    if ((a < b + c) && (b < a + c) && (c < b + a))
                                    {
                                        ver1.Text = Convert.ToString(x1) + " " + Convert.ToString(y1);
                                        ver2.Text = Convert.ToString(x2) + " " + Convert.ToString(y2);
                                        ver3.Text = Convert.ToString(x3) + " " + Convert.ToString(y3);
                                    }
                                    k++;
                                }
                                k1++;
                            }
                            k2++;
                        }
                        
                    }
                    else
                        MessageBox.Show("Введите обе координаты для каждой точки", "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
совершается основное действие ,а именно чтение координат из строки, если координат введено четное количество, то заполняем одномерный массив, потом переводим в двумерный, где arr[i,0] - x, а arr[i,1] - y(можно было сразу записывать в двумерный, но это прихоть препода, не знаю, зачем так). Так вот, суть в том, что если у меня, например, 5 координат, то есть 5 x и 5 y, и, соответственно, последние элементы должны быть arr2[4,0] и arr2[4,1], но при отладке оказалось, что в конце двумерного массива arr2 появляются два лишних нулевых элемента arr2[5,0] и arr2[5,1], то есть, как мне кажется, проблема именно в этом куске
C#
1
2
3
4
5
6
 for (i = 0; i < count; i+=2)
                            {
                            arr2[i/2 , 0] = arr[i];
                            arr2[i/2 , 1] = arr[i+1];
                            j++;
                            }
Так же есть некоторые сомнения по определению этих трех точек, проверьте, пожалуйста, мой алгоритм хотя бы немного верный?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
for (i = 0; k2 < j-2; i++)
                        {
                            x1 = arr2[i, 0];
                            y1 = arr2[i, 1];
                            for (j1 = i+1; k1 < j - i; j1++)
                            {
                                x2 = arr2[j1, 0];  
                                y2 = arr2[j1, 1];
                                for (j2 = j1+1; k < j - j1; j2++)
                                {
                                    x3 = arr2[j2, 0];
                                    y3 = arr2[j2, 1];
                                    a = Math.Pow((Math.Pow(x2 - x1, 2) + Math.Pow(y2 - y1, 2)), 1 / 2);
                                    b = Math.Pow((Math.Pow(x3 - x2, 2) + Math.Pow(y3 - y2, 2)), 1 / 2);
                                    c = Math.Pow((Math.Pow(x3 - x1, 2) + Math.Pow(y3 - y1, 2)), 1 / 2);
                                    if ((a < b + c) && (b < a + c) && (c < b + a))
                                    {
                                        ver1.Text = Convert.ToString(x1) + " " + Convert.ToString(y1);
                                        ver2.Text = Convert.ToString(x2) + " " + Convert.ToString(y2);
                                        ver3.Text = Convert.ToString(x3) + " " + Convert.ToString(y3);
                                    }
                                    k++;
                                }
                                k1++;
                            }
                            k2++;
                        }
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.02.2013, 17:42
Ответы с готовыми решениями:

В Chart появляются лишние точки
Ставлю на график просто точку: this.chart1.Series.Points.AddXY(1, 1); На графике появляются...

Не появляются элементы на ListView
Добавил ListView коллекцию, она отображается на форме, но когда запускаю программу ничего не...

При запуске формы не появляются все элементы
Запускаю форму, но на ней не появляются кнопки и календарь. Подробнее на изображении

Min в двумерном массиве
Вот код двумерного массива: using System; using System.Collections.Generic; using...

0
02.02.2013, 17:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.02.2013, 17:42
Помогаю со студенческими работами здесь

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

В двумерном массиве заменить элементы побочной диагонали на 1, остальные элементы на 0
program d; var N, M: integer; a: array of real; begin N:=5; for var i:=1 to N do begin for...

В двумерном массиве найти элементы, что введет пользователь и потом эти элементы сплюсовать и вывести
Здравствуйте товарищи знатоки! Передомной постал такой вопрос: Надо в двумерном массиве найти...

Сложить элементы в двумерном массиве
В двумерном массиве хранится информация о количестве учеников в каждом классе каждой параллели...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru