Цыфры на угад

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

Цыфры на угад

Сообщение Sashka23th » 23.08.2005 (Вт) 0:04

Вопрос
есть 4 переменых которым присваевается случайные числа до ста
a1=int(rnd*100)
a2=int(rnd*100)
a3=int(rnd*100)
a4=int(rnd*100)
как зделать так чтоб цыфры в переменых случайно не совпали :?:

Matew
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 894
Зарегистрирован: 28.06.2004 (Пн) 17:44
Откуда: Дальний Восток, г. Ха

Сообщение Matew » 23.08.2005 (Вт) 5:53

Перед всеми RND:
Код: Выделить всё
Randomize (timer)

,но это не панацея. Надежнее проверять if a4=a3 or a4=a2 ... then a4 = int(rnd*100)

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 23.08.2005 (Вт) 8:17

Составляешь список из ста чисел (от 1 до 100), выбираешь из них четыре случайных элемента, используешь.
Lasciate ogni speranza, voi ch'entrate.

Sashka23th
Новичок
Новичок
 
Сообщения: 35
Зарегистрирован: 17.08.2005 (Ср) 13:17

Сообщение Sashka23th » 23.08.2005 (Вт) 9:52

alibek писал(а):Составляешь список из ста чисел (от 1 до 100), выбираешь из них четыре случайных элемента, используешь.

а какой код нужен для выборки случайного елемента :?:

Aster
Новичок
Новичок
Аватара пользователя
 
Сообщения: 28
Зарегистрирован: 06.08.2005 (Сб) 20:03

Сообщение Aster » 25.08.2005 (Чт) 11:12

можно воспользоваться этим кодом:
Код: Выделить всё
Private Sub Form_Load()
Dim a As Integer
qq:
a = Int(Rnd * 100)
If List1.ListCount <> 4 Then

For i = 1 To List1.ListCount
If a = List1.List(i - 1) Then
GoTo qq
Exit For
End If
Next i
List1.AddItem (a)
GoTo qq
Else
Exit Sub
End If
End Sub

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 25.08.2005 (Чт) 11:16

Aster писал(а):можно воспользоваться этим кодом:

Но лучше не надо, ибо лажа.

Уж лучше что-то такое:
Код: Выделить всё
Private Sub Form_Load()
Dim I As Long, N As Long
Const NumCount As Long = 4
List1.Visible = False
List1.Clear
For I = 1 To 100
  List1.AddItem Trim$(Str$(I))
Next I
N = List1.ListCount - NumCount
Randomize
For I = 1 To N
  List1.RemoveItem Fix(Rnd * List1.ListCount)
Next I
List1.Visible = True
End Sub
Lasciate ogni speranza, voi ch'entrate.

Sashka23th
Новичок
Новичок
 
Сообщения: 35
Зарегистрирован: 17.08.2005 (Ср) 13:17

Сообщение Sashka23th » 25.08.2005 (Чт) 22:56

Ребята большое спасибо :lol: оба варианта разобрал очень оригенальные, особена понил как мыслить надо чтоб проблему рэшить
:wink:

Александр Дмитриев
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 296
Зарегистрирован: 05.01.2005 (Ср) 3:39
Откуда: Санкт-Петербург    Куда: /dev/null

Сообщение Александр Дмитриев » 28.08.2005 (Вс) 19:18

MatewС Randomize никакой разницы, даже больше вероятность совпадения
Самый быстрый и действенный способ - после каждого присваивания проверять совпадения:
Код: Выделить всё
Dim a(1 To 4) As Integer
For i = 1 To 4
letting:
a(i) = Int(Rnd * 100)
For h = 1 To i - 1
If a(i) = a(h) Then GoTo letting
Next h
Next i

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 28.08.2005 (Вс) 20:55

Ну да... А среднее количество операций будет порядка Ln((i-1)^2) :twisted:
Хотя, если список небольшой...

Но с удалением рандомного элемента прикольнее :)
Главное - никаких гвоздей!
Моду создают модоки, а распространяют модозвоны.

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

Сообщение ism » 29.08.2005 (Пн) 2:11

Млин, когда же этот GoTo вымрет окончательно, в 100% случаев можно обойтись без него
обработка ошибок в VB6 не всчет

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 29.08.2005 (Пн) 7:57

Александр Дмитриев писал(а):Самый быстрый и действенный способ - после каждого присваивания проверять совпадения:

Если честно, уже надоело объяснять лажовость этого метода.
Но попытаюсь еще раз.
Представь, что тебе надо сгенерить не четыре числа из ста (от 1 до 100), а 999 чисел из 1000 (от 1 до 1000). Дальше объяснять?
Lasciate ogni speranza, voi ch'entrate.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 29.08.2005 (Пн) 15:10

ism писал(а):Млин, когда же этот GoTo вымрет окончательно, в 100% случаев можно обойтись без него

И чем же он тебе, интересно, так мешает?
Изображение

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 29.08.2005 (Пн) 15:35

alibek
А так лучше?
Код: Выделить всё
Option Explicit

Private Const MaxVal = 4096
Private Const NumCnt = 256
Dim tabIn(MaxVal - 1) As Long, tiSize As Long
Dim tabOut(NumCnt - 1) As Long

Private Sub Form_Load()
Dim n As Long, i As Long
  For n = 1 To MaxVal
    tabIn(n - 1) = n
  Next n
  tiSize = MaxVal
  For n = 0 To NumCnt - 1
    i = tiSize * Rnd
    tabOut(n) = tabIn(i)
    tabIn(i) = tabIn(tiSize - 1)
    tiSize = tiSize - 1
  Next n
End Sub

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

Сообщение ism » 30.08.2005 (Вт) 0:36

tyomitch писал(а):И чем же он тебе, интересно, так мешает?

Использование GoTo у опытных программистов считается дурным тоном, его давно хотят забыть. Насколько я знаю в Java он даже является служебным словом, но как GoTo не работает.
Раньше в старых языках программирования при переходе вверх часто возникали ошибки, а иногда переход мог попасть даже на середину команды. В современных языках таких ошибок вродебы не встречается. В 100% случаев обойтись без него можно используя циклы. Удобен он только для выхода из вложеных циклов, а востальных случаях он только затрудняет чтение кода посторонним человеком.

Крост
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 291
Зарегистрирован: 30.01.2005 (Вс) 6:06
Откуда: Питер

Сообщение Крост » 30.08.2005 (Вт) 0:59

Код: Выделить всё
Private Sub Form_Load()
    Dim a1 As Integer
    Dim a2 As Integer
    Dim a3 As Integer
    Dim a4 As Integer

    Randomize
    a1 = Int(Rnd * 100)
    a2 = Int(Rnd * 100)
    a3 = Int(Rnd * 100)
    a4 = Int(Rnd * 100)
   
    Do While a2 = a1
        a2 = Int(Rnd * 100)
    Loop
   
    Do While a3 = a2 Or a3 = a1
        a3 = Int(Rnd * 100)
    Loop
   
    Do While a4 = a3 Or a4 = a2 Or a4 = a1
        a4 = Int(Rnd * 100)
    Loop
End Sub

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 30.08.2005 (Вт) 8:04

Ну я фигею.
Крост, ты вообще топик читал?
Lasciate ogni speranza, voi ch'entrate.

Крост
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 291
Зарегистрирован: 30.01.2005 (Вс) 6:06
Откуда: Питер

Сообщение Крост » 30.08.2005 (Вт) 18:05

alibek
Вообще читал.. 8)

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 30.08.2005 (Вт) 19:43

ism писал(а):
tyomitch писал(а):И чем же он тебе, интересно, так мешает?

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

Зачем же всё делить на чёрное и белое?
http://en.wikipedia.org/wiki/Control_flow писал(а):In brief, undisciplined use of goto leads to spaghetti code which tends to be unmaintainable... However, Donald Knuth has shown in Structured Programming with goto Statements that disciplined use of goto may be necessary to emulate missing control-flow structures.

Умный человек руководствуется разумом, а не догмами.
Изображение

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 31.08.2005 (Ср) 8:46

Крост писал(а):alibek
Вообще читал.. 8)

Тогда ты должен был заметить, что подобный код уже предлагался трижды.
Lasciate ogni speranza, voi ch'entrate.

Александр Дмитриев
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 296
Зарегистрирован: 05.01.2005 (Ср) 3:39
Откуда: Санкт-Петербург    Куда: /dev/null

Сообщение Александр Дмитриев » 03.09.2005 (Сб) 20:03

hCORe писал(а):Ну да... А среднее количество операций будет порядка Ln((i-1)^2) :twisted:

Среднее количество операций здесь будет n+(2n/m)(1+(1/m)(m-1)(n-1)/2) :wink:, где n - количество заполняемых элементов массива, m - количество вариантов, из которых выбирается значения элементов. Возможно, действительно многовато :roll: (подходит только для небольших массивов и/или большого количества вариантов выбора), но во всяком случае быстрее, чем с ListBox'ом.

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 03.09.2005 (Сб) 22:44

Конечно. Визуальные контролы тормозят :)
Поэтому надо использовать массивы. Или, в крайнем случае, коллекции.
Моду создают модоки, а распространяют модозвоны.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 03.09.2005 (Сб) 23:23

hCORe писал(а):Конечно. Визуальные контролы тормозят :)
Поэтому надо использовать массивы. Или, в крайнем случае, коллекции.

О! А ведь у меня для этого уже есть специальная коллекция!
http://vbrussian.com/Examples.asp?ID=93
Изображение

LexBondAgent007
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 132
Зарегистрирован: 10.05.2005 (Вт) 16:11
Откуда: Россия - Москва - ЦАО

Сообщение LexBondAgent007 » 09.09.2005 (Пт) 11:20

Нашел я эту темку =) Поиск действительно рулит! :lol:
Это не читайте! Это спам! :D

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 09.09.2005 (Пт) 13:07

хочу высказать по поводу GOTO:
мой учитель по информатике когда-то в школе мне сказал: "кто программирует на васике, тот никогда не будет хорошим программистом". естественно что это было тогда, когда о visual средствах никто ничего не слышал.
он имел в виду, что старый васик в основном использует переходы goto, так не имел процедур и функций.

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

теперь мы имеем: он учитель в школе, я работаю программистом и сотрудничаю с иностанными колегами (причём, за последний год, я написал программу которая конкурирует с программой Kawasaki Robot System)

так вот.
Состояний же любви — десять: любовный взгляд, привязанность в мыслях, рождение желания, бессонница, исхудание, отвращение к предметам восприятия, утрата стыда, безумие, потеря сознания и смерть — вот их признаки

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 09.09.2005 (Пт) 13:20

Я так понимаю, что твоей крутой проге наср..ть на процедуры и функции в VB (в ней даже и словов то таких не встречается) и ты, как истинный крутой программер, гораздо более значимый, чем учитель по информатике, понатыркал в свое детище GoTo куда только можно :?: Если нет, то я чета не допру, какое отношение последний топик имеет к данной теме :(
Никогда не откладывай на завтра то, что можно ... отложить на послезавтра!

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 09.09.2005 (Пт) 13:30

нет конечно, я использовал в программе и процедуры и функции.
имелось в виду, что использование goto это нормальное остаточное явление и использование его, опрератора, никоем образом не влиет на компетентность программиста.

2 vvs_adm:
зы. старайся выражаться по проще, а то здоровье может подпортиться
Состояний же любви — десять: любовный взгляд, привязанность в мыслях, рождение желания, бессонница, исхудание, отвращение к предметам восприятия, утрата стыда, безумие, потеря сознания и смерть — вот их признаки

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 09.09.2005 (Пт) 13:47

To Sirik
Как ты хорошо замаскировал то, что имелось ввиду ;) В жизнь бы не догадался...
тот никогда не будет хорошим программистом ...
он имел в виду, что старый васик в основном использует переходы goto, так не имел процедур и функций (т.е. почти что вместо процедур и функций)
вроде так ?
теперь мы имеем: он учитель в школе (т.е. лох ушастый), я работаю программистом и сотрудничаю с иностанными колегами (т.е. стал таки хорошим программистом)
т.е. ты смог таки стать крутым программистом, используя переходы Goto вместо процедур и функций.

Вроде все правильно... И где я ошибся?
Никогда не откладывай на завтра то, что можно ... отложить на послезавтра!

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 09.09.2005 (Пт) 13:49

по-моему это всё называеться: человеку делать не хр..н, вот он и пишет что-попало.
я свою мысль закончил, а ты понимай как хоч
Состояний же любви — десять: любовный взгляд, привязанность в мыслях, рождение желания, бессонница, исхудание, отвращение к предметам восприятия, утрата стыда, безумие, потеря сознания и смерть — вот их признаки

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 09.09.2005 (Пт) 13:51

To Sirik
Ну отчасти ты прав, делать нехрен, настроение не из лучших и трафик за сентябрь уже накрылся :( Мож. отчасти и повлияло :)
Никогда не откладывай на завтра то, что можно ... отложить на послезавтра!


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

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

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

    TopList