0 / 0 / 0
Регистрация: 10.08.2010
Сообщений: 4
1

Заполнить матрицу множеством натуральных чисел по спирали против часовой стрелки

10.08.2010, 14:08. Показов 4376. Ответов 7
Метки нет (Все метки)

заполнить матрицу NxN множество натуральных чисел по спирали против часовой стрелке по VBA
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.08.2010, 14:08
Ответы с готовыми решениями:

Заполнить матрицу по спирали против часовой стрелки
Ребят,помогите пожалуйста. Нужно заполнить матрицу числами по спирали против часовой стрелки....

Заполнить матрицу по спирали, закрученной по часовой стрелке
Добрый день! Прошу помощи, ссылок на примерные задачи, ссылки почитать как можно решить данную...

Нужно заполнить порядковыми номерами квадратную матрицу NxN по спирали по часовой стрелке
Нужно заполнить порядковыми номерами квадратную матрицу NxN по спирали по часовой стрелке! Помогите...

Изобразить вращение против часовой стрелки отрезка длиной R вокруг точки с координатами (x,y)
Не работает программа. В чем может быть ошибка? SCREEN 12 DECLARE SUB per() dim as integer...

7
исследователь
325 / 104 / 3
Регистрация: 18.03.2010
Сообщений: 1,079
Записей в блоге: 2
10.08.2010, 16:00 2
Цитата Сообщение от Dante123 Посмотреть сообщение
заполнить матрицу NxN множество натуральных чисел по спирали против часовой стрелке по VBA
Вопросы есть:
какие числа, откуда их брать, заполнить на листе excele или в массиве
0
0 / 0 / 0
Регистрация: 10.08.2010
Сообщений: 4
10.08.2010, 18:07  [ТС] 3
заполнить порядковыми номерами квадратную матрицу NxN по спирали против часовой стрелки.

Добавлено через 3 минуты
и нужно заполнить на листе excele, памоги плиз
0
7 / 7 / 2
Регистрация: 12.07.2010
Сообщений: 30
10.08.2010, 18:15 4
я специалист в Delphi но суть алгоритма раскажу
4 переменніх merge_top=1, merge_left=1 merge_right=N merge_bottom=N
и c=1;
Delphi
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
while c<=n*n do
   begin
   For i:=merge_top to merge_bottom do
      begin
      A[i,Merge_left]:=c;
      c:=c+1;
      end;  
   Merge_left:=Merge_left+1;
   For i:=Merge_left to Merge_right do
      begin
      A[Merge_bottom,i]:=c;
      c:=c+1;
      end;  
   Merge_bottom:=Merge_bottom-1;
   For i:=Merge_bottom downto Merge_top do
      begin
      A[i,Merge_right]:=c;
      c:=c+1;
      end;  
   Merge_right:=Merge_right-1;
   For i:=Merge_right downto Merge_left do
      begin
      A[Merge_top,i]:=c;
      c:=c+1;
      end;  
   Merge_top:=Merge_top+1;
   end; // c<=N*N Вычерчили квадрат если есть полость в нутри вычерчим еще квадрат  т.д.
1
0 / 0 / 0
Регистрация: 10.08.2010
Сообщений: 4
10.08.2010, 18:54  [ТС] 5
спасибо щас папробую

Добавлено через 14 минут
и всетаки опыта и знания нехвотает доделать прогу

Добавлено через 8 минут
есть программа
Цитата Сообщение от Dante123 Посмотреть сообщение
заполнить порядковыми номерами квадратную матрицу NxN по спирали ПО часовой стрелки.
Visual Basic
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
50
51
52
53
54
55
56
Sub Spiral()
   Dim N As Byte, i As Byte, m As Byte
   Dim num As Integer
   Dim n_spir As Integer
   Dim r As Range
   
   Cells.ClearContents
   Cells.Borders.LineStyle = xlNone
   Set r = Range("B2")
   
   num = 1
   N = Val(InputBox("Введи N:", , 10))
   If N = 0 Then Exit Sub
   
   ReDim a(1 To N, 1 To N) As Integer
 
   For n_spir = 0 To N \ 2 - 1
                   m = N - 1 - 2 * n_spir
      For i = 1 To m
         a(n_spir + 1, i + n_spir) = num: num = num + 1 'вправо
      Next i
      
      For i = 1 To m
         a(i + n_spir, N - n_spir) = num: num = num + 1   'вниз
      Next i
      
      For i = 1 To m
         a(N - n_spir, N - n_spir - i + 1) = num: num = num + 1     'влево
      Next i
      
      For i = 1 To m
         a(N - n_spir - i + 1, n_spir + 1) = num: num = num + 1  'вверх
      Next i
   Next n_spir
   If N Mod 2 = 1 Then a(N \ 2 + 1, N \ 2 + 1) = N ^ 2
   
   r.Resize(N, N) = a:   формат r, N
End Sub
 
Sub формат(r As Range, N As Byte)
   Dim i As Byte, n_spir As Byte
   
   If N Mod 2 = 0 Then n_spir = N \ 2 Else n_spir = N \ 2 + 1
   For i = 0 To n_spir - 1
      With r.Offset(i, i).Resize(N - 2 * i, N - 2 * i)
         .Borders(xlEdgeLeft).Weight = xlMedium
         .Borders(xlEdgeTop).Weight = xlMedium
         .Borders(xlEdgeBottom).Weight = xlMedium
         .Borders(xlEdgeRight).Weight = xlMedium
      End With
      With r.Offset(i, i)
         .Borders(xlEdgeBottom).Weight = xlMedium
         If i >= 1 Then .Borders(xlEdgeLeft).LineStyle = xlNone
      End With
   Next i
End Sub

можите памоч переделать ее чтобы заполняла порядковыми номерамиквадратную матрицу NxN по спирали против часовой стрелки.
0
Частенько бываю
749 / 330 / 42
Регистрация: 20.06.2007
Сообщений: 854
11.08.2010, 14:20 6
Перед запуском макроса выдели квадратный диапазон ячеек
Visual Basic
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
Sub Spiral_Fill()
Dim N As Integer, i As Integer, j As Integer, iNumOfC As Integer, iIter As Integer
iIter = 1
With Selection
N = .Rows.Count
For iNumOfC = 1 To Int(N / 2 + 0.5)
    'Ëåâàÿ ñòîðîíà
    j = iNumOfC
    For i = iNumOfC To N - (iNumOfC - 1)
        .Cells(i, j) = iIter
        iIter = iIter + 1
    Next
    'Íèæíÿÿ ñòîðîíà
    i = N - (iNumOfC - 1)
    For j = iNumOfC + 1 To N - (iNumOfC - 1)
        .Cells(i, j) = iIter
        iIter = iIter + 1
    Next
    'Ïðàâàÿ ñòîðîíà
    j = N - (iNumOfC - 1)
    For i = N - iNumOfC To iNumOfC Step -1
        .Cells(i, j) = iIter
        iIter = iIter + 1
    Next
    'Âåðõíÿÿ ñòîðîíà
    i = iNumOfC
    For j = N - iNumOfC To i + 1 Step -1
        .Cells(i, j) = iIter
        iIter = iIter + 1
    Next
Next
End With
End Sub
1
7 / 7 / 2
Регистрация: 12.07.2010
Сообщений: 30
11.08.2010, 15:08 7
Visual Basic
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
Sub Spiral_Fill()
Dim N As Integer, i As Integer, m_l as integer, m_t as integer, m_b as integer, m_r as integer, Iter As Integer
Iter = 1
 
N = Val(InputBox("Введи N:", , 10))
m_l=1
m_t=1
m_r=N
m_b=N
 
If N = 0 Then Exit Sub
 
ReDim a(1 To N, 1 To N) As Integer
 
do while iter<N*N 
For i = m_t To m_b
'Левая сторона
A(m_l,i)=iter
iter=iter+1
Next i 
m_l=m_l+1
For i = m_l To m_r
'нижняя сторона
A(i,m_b)=iter
iter=iter+1
Next i 
m_b=m_b-1
For i = m_b To m_t step -1
'правая сторона
A(m_r,i)=iter
iter=iter+1
Next i 
m_r=m_r-1
For i = m_r To m_l step -1
'Верхняя сторона
A(i,m_t)=iter
iter=iter+1
Next i 
m_t=m_t+1
loop
' тут вывод вставь куда тебе надо из массива А
End Sub
1
0 / 0 / 0
Регистрация: 10.08.2010
Сообщений: 4
13.08.2010, 22:20  [ТС] 8
всем Огромное спасибо , все работает
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.08.2010, 22:20
Помогаю со студенческими работами здесь

Заполнить матрицу по спирали против часовой стрелки
помогите поменять циклы в коде и сделать такую спираль: 1 32 31 30 29 28 27 26 25 2 33 56 55 54...

Заполнить матрицу по спирали, начинающейся в левом верхнем углу, против часовой стрелки (+ блок схема)
Матрицу m x n заполнить натуральными числами от 1 до mn по спирали, начинающейся в левом верхнем...

Массив A[2*n+1][2*n+1] заполнить по спирали против часовой стрелки, начиная из центра
Можете пожалуйста помочь, я должен решить задачки и вот одна из них: Дано число n. Создайте...

Заполнить двумерный массив цифрами по спирали, против часовой стрелки
Доброго времени суток. Вот задание : Заполнить двумерный массив цифрами по спирали, против...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru