Strona: [  << <   1   > >>  ]  z  1     
Autor Temat: losowanie z pamiętaniem
Telside




Typ: neutral
Postów: 1
Zarejestrowany: Jan 2004
losowanie z pamiętaniem

Witam wszystkich. Chodzi mi o losowanie np. 10 cyfr np. od 0 do 9 tak, zeby przy kolejnym losowaniu wykluczyc liczbe juz wylosowana (zeby kazda cyfra mogla byc wylosowana tylko raz). Czy trzeba uzyc tablicy (jak?), czy tez mozna obejsc sie bez niej? Z gory dzieki za sugestie.

13-01-2004 18:55
Pokaż profil Telside  Wyślij email do Telside   
Sen




Typ: neutral
Postów: 20
Zarejestrowany: Jan 2004

Rozwiązanie z użyciem tablicy:
Dim t(9) As Boolean 'deklaracja tablicy
Randomize 'inicjacja losowania
i = Round(Rnd * 9) 'losowanie cyfry
If Not t(i) Then t(i) = True 'sprawdzenie czy juz była wylosowana
I jeszcze wsadz to do petli.

14-01-2004 09:50
Pokaż profil Sen  Wyślij email do Sen   
kicaj




Typ: neutral
Postów: 271
Zarejestrowany: Aug 2003

zrob jeszcze tak ze jesli wylosowales gorny albo dolny zakres to zeby przy nastepnym losowaniu zmieszal go, o wiele szybciej bedzie dzialac, zwlaszcza jesli zakares jest np. 100 lub 200

14-01-2004 11:53
Pokaż profil kicaj  Wyślij email do kicaj        3914568
napadlek
Ciapek



Typ: neutral
Postów: 117
Zarejestrowany: Feb 2003
Racja

U mnie juz przy 24 liczbach przy petli sie wieszalo (robilem modul do tasowania kart).


_____________________________________________
www.napadlek.prv.pl ruszyla od nowa zapraszam

14-01-2004 19:55
Pokaż profil napadlek  Wyślij email do napadlek   Odwiedź stronę napadlek       3392810
kicaj




Typ: neutral
Postów: 271
Zarejestrowany: Aug 2003

gdzies byl sampl na vb4all jak to sie robi, a i na dysku powinienem miec zrobiona jego odmiane, ktos chce?

14-01-2004 22:45
Pokaż profil kicaj  Wyślij email do kicaj        3914568
Sen




Typ: neutral
Postów: 20
Zarejestrowany: Jan 2004

Jak wam sie wiesza przy 24 to sprobujcie ten przykład(potrzebuje textbox'a):
Const m = 100
Dim t(m) As Boolean
Dim a, min, max As Long
Private Sub Form_Load()
    Randomize
    min = 0
    max = m
    For a = min To max
        t(a) = False
    Next
    Do
        a = Round(Rnd * m)
        t(a) = True
        For a = min To max
            If Not t(a) Then
                min = a
                Exit For
            End If
        Next
        For a = max To min Step -1
            If Not t(a) Then
                max = a
                Exit For
            End If
        Next
    Loop Until min=max
    Text1 = ""
    For a = 0 To m
        If t(a) Then Text1 = Text1 + Str(a)
    Next
End Sub


[Post edytowany dnia 15-01-2004 00:21 przez Sen]

15-01-2004 00:18
Pokaż profil Sen  Wyślij email do Sen   
kicaj




Typ: neutral
Postów: 271
Zarejestrowany: Aug 2003

' Ten kod u mnie dziala przy procku 200MHz w 1 sek

Dim gZakres As Integer
Dim dZakres As Integer
Dim lic As Integer
Dim liczby1 As Variant
Dim liczby2 As String
Dim wiel As Integer
Randomize
dZakres = 0
gZakres = 1000
wiel = gZakres - dZakres
ReDim liczby1(wiel) As Integer
For a = 0 To wiel
  liczby1(a) = dZakres + a
Next a
Do While wiel >= 0
  lic = Int((wiel + 1) * Rnd)
  liczby2 = liczby2 & liczby1(lic) & " "
  For a = lic To wiel - 1
  liczby1(a) = liczby1(a + 1)
  Next a
  wiel = wiel - 1
Loop
Text1.Text = liczby2

15-01-2004 22:37
Pokaż profil kicaj  Wyślij email do kicaj        3914568
Jelcyn
Admin forum




Typ: admin
Postów: 895
Zarejestrowany: Apr 2002


U mnie juz przy 24 liczbach przy petli sie wieszalo (robilem modul do tasowania kart).


Też miałem kiedyś taki problem. Pisałem, program, który miał "porozrzucać" liczby tj. 1 2 3 4 miał tak porozrzucać, aby było np. 3 1 4 2. Okazało się, że program był dobry, ale był błąd: były 4 liczby a pętla wykonywała się 5 razy, czyli losowała 5-tą liczbę, mimo, iż zakres wynosił 1-4 i warunek był niemożliwy do spełniania. Może takiego masz błęda ??


_____________________________________________
Jelcyn
vb4all(małpka)canpol.pl
http://www.coderscity.pl/no-vb4all * http://www.jelcyn.com

16-01-2004 22:05
Pokaż profil Jelcyn  Wyślij email do Jelcyn   Odwiedź stronę Jelcyn       270849979    6237704
Jelcyn
Admin forum




Typ: admin
Postów: 895
Zarejestrowany: Apr 2002


' Ten kod u mnie dziala przy procku 200MHz w 1 sek

Dim gZakres As Integer
Dim dZakres As Integer
Dim lic As Integer
Dim liczby1 As Variant
Dim liczby2 As String
Dim wiel As Integer
Randomize
dZakres = 0
gZakres = 1000
wiel = gZakres - dZakres
ReDim liczby1(wiel) As Integer
For a = 0 To wiel
  liczby1(a) = dZakres + a
Next a
Do While wiel >= 0
  lic = Int((wiel + 1) * Rnd)
  liczby2 = liczby2 & liczby1(lic) & " "
  For a = lic To wiel - 1
  liczby1(a) = liczby1(a + 1)
  Next a
  wiel = wiel - 1
Loop
Text1.Text = liczby2



Faktycznie wolny sampel, u mnie na 2.0 GHz działa około 0,2-0,28 sekundy !!


_____________________________________________
Jelcyn
vb4all(małpka)canpol.pl
http://www.coderscity.pl/no-vb4all * http://www.jelcyn.com

16-01-2004 22:11
Pokaż profil Jelcyn  Wyślij email do Jelcyn   Odwiedź stronę Jelcyn       270849979    6237704
Knight Lore''FC




Typ: neutral
Postów: 240
Zarejestrowany: Jan 2003


Faktycznie wolny sampel, u mnie na 2.0 GHz działa około 0,2-0,28 sekundy !!

Jelcyn u mnie na P IV 2.0 GHz dziala okolo 0.04-0.11 (ale czesciej jest 0.10) - ciekawe od czego to zalezy....

17-01-2004 01:01
Pokaż profil Knight Lore  Wyślij email do Knight Lore        1065423
Sen




Typ: neutral
Postów: 20
Zarejestrowany: Jan 2004

Jak chcecie szybsze losowanie liczb to sprawdźcie mój kod. Na moim kompie 0,12s a kod kicaj'a 0,18s.
;p

18-01-2004 19:45
Pokaż profil Sen  Wyślij email do Sen   
Wszystkich odpowiedzi: 10 :: Maxymalnie na stronę: 20
Strona: [  << <   1   > >>  ]  z  1