Помоги! Нужно 4 неповторяющихся числа.(RND())

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Тимофей_кг
Новичок
Новичок
 
Сообщения: 30
Зарегистрирован: 19.04.2005 (Вт) 13:39
Откуда: Сланцы

Помоги! Нужно 4 неповторяющихся числа.(RND())

Сообщение Тимофей_кг » 19.04.2005 (Вт) 13:45

Помогите пожалста. А то я написал а у меня не работает.

Alexander N. Samarin
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 397
Зарегистрирован: 05.03.2005 (Сб) 20:59
Откуда: Интернат 18 (СУНЦ МГУ), комната 214А, кровать посередине

Сообщение Alexander N. Samarin » 19.04.2005 (Вт) 13:50

Randomize Timer
A1 = Rnd
A2 = Rnd
A3 = Rnd
A4 = Rnd
На это не смотрите! Это не подпись!!!!!!

Snussi
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 151
Зарегистрирован: 21.07.2004 (Ср) 18:08
Откуда: Москва, Россия

Сообщение Snussi » 19.04.2005 (Вт) 13:58

В чем проблема-то?
Если в том, что при каждом запуске проги генерируются одни и те же числа - юзай Randomize timer перед инициализацией.
А если просто нужно, чтобы в пределах одного массива числа не повторялись - то

Код: Выделить всё
    Randomize Timer
    Dim arr(3) As Double
    Dim tmpNumber As Double
    Dim OK As Boolean
    Dim i As Long, j As Long
    For i = 0 To UBound(arr)
mmm:
        tmpNumber = Rnd
        OK = True
        For j = 0 To i
            If tmpNumber = arr(i) Then
                OK = False
                Exit For
            End If
        Next j
        If OK = False Then GoTo mmm
    Next i


Но, вообще-то, RND крайне редко повторяет значения.

Alexander N. Samarin
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 397
Зарегистрирован: 05.03.2005 (Сб) 20:59
Откуда: Интернат 18 (СУНЦ МГУ), комната 214А, кровать посередине

Сообщение Alexander N. Samarin » 19.04.2005 (Вт) 14:05

Snussi писал(а):Но, вообще-то, RND крайне редко повторяет значения.

Всего лишь 1 из 10000000 раз :lol:
На это не смотрите! Это не подпись!!!!!!

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 19.04.2005 (Вт) 14:20

> Всего лишь 1 из 10000000 раз

Кто это тебе сказал?? :?

Snussi
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 151
Зарегистрирован: 21.07.2004 (Ср) 18:08
Откуда: Москва, Россия

Сообщение Snussi » 19.04.2005 (Вт) 14:43

В принципе, не очень редко (благо само распределение - равновероятное), но редковато...

Alexander N. Samarin
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 397
Зарегистрирован: 05.03.2005 (Сб) 20:59
Откуда: Интернат 18 (СУНЦ МГУ), комната 214А, кровать посередине

Сообщение Alexander N. Samarin » 20.04.2005 (Ср) 13:06

uhm писал(а):> Всего лишь 1 из 10000000 раз

Кто это тебе сказал?? :?

Это от балды сказано :D
На это не смотрите! Это не подпись!!!!!!

ism
Постоялец
Постоялец
 
Сообщения: 337
Зарегистрирован: 12.12.2001 (Ср) 12:59
Откуда: Russia, Saint-Petersburg

Сообщение ism » 20.04.2005 (Ср) 18:54

Использование оператора GoTo является дурным тоном.

Код: Выделить всё
Dim arr(3) As Double
    Dim tmpNumber As Double
    Dim OK As Boolean
    Dim i As Long, j As Long
    Randomize
   
    For i = 0 To UBound(arr)
        tmpNumber = Rnd
        OK = True
        For j = 0 To i
            If tmpNumber = arr(j) Then
                OK = False
                Exit For
            End If
        Next
        If OK Then arr(i) = tmpNumber Else i = i - 1
    Next

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 21.04.2005 (Чт) 12:25

ism писал(а):Использование оператора GoTo является дурным тоном

Между прочим
ism писал(а):For i = 0 To UBound(arr)
...
If OK Then arr(i) = tmpNumber Else i = i - 1 <<< Ещё более дурной тон
Next

:wink:

Автору удачи в исканиях :D
Водки я вам не обещаю, но погуляем хорошо.
И. Сусанин.

Аватара (с) Тёмыч

Alexander N. Samarin
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 397
Зарегистрирован: 05.03.2005 (Сб) 20:59
Откуда: Интернат 18 (СУНЦ МГУ), комната 214А, кровать посередине

Сообщение Alexander N. Samarin » 21.04.2005 (Чт) 13:22

Замучали бедного человека .......................
На это не смотрите! Это не подпись!!!!!!

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 21.04.2005 (Чт) 13:27

Который бедный :D
Водки я вам не обещаю, но погуляем хорошо.
И. Сусанин.

Аватара (с) Тёмыч

Alexander N. Samarin
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 397
Зарегистрирован: 05.03.2005 (Сб) 20:59
Откуда: Интернат 18 (СУНЦ МГУ), комната 214А, кровать посередине

Сообщение Alexander N. Samarin » 21.04.2005 (Чт) 13:40

Igor_123 писал(а):Который бедный :D

Аффтар!
На это не смотрите! Это не подпись!!!!!!

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 21.04.2005 (Чт) 13:45

Ну на то он и аффтар!!! :D
Водки я вам не обещаю, но погуляем хорошо.
И. Сусанин.

Аватара (с) Тёмыч

Тимофей_кг
Новичок
Новичок
 
Сообщения: 30
Зарегистрирован: 19.04.2005 (Вт) 13:39
Откуда: Сланцы

Сообщение Тимофей_кг » 28.04.2005 (Чт) 13:06

Спасибо вам от АФФТАРА.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 68

    TopList