Сформировать из двумерного массива одномерный в форме спирали - 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д