powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Матрица по спирали, рекурсия
7 сообщений из 7, страница 1 из 1
Матрица по спирали, рекурсия
    #37796140
Anekto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть программа, заполняющая матрицу по спирали в экселе, вопрос такой, как можно укоротить данный код, убрать что-то лишнее или сделать более компактно, или вообще по-другому, чем меньше строчек выйдет, тем лучше.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Dim n As Integer
Sub Spiral(i As Integer, j As Integer, di As Integer, dj As Integer, value As Integer)
    If (i > 1 And i < n + 2 And j > 1 And j <= n + 1 And Not (Cells(i, j) > 0)) Then
            Cells(i, j) = value
            Spiral i + di, j + dj, di, dj, value + 1
    Else
        If (value <= n * n) Then
            If (di = 1 And dj = 0) Then Spiral i - 1, j - 1, 0, -1, value
            If (di = 0 And dj = 1) Then Spiral i + 1, j - 1, 1, 0, value
            If (di = -1 And dj = 0) Then Spiral i + 1, j + 1, 0, 1, value
            If (di = 0 And dj = -1) Then Spiral i - 1, j + 1, -1, 0, value
        End If
    End If
End Sub
Sub BuildSpiral()
    n = Cells(1, 1)
    ActiveSheet.UsedRange.Clear
    Cells(1, 1).value = n
    Spiral 2, 2, 0, 1, 1
End Sub
...
Рейтинг: 0 / 0
Матрица по спирали, рекурсия
    #37796143
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, собственно можно просто убрать рекурсию, зачем она здесь - неясно.
...
Рейтинг: 0 / 0
Матрица по спирали, рекурсия
    #37796150
Anekto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

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

Просто важно сделать это в как можно меньшее число строк кода.
...
Рейтинг: 0 / 0
Матрица по спирали, рекурсия
    #37796159
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну примерно строк шесть, For, Next, строки три на вычисление новой ячейки (можно одной строкой обойтись в принципе, но будет длинное условие с повторами), и строка занесения числа в ячейку
...
Рейтинг: 0 / 0
Матрица по спирали, рекурсия
    #37796171
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а можно твои четыре IF-а одной строкой через ElseIf записать и тоже будет коротко
...
Рейтинг: 0 / 0
Матрица по спирали, рекурсия
    #37796250
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anekto,
это
Код: vbnet
1.
2.
3.
4.
If (di = 1 And dj = 0) Then Spiral i - 1, j - 1, 0, -1, value
If (di = 0 And dj = 1) Then Spiral i + 1, j - 1, 1, 0, value
If (di = -1 And dj = 0) Then Spiral i + 1, j + 1, 0, 1, value
If (di = 0 And dj = -1) Then Spiral i - 1, j + 1, -1, 0, value

эквивалентно этому
Код: vbnet
1.
Spiral i - di + dj, j - di - dj, dj, -di, value
...
Рейтинг: 0 / 0
Матрица по спирали, рекурсия
    #37796423
Anekto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
скукотища, и правда, спасибо большое.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Матрица по спирали, рекурсия
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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