powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Работа с матрицей.
8 сообщений из 8, страница 1 из 1
Работа с матрицей.
    #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
Работа с матрицей.
    #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
Работа с матрицей.
    #38536297
LameUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это как "круглое тащить, квадратное катить".
Зачем вам делать вывод матрицы в ричтекстбокс? Используйте какой-нибудь грид, который решит эту проблему за вас.
...
Рейтинг: 0 / 0
Работа с матрицей.
    #38536320
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LameUser,

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

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

1) Нужно определиться, сколько места займет максимальное число из тех, что у вас есть и добавить к нему длину разделителя (например, разделитель - пробел, длина 1)
2) Обратить внимание на String.PadLeft или String.PadRight (либо String.Format("{0, максимальная_длина", Число)
3) В RichTextBox поменять шрифт на моноширинный (пример, Lucida Console)
...
Рейтинг: 0 / 0
Работа с матрицей.
    #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
8 сообщений из 8, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Работа с матрицей.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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