Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / циклы, рекуррсия / 9 сообщений из 9, страница 1 из 1
21.04.2010, 23:07
    #36591271
cold_as_stone
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
циклы, рекуррсия
очень нужна ваша помощь!
я в VBA новичок и после нескольких дней беспрерывного программирования голова идет кругом. вообщем, запуталась я с рекурсиями и вложенными циклами.
есть такие циклы
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
For i1=  0  To t
        For i2 =  0  To t
            For i3 =  0  To t
                s = l - a1 * i1 - a2 * i2 - a3 * i3
                If s >=  0  And s < m Then
                    Cells(r,  1 ).Value = r -  1 
                    Cells(r,  2 ).Value = i1
                    Cells(r,  3 ).Value = i2
                    Cells(r,  4 ).Value = i3
                    Cells(r,  5 ).Value = s
                    r = r +  1 
                End If
            Next i3
        Next i2
    Next i1
.
значения r, a1, a2 и a3 вводяться в программе ранее.
как распространить это на случай, когда количество ai-ых неизвестно заранее, а вводиться пользователем с клавиатуры. и из аi-ых составляется массив?.. как тогда сделать циклы??..

заранее очень благодарна
...
Рейтинг: 0 / 0
21.04.2010, 23:16
    #36591284
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
циклы, рекуррсия
Массив произвольной размерности - примерно так:
Код: plaintext
1.
2.
Dim a() As Integer, NumA As Integer
NumA = CInt(InputBox("Введите размер массива"))
ReDim a(NumA)

Что касается циклов, вопрос не очень понятен, так как "а" у вас участвует только в формуле и никак не влияет на сами циклы, так что уточните вопрос.
...
Рейтинг: 0 / 0
21.04.2010, 23:19
    #36591290
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
циклы, рекуррсия
И вообще, имхо, вам тут вложенные циклы не особо нужны.
Код: plaintext
For i=  0  To t ^  3 

ну а формула для s переделывается чисто математическими способами
и тогда количество вложенных циклов не будет иметь значения.
...
Рейтинг: 0 / 0
22.04.2010, 10:01
    #36591641
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
циклы, рекуррсия
Shocker.ProМассив произвольной размерности - примерно так:
Код: plaintext
1.
2.
Dim a() As Integer, NumA As Integer
NumA = CInt(InputBox("Введите размер массива"))
ReDim a(NumA)
Вы путаете размерность с размером. Ваш пример задает размер, а не размерность. Размерность это a(b, c, … x). Синтаксические особенности VB не дают возможности задавать размерность произвольно.
...
Рейтинг: 0 / 0
22.04.2010, 10:03
    #36591649
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
циклы, рекуррсия
AntonariyВы путаете размерность с размером.

Antonariy, прости засранца. Конечно же одномерный массив произвольного размера , а не размерности, я не путаю, я задумался....
...
Рейтинг: 0 / 0
22.04.2010, 10:06
    #36591656
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
циклы, рекуррсия
Antonariyособенности VB не дают возможности задавать размерность произвольно.

Как это обойти, мы обсуждали тут. Но ТС это, скорее всего, пока не требуется.
...
Рейтинг: 0 / 0
22.04.2010, 10:09
    #36591659
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
циклы, рекуррсия
Фух, не пугай так больше)))
...
Рейтинг: 0 / 0
22.04.2010, 21:03
    #36593419
cold_as_stone
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
циклы, рекуррсия
вопрос был в том, что нужно сделать вложенные циклы, количество которых заранее неизвестно, вводиться пользователем с клавиатуры. (количество i-jых)
то есть
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
For i1= 1  to n 
      For i2= 1  to n
            For i3= 1  to n
..... 
            Next i3  
      Next i2
Next i1
.

я так думаю, что нужно процедуру написать, но у меня не получается=//

п.с. всем отписавшимся - спасибо!))
...
Рейтинг: 0 / 0
22.04.2010, 22:11
    #36593511
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
циклы, рекуррсия
cold_as_stoneвопрос был в том, что нужно сделать вложенные циклы, количество которых заранее неизвестно

Еще раз.
Вы пытаетесь обойти n -мерный куб с гранью t , с помощью n вложенных циклов, используя индексы каждого измерения от i(1) до i(n) . Так как количество циклов, заранее неизвестно, я предлагаю обойти весь куб одним циклом, соответственно от j=0 до t^n-1 .

Вам на промежуточном этапе будут нужны значения i(1), i(2).... i(n) (которых нет в одномерном цикле). Но они могут быть вычислены нехитрой формулой из j (то есть из индекса, который обходит весь куб по всем измерениям).

Не пытайтесь уперто решить задачу тем способом, который видите вы, взгляните на реализацию шире.

P.S. Вы изменили имя переменной (с первого сообщения с t на n), лучше давайте условимся о терминологии:
n - количество измерений куба
t - сторона куба
j - сквозной индекс
i() - индексы в разрезе каждого измерения
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / циклы, рекуррсия / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]