Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Работа с матрицей. / 8 сообщений из 8, страница 1 из 1
24.01.2014, 00:07
    #38536184
LLezar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с матрицей.
Доброго времени суток. Очень надеюсь на вашу помощь. Пишу на VB.Net (Visual Studio 2012).
Есть квадратная матрица (размеры задаются пользователем), которую нужно вывести в RichTextBox, так чтобы получилось таблица, а не ерунда. Ну то есть одно число под одним. Ах, ну и конечно числа варьируются в кол-ве цифр. Ну я имею ввиду, что может быть 8, может 972.23.
Единственное до чего я дошел вот, больше я не могу ничего придумать (Когда матрица большая 40 на 40 допустим, с этим кодом тоже каша):

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
                For i = 1 To btN
                    For j = 1 To btN
                        Dim iRand As Integer
                        Dim oRand = New Random()
                        oRand = New Random(DateTime.Now.Millisecond)
                        iRand = oRand.Next(iMinValue, iMaxValue)
                        iArr(i, j) = iRand + Rnd() * 0.1 * 12
                        iArr(i, j) = System.Math.Round(iArr(i, j), 2)
                        LAB.Text &= iArr(i, j)
                        M = iArr(i, j)
                        PE = Len(M)
                        For k = 1 To 12 - PE
                            LAB.Text &= "  "
                        Next

                    Next
                    If i < btN Then
                        LAB.Text &= vbCr
                    End If
                Next



Модератор: Тема перенесена из форума "Visual Basic".
...
Рейтинг: 0 / 0
24.01.2014, 07:39
    #38536273
фиганыч
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с матрицей.
LLezar,

с разбегу - формируй столбцы - определяя максимальную длину числа и выравнивая по нему все остальные строки столбца.
На оптимальность кода не претиндую - но илюстрирую идею:
Код: 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.
int DF = 10;
            decimal[,] iArr = new decimal[DF, DF];
            Random r = new Random();
            for (int i = 0; i < DF; i++)
                for (int j = 0; j < DF; j++)
                {
                    iArr[i, j] = r.Next(4000);
                }

            for (int i = 0; i < DF; i++)
            {
                for (int j = 0; j < DF; j++)
                {
                    Console.Write(iArr[i,j]);
                    Console.Write(" ");
                }
                Console.WriteLine();
            }

            Console.WriteLine();
            Console.WriteLine();


            List<string[]> Res = new List<string[]>();
            for (int j = 0; j < DF; j++)
            {
                string[] str = new string[DF];
                for (int i = 0; i < DF; i++)
                {
                    str[i] = iArr[i, j].ToString();
                }
                int M = str.Select(a => a.Length).Max();
                for (int i = 0; i < DF; i++)
                {
                    str[i] = str[i].PadLeft(M, ' ');
                }
                Res.Add(str);
            }

            for (int i = 0; i < DF; i++)
            {
                for (int j = 0; j < DF; j++)
                {
                    Console.Write(Res[j][i]);
                    Console.Write(" ");
                }
                Console.WriteLine();
            }
            Console.Read();
...
Рейтинг: 0 / 0
24.01.2014, 09:06
    #38536297
LameUser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с матрицей.
Это как "круглое тащить, квадратное катить".
Зачем вам делать вывод матрицы в ричтекстбокс? Используйте какой-нибудь грид, который решит эту проблему за вас.
...
Рейтинг: 0 / 0
24.01.2014, 09:40
    #38536320
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с матрицей.
LameUser,

Наверное ж лабораторка такая. Научиться использовать форматированный вывод
...
Рейтинг: 0 / 0
24.01.2014, 09:42
    #38536322
LameUser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с матрицей.
Pallaris,

не отвечает на вопрос "зачем".
Потом приходят на работу выпускники, которые вместо нормальных задач занимались такими "армейскими" задачками...
...
Рейтинг: 0 / 0
24.01.2014, 09:47
    #38536332
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с матрицей.
LLezarНу то есть одно число под одним.Отделять числа в строке символом '\t' (табуляция).
...
Рейтинг: 0 / 0
24.01.2014, 10:13
    #38536363
Arm79
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с матрицей.
не, просто табуляция не поможет.

1) Нужно определиться, сколько места займет максимальное число из тех, что у вас есть и добавить к нему длину разделителя (например, разделитель - пробел, длина 1)
2) Обратить внимание на String.PadLeft или String.PadRight (либо String.Format("{0, максимальная_длина", Число)
3) В RichTextBox поменять шрифт на моноширинный (пример, Lucida Console)
...
Рейтинг: 0 / 0
24.01.2014, 18:06
    #38537278
LLezar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с матрицей.
Arm79,

Спасибо большое. Посидел, подумал над вашим сообщением, и ЧУДО, я это сделал =)

Прикрепляю код, вдруг кому нибудь еще пригодится:
Код: vbnet
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.
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GEN.Click
        LAB.Text = ""
        Try
            btN = Convert.ToByte(TextBox1.Text)
            iMinValue = Convert.ToInt32(TextBox2.Text)
            iMaxValue = Convert.ToInt32(TextBox3.Text)
            M = iMaxValue
            PEmax = Len(M) + 3
            If iMinValue > iMaxValue Then
                MessageBox.Show("Невозможно сгенерировать массив! Минимальное значение больше максимального значения.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Else
                For i = 1 To btN
                    For j = 1 To btN
                        Dim iRand As Integer
                        Dim oRand = New Random()
                        oRand = New Random(DateTime.Now.Millisecond)
                        iRand = oRand.Next(iMinValue, iMaxValue)
                        iArr(i, j) = iRand + Rnd() * 0.1 * 12
                        iArr(i, j) = System.Math.Round(iArr(i, j), 2)
                        LAB.Text &= iArr(i, j)
                        M = iArr(i, j)

                        'If Len(M) > PE Then
                        '    PE = Len(M)
                        'End If
                        PE = (PEmax - Len(M))
                        LAB.Text = LAB.Text.PadRight((Len(LAB.Text)) + PE + 4)
                    Next
                    If i < btN Then
                        LAB.Text &= vbCr & vbCr
                    End If
                Next
            End If
        Catch ex As Exception
            MessageBox.Show(ex.Message, "Предупреждение!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End Try
        For i = 1 To 7
            LAB.Text = LAB.Text.PadLeft(PE + 1)
        Next
    End Sub
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Работа с матрицей. / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]