Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/перебор от начальных чисел - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
перебор от начальных чисел
megavlom Дата: Пятница, 12.10.2012, 16:06 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 105
Репутация: 1 ±
Замечаний: 0% ±

Здравствуйте. Есть перебор наподобие комбинаторного. Но задача в том что начинать перебор нужно с чисел определенного диапазона. Есть мысль впервый проход перебора прибавлять числа до нужного результата, потом обнулить их. Но может кто подскажет лучшее решение...
К сообщению приложен файл: 5678.xls (36.0 Kb)
 
Ответить
СообщениеЗдравствуйте. Есть перебор наподобие комбинаторного. Но задача в том что начинать перебор нужно с чисел определенного диапазона. Есть мысль впервый проход перебора прибавлять числа до нужного результата, потом обнулить их. Но может кто подскажет лучшее решение...

Автор - megavlom
Дата добавления - 12.10.2012 в 16:06
Формуляр Дата: Пятница, 12.10.2012, 17:02 | Сообщение № 2
Группа: Друзья
Ранг: Ветеран
Сообщений: 832
Репутация: 255 ±
Замечаний: 0% ±

Excel 2003, 2013
Не вижу, в чём проблема.
Просто поменяйте начальные границы циклов на нужные значения
[vba]
Code
For i1 = x(1, 1) To 7
   For i2 = x(1, 2) To 9
    For i3 = x(1, 3) To 15
     For i4 = x(1, 4) To 25
[/vba]
К сообщению приложен файл: 5767962.xls (48.5 Kb)


Excel 2003 EN, 2013 EN
 
Ответить
СообщениеНе вижу, в чём проблема.
Просто поменяйте начальные границы циклов на нужные значения
[vba]
Code
For i1 = x(1, 1) To 7
   For i2 = x(1, 2) To 9
    For i3 = x(1, 3) To 15
     For i4 = x(1, 4) To 25
[/vba]

Автор - Формуляр
Дата добавления - 12.10.2012 в 17:02
megavlom Дата: Пятница, 12.10.2012, 17:21 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 105
Репутация: 1 ±
Замечаний: 0% ±

Формуляр, спасибо этому форуму я уже немного лучше плаваю в эксе. Не задавал бы такой простой вопрос. Видите ли если в начале x(1,1)=5 x(1,2)=8,то при дальнейшем i1=x(1,1)=5 i2=i1+1 to .. должно еще быть i2-- 6=5+1 а его не будет
 
Ответить
СообщениеФормуляр, спасибо этому форуму я уже немного лучше плаваю в эксе. Не задавал бы такой простой вопрос. Видите ли если в начале x(1,1)=5 x(1,2)=8,то при дальнейшем i1=x(1,1)=5 i2=i1+1 to .. должно еще быть i2-- 6=5+1 а его не будет

Автор - megavlom
Дата добавления - 12.10.2012 в 17:21
Формуляр Дата: Пятница, 12.10.2012, 17:40 | Сообщение № 4
Группа: Друзья
Ранг: Ветеран
Сообщений: 832
Репутация: 255 ±
Замечаний: 0% ±

Excel 2003, 2013
megavlom, в приложенном решении i2 не использует значение 6.
Я так и не понял, вам так нужно или наоборот?


Excel 2003 EN, 2013 EN

Сообщение отредактировал Формуляр - Пятница, 12.10.2012, 17:40
 
Ответить
Сообщениеmegavlom, в приложенном решении i2 не использует значение 6.
Я так и не понял, вам так нужно или наоборот?

Автор - Формуляр
Дата добавления - 12.10.2012 в 17:40
megavlom Дата: Пятница, 12.10.2012, 18:30 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 105
Репутация: 1 ±
Замечаний: 0% ±

Формуляр, извините,моя вина.Опять не могу толково обьяснить. Есть комбинаторный перебор,где допустим i2=i1 +1 To 9; i3=i2 +1 To 15. Т.е. значение следующей цифры пляшет от предыдущей на расстоянии от +1 до максимального.(устанавливаемого). Если первая цифра от 5 до 7 , то вторая от 6 до 9 ну и т.д. Загвоздка в том ,что начинать перебор надо не с i1=5, i2=i1 +1(6) , i3=i2 +1(7) а с чисел "диапазона" (5-8-12-), когда первое число станет 6 то второе (i2=i1+1) должно быть 7.
Может проще так есть перебор,доходит до определенного значения стоп,это значение на лист.потом продолжение перебора со значения листа .
 
Ответить
СообщениеФормуляр, извините,моя вина.Опять не могу толково обьяснить. Есть комбинаторный перебор,где допустим i2=i1 +1 To 9; i3=i2 +1 To 15. Т.е. значение следующей цифры пляшет от предыдущей на расстоянии от +1 до максимального.(устанавливаемого). Если первая цифра от 5 до 7 , то вторая от 6 до 9 ну и т.д. Загвоздка в том ,что начинать перебор надо не с i1=5, i2=i1 +1(6) , i3=i2 +1(7) а с чисел "диапазона" (5-8-12-), когда первое число станет 6 то второе (i2=i1+1) должно быть 7.
Может проще так есть перебор,доходит до определенного значения стоп,это значение на лист.потом продолжение перебора со значения листа .

Автор - megavlom
Дата добавления - 12.10.2012 в 18:30
RAN Дата: Пятница, 12.10.2012, 19:03 | Сообщение № 6
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Судя по всему вам нужно сделать перебор по возрастающей. Но как сделать этот перебор, начиная с 23 до 7 ???
Или - "ну очень надо!"??? biggrin


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеСудя по всему вам нужно сделать перебор по возрастающей. Но как сделать этот перебор, начиная с 23 до 7 ???
Или - "ну очень надо!"??? biggrin

Автор - RAN
Дата добавления - 12.10.2012 в 19:03
megavlom Дата: Пятница, 12.10.2012, 19:47 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 105
Репутация: 1 ±
Замечаний: 0% ±

Спасибо, думал найти лучшее решение. А мое такое. До свидания..
К сообщению приложен файл: 5678_1.xls (37.0 Kb)
 
Ответить
СообщениеСпасибо, думал найти лучшее решение. А мое такое. До свидания..

Автор - megavlom
Дата добавления - 12.10.2012 в 19:47
ikki Дата: Суббота, 13.10.2012, 21:03 | Сообщение № 8
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
чисто теоретически, при следующем способе суммарное время на выполнение проверок меньше:
[vba]
Code
Sub Macr2()
Dim i1%, i2%, i3%, i4%, h&, x, y
Dim r1%, r2%, r3%, r4%
x = Range("C6:F6").Value
y = Range("I1:L3000").Value
i1 = x(1, 1): i2 = x(1, 2): i3 = x(1, 3): i4 = x(1, 4)
Do While True
    h = h + 1
    y(h, 1) = i1: y(h, 2) = i2: y(h, 3) = i3: y(h, 4) = i4
    i4 = i4 + 1
    If i4 > 25 Then
      i3 = i3 + 1
      If i3 > 15 Then
        i2 = i2 + 1
        If i2 > 9 Then
          i1 = i1 + 1
          If i1 > 7 Then Exit Do
          i2 = i1 + 1
        End If
        i3 = i2 + 1
      End If
      i4 = i3 + 1
    End If
Loop
[I1:L1].Resize(h) = y
End Sub
[/vba]
но на данном примере разница неощутима (без интерфейсной части и ваши вложенные циклы, и мой Do While отрабатывают за 0 msec smile )

пс. а отступы в коде всегда так "творчески" обрабатываются движком? biggrin


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki


Сообщение отредактировал ikki - Суббота, 13.10.2012, 21:05
 
Ответить
Сообщениечисто теоретически, при следующем способе суммарное время на выполнение проверок меньше:
[vba]
Code
Sub Macr2()
Dim i1%, i2%, i3%, i4%, h&, x, y
Dim r1%, r2%, r3%, r4%
x = Range("C6:F6").Value
y = Range("I1:L3000").Value
i1 = x(1, 1): i2 = x(1, 2): i3 = x(1, 3): i4 = x(1, 4)
Do While True
    h = h + 1
    y(h, 1) = i1: y(h, 2) = i2: y(h, 3) = i3: y(h, 4) = i4
    i4 = i4 + 1
    If i4 > 25 Then
      i3 = i3 + 1
      If i3 > 15 Then
        i2 = i2 + 1
        If i2 > 9 Then
          i1 = i1 + 1
          If i1 > 7 Then Exit Do
          i2 = i1 + 1
        End If
        i3 = i2 + 1
      End If
      i4 = i3 + 1
    End If
Loop
[I1:L1].Resize(h) = y
End Sub
[/vba]
но на данном примере разница неощутима (без интерфейсной части и ваши вложенные циклы, и мой Do While отрабатывают за 0 msec smile )

пс. а отступы в коде всегда так "творчески" обрабатываются движком? biggrin

Автор - ikki
Дата добавления - 13.10.2012 в 21:03
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!