Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / проходка цикла циклов / 7 сообщений из 7, страница 1 из 1
10.07.2003, 11:45
    #32204179
yuniki
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проходка цикла циклов
Задачка следующая :
Есть матрица (Nx4):
Код: plaintext
1.
2.
3.
4.
5.
 1 -й столбец ;  2 -й столбец ;  3 -й столбец;  4 -й столбец
x                ;  хНач           ; xКон          ; xТекущее 
y                ;  yНач           ; yКон          ; уТекущее 
z                ;  zНач           ; zКон          ; zТекущее 
...              ;  ...Нач          ; ...Кон        ; ...Текущее 

Ее N строчек задают N циклов с их параметрами(Например, в 1-м цикле некая переменная x должна изменяться от xНач до xКон Значений с шагом 1 и текущее ее значение = xТекущее). Первый столбец приведен для определенности параметра цикла.
Нужно пройти все эти циклы, считая что каждый верхний (по строке матрицы) охватывает нижний и ,например , распечатать 4-й столбец, содержащий текущее значение параметра цикла при проходке.

Т.е. на первом шаге :
xТекущее=xНач,yТекущее=yНач,...последняяТекущее=последняяНачальное
на втором шаге :
xТекущее=xНач,yТекущее=yНач,...последняяТекущее=последняяВтороеЕеЗначение

Когда все значения последней переменной(самого внутреннего цикла) переберутся, перейти ко второму значению предпоследней переменой(предпоследнего цикла) при всех выше установленных переменных и опять перебрать все значения самого последнего цикла. И так перебрать всю предпоследнюю переменную.
Покончив с ней перейти к перебору таким же образом цикла на уровень выше и так далее вплоть до самого верхнего.
Ну и при каждой установке всех значений 4-го столбца матрицы - распечатывать его.

Короче надо с учетом вложенности пройти все эти циклы, а параметры их , как я уже сказал, заданы в матрице, Которая,понятно , не имеет наперед известное количество строк(циклов)

Как-то я не въезжаю. И еще - хотелось бы сделать это без рекурсивных процедур, так как с помощью этой структуры нужно обрабатывать уже существующую программулину.Но уж как получится!
...
Рейтинг: 0 / 0
10.07.2003, 12:49
    #32204313
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проходка цикла циклов
Код: plaintext
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.
Sub z()

Dim nCycles As Integer, nCurCycle As Integer, tmp As Integer
Dim Param() As Integer
Dim Start() As Integer
Dim Fin() As Integer

'Вместо этого куска будет загрузка из базы'
nCycles =  3 
ReDim Param( 1  To nCycles)
ReDim Start( 1  To nCycles)
ReDim Fin( 1  To nCycles)
For tmp =  1  To nCycles
    Start(tmp) =  1 
    Fin(tmp) =  4 
Next

nCurCycle =  0 
Do
    For tmp =  1  To nCycles
        If tmp > nCurCycle Then Param(tmp) = Start(tmp)
    Next
    
    'Вместо этого куска будет исполнение тела цикла'
    For tmp =  1  To nCycles
        Debug.Print Param(tmp),
    Next
    Debug.Print
    
    For tmp = nCycles To  1  Step - 1 
        Param(tmp) = Param(tmp) +  1 
        If Param(tmp) <= Fin(tmp) Then
            nCurCycle = tmp
            Exit For
        End If
        If tmp =  1  Then Exit Do
    Next
Loop

End Sub
...
Рейтинг: 0 / 0
10.07.2003, 18:54
    #32204950
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проходка цикла циклов
Кстати (если еще нужно): там, где +1, можно сделать шаг цикла тоже для каждого цикла свой.
...
Рейтинг: 0 / 0
10.07.2003, 23:58
    #32205057
yuniki
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проходка цикла циклов
2Владимир Саныч :
Cпасибо, что еще сказать ...
Хотя сказать безусловно есть чего :
Ну ,например, воскликнуть:"Ну почему я такой умный! Что не могу решить собой же поставленные задачки , причем знаю, что они решаются?"

Я до обеда вчера почти сидел над этим - все циклы строил. Нет - этого мне показалось мало, - после получения твоего ответа , я не поверил , что так все просто и сегодня вечером еще парочку часов потратил на поиски ошибки в твоем ответе - нашел, потом опять потерял, потом что-то заставило попробовать этот алгоритм. Мать честна! Все работало!

И это у меня не впервой, старею наверное, а может устал, а может не спал (сегодня ночью было большое счастье - жена меня хотела), а может я болен головой иль нервами...

Что! что надо делать чтоб работать и жить легко и красиво, скажи Саныч, не таи! Или бесталанный я такой и безнадежный?..
...
Рейтинг: 0 / 0
11.07.2003, 14:45
    #32205724
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проходка цикла циклов
Разрази меня гром, я опять начинаю трепаться не по теме. Пусть меня на том свете простят.

Все в порядке, все хорошо, не надо нервничать. У тебя есть жена, а у меня нет (и я не считаю, что это хорошо). Наверно, поэтому я смог сосредоточиться. Когда меня учили программировать, то учили рисовать цикл без Do и без For. Сначала делаешь i=1, потом i+1, потом где-нибудь проверка и GoTo на начало. Если несколько таких команд написать одну в другой, то оказывается, что вышло несколько подряд i=1, несколько подряд i+1 и т.д. А значит, их можно оформить в виде цикла, и тем самым снимается ограничение на количество этих самых i.

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

Все нормально, все хорошо. Главное - не терять тонус. :^)
...
Рейтинг: 0 / 0
11.07.2003, 14:50
    #32205741
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проходка цикла циклов
Главное - не терять тонус.
Канешна главное. Без тонус тебя жена нэ захочет.
...
Рейтинг: 0 / 0
13.04.2004, 23:33
    #32480069
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проходка цикла циклов
Версия с разным шагом у каждого цикла:

Код: plaintext
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.
Sub z()

Dim nCycles As Integer, nCurCycle As Integer, tmp As Integer
Dim Param() As Integer, Start() As Integer, Fin() As Integer, By() As Integer

'Вместо этого куска будет загрузка из базы'
nCycles =  3 
ReDim Param( 1  To nCycles), Start( 1  To nCycles), Fin( 1  To nCycles), By( 1  To nCycles)
For tmp =  1  To nCycles
    Start(tmp) =  1 
    Fin(tmp) =  4 
    By(tmp) =  1 
Next

nCurCycle =  0 
Do
    For tmp =  1  To nCycles
        If tmp > nCurCycle Then Param(tmp) = Start(tmp)
    Next
    
    'Вместо этого куска будет исполнение тела цикла'
    For tmp =  1  To nCycles
        Debug.Print Param(tmp),
    Next
    Debug.Print
    
    For tmp = nCycles To  1  Step - 1 
        Param(tmp) = Param(tmp) + By(tmp)
        If Param(tmp) <= Fin(tmp) Then
            nCurCycle = tmp
            Exit For
        End If
        If tmp =  1  Then Exit Do
    Next
Loop

End Sub
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / проходка цикла циклов / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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