Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: При генерации массива проверять на повторения Добавлено: 01.05.08 22:08  

Автор вопроса:  Boron
Не могли бы подсказать, как сделать следующую задачу (сам решить её не могу):

Генерируется массив (9). Каждое значение массива генерируется случайным образом от 0 до 35.

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

Можно тупо сделать If Array(1) > Array (0) Then... Но согласитесь, это неправильный подход.

Кто-нибудь может помочь?


Dim Array(9)
Dim i
  For i = 0 To 9
    Array(i) = Int(Rnd() * 35)
    Cells(i + 1, 10) = Array(i)
  Next i


Спасибо!

Ответить

  Ответы Всего ответов: 7  

Номер ответа: 1
Автор ответа:
 Boron



Вопросов: 5
Ответов: 12
 Профиль | | #1 Добавлено: 01.05.08 22:09
Извиняюсь за дубль, кнопку мыши заклинило. Удалите пожалуйста 1 тему.

Ответить

Номер ответа: 2
Автор ответа:
 J. Smith



ICQ: ненавижу 

Вопросов: 40
Ответов: 477
 Web-сайт: Не хочу ломать голову, если её уже сломал кто-то другой.
 Профиль | | #2
Добавлено: 02.05.08 14:10
Sub Macros1()

Const Delim = ","

Dim Arrayy(9)
Dim i
Dim tmpArr As String
Dim tmpRND As Integer

  For i = 0 To 9
TryNext:
    tmpRND = Rnd * 35
'если такой цифры ещё нет в массиве то
    If InStr(tmpArr, CStr(tmpRND)) = 0 Then
'добавить во временную строку
        tmpArr = tmpArr & Delim & CStr(tmpRND)
'копировать в массив
        Arrayy(i) = tmpRND
'занести в ячейку
        Cells(i + 1, 10) = tmpRND
'если есть то взять следующую из РНД
    Else: GoTo TryNext
    End If
  Next i

End Sub
тут демонофф вроде привел нормальный пример для осмысления, а ты не понял

Ответить

Номер ответа: 3
Автор ответа:
 Boron



Вопросов: 5
Ответов: 12
 Профиль | | #3 Добавлено: 02.05.08 19:09
Adam Smith, огромное спасибо за ответ! А как всё просто оказалось. :(

А по поводу примера Демоноффа: на сайте не нашёл функции поиска, да и гугл тоже не выдавал мне ссылок на его примеры. :)

Ответить

Номер ответа: 4
Автор ответа:
 J. Smith



ICQ: ненавижу 

Вопросов: 40
Ответов: 477
 Web-сайт: Не хочу ломать голову, если её уже сломал кто-то другой.
 Профиль | | #4
Добавлено: 02.05.08 19:46
Имел ввиду ответ ADSemenov-а на вопрос про переменную в Лоадпикчер.

Он както ответил мне также, Чётко, и я тогда любя про себя, Демонофф он и всё тут :)

Семенов, и щас Ваш ответ помню...
С уважением Адам.

офтоп...

Ответить

Номер ответа: 5
Автор ответа:
 ADSemenov.ru



Вопросов: 5
Ответов: 276
 Web-сайт: www.adsemenov.ru
 Профиль | | #5
Добавлено: 02.05.08 21:00
    Интересен алгоритм наибыстрого решения проблемы. Полагаю, что наибыстрым для любого количества значений будет алгоритм "двух циклов".
    1. Формируем массив значений, участвующих в необходимом результате — в нашем случае числа от 0 до 35.
    2. Проходим циклом весь массив и для каждого значения находим случайное число, допустимый индекс в массиве, не равное индексу текущего значения. Меняем местами два значения в массиве.

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

Ответить

Номер ответа: 6
Автор ответа:
 J. Smith



ICQ: ненавижу 

Вопросов: 40
Ответов: 477
 Web-сайт: Не хочу ломать голову, если её уже сломал кто-то другой.
 Профиль | | #6
Добавлено: 02.05.08 21:09
Не утверждаю что мой метод наибыстрейший, а результат моего макроса вообще интересный получается :)
Я Randomize Timer забыл

Ответить

Номер ответа: 7
Автор ответа:
 Boron



Вопросов: 5
Ответов: 12
 Профиль | | #7 Добавлено: 03.05.08 10:49
Adam Smith, а, ты про тот ответ :)

На самом деле, конкретно в моём случае, вариант ADSemenov.ru в LoadPicture не сработал (я кстати изначально таким способом пробовал и сам, просто сразу вспомнилась аналогия с MsgBox("Bla-bla-bla" & Var & "Bla-bla-bla";). :)

P.S. Код моей ситуации опубликовать уже не смогу, т.к. всё переписал другим способом. :)

За ответы спасибо! ;)

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам