type dtree ukaz as integer ' spisok() as integer ' end type
Dim masiv(N-) As dtree ' = N-1 For ii = 1 To N - 1 masiv(ii).ukaz = 1 ReDim masiv(ii).spisok(N + 1 - ii) ' For kk = 1 To (N + 1 - ii) masiv(ii).spisok(kk) = kk + ii - 1 Next Next
For ii = 1 To N-2 massiv(ii).spisok(ukaz) Next
+ massiv(N-1).spisok(1) + massiv(N-1).spisok(2) + massiv(N-1).spisok(2) + massiv(N-1).spisok(1)
Option Explicit Type dtree tek_elem_ukaz As Integer spisok() As Integer End Type Dim masiv() As dtree Dim start_print As Integer Dim N As Integer Sub generate() Dim ii As Integer, kk As Integer, jj As Integer Dim uroven As Integer 1.Cells.Clear N = 5 start_print = 1 ReDim masiv(N - 1) ' For ii = 1 To N - 1 masiv(ii).tek_elem_ukaz = 1 ReDim masiv(ii).spisok(N + 1 - ii) For kk = 1 To (N + 1 - ii) masiv(ii).spisok(kk) = kk + ii - 1 Next Next uroven = N - 2 Do ' Call print_rezult(uroven) ' If masiv(uroven).tek_elem_ukaz <= (N - uroven) Then ' ' masiv(uroven).tek_elem_ukaz = masiv(uroven).tek_elem_ukaz + 1 ' Call zap_niz(uroven) Else ' , Do While uroven > 1 And masiv(uroven).tek_elem_ukaz > (N - uroven) uroven = uroven - 1 Loop If uroven = 1 And masiv(1).tek_elem_ukaz = N Then MsgBox "stop calc" Exit Sub ' End If ' masiv(uroven).tek_elem_ukaz = masiv(uroven).tek_elem_ukaz + 1 Call zap_niz(uroven) ' Do While uroven < N - 2 uroven = uroven + 1 masiv(uroven + 1).tek_elem_ukaz = 1 ' For kk = 2 To N - uroven + 1 masiv(uroven + 1).spisok(kk - 1) = masiv(uroven).spisok(kk) Next Loop End If Loop End Sub Sub print_rezult(ukaz As Integer) Dim ii As Integer For ii = 1 To ukaz With masiv(ii) 1.Cells(start_print, ii) = .spisok(.tek_elem_ukaz) 1.Cells(start_print + 1, ii) = .spisok(.tek_elem_ukaz) End With Next With masiv(ukaz + 1) 1.Cells(start_print, ukaz + 1) = .spisok(1) 1.Cells(start_print, ukaz + 2) = .spisok(2) start_print = start_print + 1 1.Cells(start_print, ukaz + 1) = .spisok(2) 1.Cells(start_print, ukaz + 2) = .spisok(1) start_print = start_print + 1 End With End Sub Sub zap_niz(ukaz As Integer) ' Dim ii As Integer, wsp1 As Integer ' wsp1 = masiv(ukaz).tek_elem_ukaz masiv(ukaz + 1).tek_elem_ukaz = 1 ' For ii = 1 To wsp1 - 1 masiv(ukaz + 1).spisok(ii) = masiv(ukaz).spisok(ii) Next For ii = wsp1 + 1 To N - ukaz + 1 masiv(ukaz + 1).spisok(ii - 1) = masiv(ukaz).spisok(ii) Next End Sub
Source: https://habr.com/ru/post/248493/