Сформировать из двумерного массива одномерный в форме спирали - VBA

Узнай цену своей работы

Формулировка задачи:

Дан двумерный массив, сделать из него одномерный массив в форме спирали дан например: 1 2 3 4 5 6 7 8 9 получится должно: 1 2 3 6 9 8 7 4 5 должно работать для любой размерности.

Решение задачи: «Сформировать из двумерного массива одномерный в форме спирали»

textual
Листинг программы
Sub SpiraleArray()
    Dim I%, R%, C% 'Г±Г·ВёГІГ·ГЁГЄ ГЁ ГІГҐГЄГіГ№ГЁГҐ êîîðäèГ*Г*ГІГ» Гў Г¬Г*Г±Г±ГЁГўГҐ
    Dim cR%, cC% 'ГЄ-ГўГ® ñòðîê ГЁ ñòîëáöîâ Г¬Г*Г±Г±ГЁГўГ*
    Dim dR%, dC 'ïðèðГ*Г№ГҐГ*ГЁГї ГЇГ® ñòðîêГ*Г¬ ГЁ ñòîëáöГ*Г¬ Г± ó÷¸òîì ГЄ-ГўГ* ïîâîðîòîâ
    Dim P% 'Г±Г·ВёГІГ·ГЁГЄ ïîâîðîòîâ
    Dim a2(), b1()
    Cells.ClearContents 'î÷èñòêГ* ïîëÿ
     
    cR = InputBox("Ñòðîê?") 'Г§Г*Г¤Г*ВёГ¬ Г°Г*çìåðû
    cC = InputBox("Ñòîëáöîâ?") 'Г¬Г*Г±Г±ГЁГўГ*
    ReDim a2(1 To cR, 1 To cC)
    ReDim b1(1 To cR * cC)
    'Г§Г*ïîëГ*ГЁГІГј äâóõìåðГ*ûé Г¬Г*Г±Г±ГЁГў
    For R = 1 To cR
        For C = 1 To cC
            a2(R, C) = Int(100 * Rnd) + 1
        Next
    Next
    Cells(1, 1).Resize(cR, cC) = a2
    'Г§Г*ïîëГ*ГЁГІГј îäГ*îìåðГ*ûé Г¬Г*Г±Г±ГЁГў ГЇГ® Г±ГЇГЁГ°Г*ëè
    R = 1: C = 1 'Г*Г*Г·Г*ëüГ*ûå êîîðäèГ*Г*ГІГ»
    dC = 1: dR = 0 'Г*Г*Г·Г*ëüГ*ûå ïðèðГ*Г№ГҐГ*ГЁГї
    For I = 1 To cR * cC 'öèêë ГЇГ® ГўГ±ГҐГ¬ ÿ÷åéêГ*Г¬ Г¬Г*Г±Г±ГЁГўГ*
        b1(I) = a2(R, C)
        a2(R, C) = 0 'äëÿ ГЄГ®Г*òðîëÿ Г§Г*Г*ГҐГ±ГҐГ*ГЁГї Гў Г¬Г*Г±Г±ГЁГў b1
        If R + dR > cR Or R + dR < 1 Or C + dC > cC Or C + dC < 1 Then
            P = P + 1 'ñëåäóþùèì õîäîì âûïГ*Г¤Г*ГҐГ¬ ГЁГ§ Г¬Г*Г±Г±ГЁГўГ*->ïîâîðГ*Г·ГЁГўГ*ГҐГ¬
        ElseIf a2(R + dR, C + dC) = 0 Then
            P = P + 1 'ñëåäóþùèì õîäîì ïîïГ*Г¤Г*ГҐГ¬ Гў îáГ*óëåГ*Г*îå Г§Г*Г*Г·ГҐГ*ГЁГҐ->ïîâîðГ*Г·ГЁГўГ*ГҐГ¬
        End If
        dC = (2 - (P + 1) Mod 4) Mod 2 'ïåðåñ÷èòûâГ*ГҐГ¬ ïðèðГ*Г№ГҐГ*ГЁГї
        dR = (2 - P Mod 4) Mod 2 'Г± ó÷¸òîì ГЄ-ГўГ* ïîâîðîòîâ
        C = C + dC 'Г*îâûå
        R = R + dR 'êîîðäèГ*Г*ГІГ»
    Next I
    Cells(cR + 2, 1).Resize(1, UBound(b1)) = b1
End Sub

ИИ поможет Вам:


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

Оцени полезность:

8   голосов , оценка 3.375 из 5
Похожие ответы