powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / циклы, рекуррсия
9 сообщений из 9, страница 1 из 1
циклы, рекуррсия
    #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
циклы, рекуррсия
    #36591284
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Массив произвольной размерности - примерно так:
Код: plaintext
1.
2.
Dim a() As Integer, NumA As Integer
NumA = CInt(InputBox("Введите размер массива"))
ReDim a(NumA)

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

ну а формула для s переделывается чисто математическими способами
и тогда количество вложенных циклов не будет иметь значения.
...
Рейтинг: 0 / 0
циклы, рекуррсия
    #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
циклы, рекуррсия
    #36591649
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyВы путаете размерность с размером.

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

Как это обойти, мы обсуждали тут. Но ТС это, скорее всего, пока не требуется.
...
Рейтинг: 0 / 0
циклы, рекуррсия
    #36591659
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фух, не пугай так больше)))
...
Рейтинг: 0 / 0
циклы, рекуррсия
    #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
циклы, рекуррсия
    #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
9 сообщений из 9, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / циклы, рекуррсия
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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