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

Заполнить массив последовательными натуральными числами, идущими по спирали

09.11.2011, 23:01. Показов 4699. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
привет всем
не могу написать программу, помогите пожалуйста
можно просто алгоритм с соответствующими операциями

Дан квадратный двумерный массив n на n. Заполнить его последовательными натуральными числами, идущими по спирали.
Mассив заполнен числами от 1 по n^2
Cпираль начинается с левого верхнего угла и идет по часовой стрелке
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.11.2011, 23:01
Ответы с готовыми решениями:

Заполнить массив натуральными числами от 1 до n
Помогите реализовать программу. В массивах полный ноль): Заполнить массив натуральными числами от...

Заполнить двумерный массив указанного размера последовательными натуральными числами, двигаясь от верхнего левого элемента вправо и далее по спирали
Заполнить двумерный массив указанного размера последовательными натуральными числами, двигаясь от...

Прямоугольную матрицу заполнить последовательными чётными натуральными числами "по спирали" .
а) составить блок-схему алгоритма решения; б) написать реализующую алгоритм программу на языке...

Заполнить массив из N элементов последовательными натуральными числами
Напишите программу, которая заполняет массив из N элементов последовательными натуральными числами,...

9
Заблокирован
10.11.2011, 10:42 2
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
Private Sub Command1_Click()
    Const n = 7
    Dim s(n, n) As Integer
    Dim i As Integer, j As Integer, k As Integer, p As Integer
    Dim z As String
    i = 0
    k = 0
    p = 1
    While i < n * n
        k = k + 1
        For j = k To n - k + 1
           i = i + 1
           s(k, j) = p
           p = p + 1
        Next
        For j = k + 1 To n - k + 1
           i = i + 1
           s(j, n - k + 1) = p
           p = p + 1
        Next
        For j = n - k To k Step -1
           i = i + 1
           s(n - k + 1, j) = p
           p = p + 1
        Next
        For j = n - k To k + 1 Step -1
           i = i + 1
           s(j, k) = p
           p = p + 1
        Next
    Wend
    For i = 1 To n
        For j = 1 To n
            z = z + CStr(s(i, j)) + vbTab
        Next
        z = z + vbCrLf
    Next
    Print z
End Sub
2
es geht mir gut
11265 / 4747 / 1183
Регистрация: 27.07.2011
Сообщений: 11,438
10.11.2011, 15:38 3
Dzhej-Dzhej, а ты понял, как это по спирали, с левого верхнего угла? У нас такого не было.Хотя я и учился в политехе. Может другая программа?
Нет, я не умничаю, всё считается с левого верхнего угла, но просто у нас такого не было.

Добавлено через 13 минут
Цитата Сообщение от Dzhej-Dzhej Посмотреть сообщение
While
Уже такого не было. Do Loop.
1
Заблокирован
10.11.2011, 16:09 4
Не совсем понятно, о чем идет речь.
Цитата Сообщение от SoftIce.net Посмотреть сообщение
Dzhej-Dzhej, а ты понял, как это по спирали, с левого верхнего угла?
И по часовой стрелке.
Цитата Сообщение от SoftIce.net Посмотреть сообщение
Может другая программа?
В смысле?
Цитата Сообщение от SoftIce.net Посмотреть сообщение
Цитата Сообщение от Dzhej-Dzhej Посмотреть сообщение
While
Уже такого не было. Do Loop.
В BV6 этих While-Do-Loop'ов штук восемь, я их все не помню.
While хорош тем, что переводить с языка на язык удобно.
По секрету: код найден в интернете на паскале(стоял там While - пусть стоит), в алгоритм я не вдумывался.
2
es geht mir gut
11265 / 4747 / 1183
Регистрация: 27.07.2011
Сообщений: 11,438
10.11.2011, 16:15 5
Цитата Сообщение от Dzhej-Dzhej Посмотреть сообщение
В смысле?
В смысле другая программа обучения, может я не так выразился.
1
Dzhej-Dzhej
10.11.2011, 16:20
  #6

Не по теме:

Цитата Сообщение от SoftIce.net Посмотреть сообщение
В смысле другая программа обучения, может я не так выразился.
А я терялся в догадках: IDE или код:).
По VB у меня программы обучения - исходники, которые нужно править(поддержка, как-бы) и интернет.

1
es geht mir gut
11265 / 4747 / 1183
Регистрация: 27.07.2011
Сообщений: 11,438
10.11.2011, 16:45 7
Цитата Сообщение от Dzhej-Dzhej Посмотреть сообщение
И по часовой стрелке
С середины - понятно, а с краю_ никак.

Добавлено через 2 минуты
Цитата Сообщение от Dzhej-Dzhej Посмотреть сообщение
А я терялся в догадках: IDE или код
А у тебя программа- это значит программа(бзик программера)

Добавлено через 11 минут
Цитата Сообщение от Dzhej-Dzhej Посмотреть сообщение
По VB у меня программы обучения - исходники, которые нужно править(поддержка, как-бы) и интернет
И меня тоже учил Сергей Дмитриевич Шаталин(Низкий поклон ему).

Добавлено через 8 минут
Цитата Сообщение от SoftIce.net Посмотреть сообщение
И меня тоже учил Сергей Дмитриевич Шаталин(Низкий поклон ему
Он также выражался.
1
Заблокирован
10.11.2011, 16:45 8
Цитата Сообщение от SoftIce.net Посмотреть сообщение
С середины - понятно, а с краю_ никак.
Разница в том, что в одном случае спираль расширяется, а в другом сужается.
Здесь проходим по столбцу\строке и поворачиваем, когда доходим до конца столбца\строки или до заполненной ячейки.
Примерно так.
1
es geht mir gut
11265 / 4747 / 1183
Регистрация: 27.07.2011
Сообщений: 11,438
10.11.2011, 17:00 9
Добавлено через 6 минут
Цитата Сообщение от Dzhej-Dzhej Посмотреть сообщение
Разница в том, что в одном случае спираль расширяется, а в другом сужается.
Здесь проходим по столбцу\строке и поворачиваем, когда доходим до конца столбца\строки или до заполненной ячейки
Кривая какая то спираль, но сделать можно.Памирыч, мы не флудим.
1
Заблокирован
11.11.2011, 08:07 10
Лучший ответ Сообщение было отмечено как решение

Решение

Сделано в VBA, правда
Но S As Range(= Selection) по сути тот же самый массив, что и S(1 to N,1 to N)
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Sub main()
Dim S As Range, N%, C%, R%, I%, J%, dC%, dR%
Set S = Selection: S.ClearContents
N = S.Columns.Count
C = 1: R = 1: J = 1: S(1, 1) = 1
For I = 1 To 2 * N - 1
  dC = (2 - I Mod 4) Mod 2
  dR = (2 - (I - 1) Mod 4) Mod 2
  Do
    If C + dC > N Or C + dC < 1 Then Exit Do
    If R + dR > N Or R + dR < 1 Then Exit Do
    If S(R + dR, C + dC) Then Exit Do
    C = C + dC
    R = R + dR
    J = J + 1
    S(R, C) = J
  Loop
Next I
End Sub
Миниатюры
Заполнить массив последовательными натуральными числами, идущими по спирали  
3
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.11.2011, 08:07
Помогаю со студенческими работами здесь

Заполнить массив из N элементов в обратном порядке последовательными натуральными числами
#include &lt;iostream&gt; using namespace std; int main () { int x, n, a; cin &gt;&gt; x &gt;&gt; n; ...

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

Заполнить матрицу последовательными натуральными числами
1.Сформировать матрицу по следующему правилу 1 2 3 4 5 6 7 8 9 10 11 12 13 ...

Заполнить квадратную матрицу натуральными числами по спирали
Составить программу, которая заполняет квадратную матрицу порядка n натуральными числами 1, 2, 3,...


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

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

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