Losowanie 2

https://xpil.eu/Ye5co

Mam prost膮 zagadk臋 dla fachowc贸w od karkuszy: w jaki spos贸b, za pomoc膮 Excela, wylosowa膰 trzy r贸偶ne liczby ca艂kowite z przedzia艂u 1 - 10? Wszystkich kombinacji jest zaledwie 720 (10*9*8), a wi臋c mo偶naby je zakodowa膰 "na twardo" w arkuszu i po prostu losowa膰 jedn膮 z nich, ale szukam czego艣 bardziej eleganckiego. I w miar臋 prostego.

Uda艂o mi si臋 to zrealizowa膰 zar贸wno "czystym" Excelem, jak te偶 odrobin膮 VBA. Rozwi膮zanie oparte czysto na formu艂ach jest przekombinowane (偶eby wylosowa膰 trzy liczby musz臋 u偶y膰 艂膮cznie 30 kom贸rek - a wi臋c strasznie nieefektywne). Z kolei rozwi膮zanie z VBA to zaledwie 16 linijek kodu, ale VBA to zawsze ostateczno艣膰 jak si臋 ju偶 ca艂kiem polegnie na metodach tradycyjnych. Czyli strzelanie z armaty do komar贸w.

Poni偶ej przedstawiam obydwa moje rozwi膮zania.

Rozwi膮zanie 1, bez VBA:

(kliknij w obrazek aby zobaczy膰 go w pe艂nej rozdzielczo艣ci)

(obrazek mi niestety wci臋艂o przy kolejnej przeprowadzce, kiedy艣 odtworz臋 i wrzuc臋)

<miejsce na obrazek>

 

Rozwi膮zanie 2, z u偶yciem VBA:

Public Sub rnd3()
    Dim a As Integer, b As Integer, c As Integer
    Randomize Timer
    a = 1 + (Rnd * 1000 Mod 10)
    b = 1 + (Rnd * 1000 Mod 10)
    c = 1 + (Rnd * 1000 Mod 10)
    Do While b = a
        b = 1 + (Rnd * 1000 Mod 10)
    Loop
    Do While c = a Or c = b
        c = 1 + (Rnd * 1000 Mod 10)
    Loop
    Range("A1").Value = a
    Range("B1").Value = b
    Range("C1").Value = c
End Sub

Rozwi膮zanie pierwsze dobrze si臋 skaluje "w pionie", a wi臋c bez wi臋kszych przer贸bek mo偶na je rozci膮gn膮膰 na "wylosuj 3 z 20" albo "wylosuj 3 ze 100" itd. W poziomie si臋 nie skaluje prawie w og贸le (ilo艣膰 IF-贸w do pozagnie偶d偶ania ro艣nie z ka偶d膮 losowan膮 liczb膮).

Rozwi膮zanie drugie "w pionie" skaluje si臋 te偶 dobrze, "w poziomie" troch臋 gorzej (ale du偶o lepiej od rozwi膮zania pierwszego), przy wi臋kszych grupach losowanych liczb da si臋 je dodatkowo "utablicowa膰", a wi臋c zamiast a, b, c zbudowa膰 poindeksowan膮 tablic臋 losowanych warto艣ci. Czyli jest lepsze z punktu widzenia samego algorytmu, ale wymaga od u偶ytkownika umiej臋tno艣ci uruchamiania kodu VBA.

Jakie艣 lepsze pomys艂y?

https://xpil.eu/Ye5co

Leave a Comment

Komentarze mile widziane.

Je偶eli chcesz do komentarza wstawi膰 kod, u偶yj sk艂adni:
[code]
tutaj wstaw sw贸j kod
[/code]

Je偶eli zrobisz liter贸wk臋 lub zmienisz zdanie, mo偶esz edytowa膰 komentarz po jego zatwierdzeniu.