Jump to content

Rastgele Seçim Yapma


GameOveR-xD
 Share

Recommended Posts

Autoit ile dizideki elemanlar arasında rastgele seçim yapmak istiyorum. Seçilen dizine ait kodlar çalıştırılacak ve belli bir süre bekledikten sonra tekrar başa dönecek ancak bu sefer ki seçimde önceki dizi elemanını seçemeyecek. Yani aynı seçenek üst üste seçilemeyecek. Bu şekilde döngüyü nasıl yapabilirim.

 

Örnek vermek gerekirse;

Dizideki elemanlar; 1, 2, 3, 4, 5

Program bunlardan birini rastgele seçecek. Seçtiği 2 olsun diyelim. 2 dizisine ait kodu çalıştıracak mesela 2 nolu dizi elemanı seçildi mesajı versin. Daha sonra 5 sn bekleyecek ve 2. kez seçim yapacak.

Bu seferki dizi elemanlar; 1, 3, 4, 5

2 yok çünkü onu az önce seçtik. Aynı şekilde birini seçip o dizinin kodunu çalıştıracak. Diyelim 4 seçti.

Bu seferki dizi elemanlar; 1, 2, 3, 5

4 yok çünkü onu az önce seçtik. bu şekilde sınırsız döngüye girecek.

Link to comment
Share on other sites

AutoIT bilmiyorum ama şu şekilde array'dan random veri çeken bir kod örneği var, buradan yürüyebilirsin sanırım:
 

#include <Array.au3>

Local $Array[5] = ['Jim', 'Paul', 'Sharon', 'Candice', 'Mr. Peanut']
Local $String

While 1
	If UBound($Array) > 1 Then
		$Index = Random(0, UBound($Array), 1)
		If $Index > UBound($Array) - 1 Then $Index = UBound($Array) - 1
		MsgBox(262208, '', 'Current (Random) Index = ' & $Index & @LF & 'Array Elements Left = ' & UBound($Array))
		$String &= $Array[$Index]
		$String &= ' - '
		_ArrayDelete($Array, $Index)
	Else
		$String &= $Array[0]
		ExitLoop
	EndIf
WEnd
MsgBox(262208, 'Final String', $String)
Link to comment
Share on other sites

@GameOveR-xD

 

Bir şeyler karaladım. Kendine göre düzenlersin...

 

Code alaına yapıştırınca kadlar bozuldu. Sorun nerde diye araştırmak için yeterli vaktim yok.

Bu yüzden konuyu editleyip normla olarak kodları yazıyorum.

 

[spoiler]Global Const $Separator = Chr(124) ; |
Global $Array[5] = ['Türkiye', 'ABD', 'Çin', 'Japanyo', 'Almanya'] ;Litemiz
Global $Selected = $Separator

_LOOP()

Func _LOOP() ;Döngü
Local $Selected_Item, $Index

While 1
$Selected_Item = _SELECT()
$Index = @extended

ToolTip("Seçilen: " & $Selected_Item & @LF & "Sırası: " & $Index)
ConsoleWrite("Seçilen: " & $Selected_Item & @LF & "Sırası: " & $Index & @LF)

; Her seçim için ayrı ayrı fonksiyon çalıştırabilirsin aşağıdaki gibi.
Switch $Index
Case 0
_SELECTED_1()
Case 1
_SELECTED_2()
Case 2
_SELECTED_3()
Case 3
_SELECTED_4()
Case 4
_SELECTED_5()
EndSwitch

Sleep(5000) ;5sanye bekletme
WEnd
EndFunc ;==>_LOOP


Func _SELECT() ;Seçim
Local $Ubound = UBound($Array)
If StringLen(StringRegExpReplace($Selected, "[^" & $Separator & "]", "")) = $Ubound + 1 Then $Selected = $Separator

Local $Item, $Index
While 1
$Index = Random(0, $Ubound - 1, 1)
$Item = $Array[$Index]
If StringInStr($Selected, $Separator & $Item & $Separator) = 0 Then
$Selected &= $Item & $Separator
Return SetExtended($Index, $Item)
EndIf
WEnd
MsgBox(16, "", "Kodlama hatası var, kolntrol et!")
Return 0
EndFunc ;==>_SELECT

Func _SELECTED_1()
; 1 için kodlar buraya
EndFunc ;==>_SELECTED_1

Func _SELECTED_2()
; 1 için kodlar buraya
EndFunc ;==>_SELECTED_2

Func _SELECTED_3()
; 1 için kodlar buraya
EndFunc ;==>_SELECTED_3

Func _SELECTED_4()
; 1 için kodlar buraya
EndFunc ;==>_SELECTED_4

Func _SELECTED_5()
; 1 için kodlar buraya
EndFunc ;==>_SELECTED_5[/spoiler]

Edited by blue_life
Link to comment
Share on other sites

@GameOveR-xD

 

Bir şeyler karaladım. Kendine göre düzenlersin...

 

Code alaına yapıştırınca kadlar bozuldu. Sorun nerde diye araştırmak için yeterli vaktim yok.

Bu yüzden konuyu editleyip normal olarak kodları yazıyorum.

 

Mükemmel tam istediğim gibi olmuş :)

 

[spoiler]Seçilen: ABD
Sırası: 1
Seçilen: Türkiye
Sırası: 0
Seçilen: Almanya
Sırası: 4
Seçilen: Japanyo
Sırası: 3
Seçilen: Çin
Sırası: 2
Seçilen: Türkiye
Sırası: 0
Seçilen: ABD
Sırası: 1
Seçilen: Japanyo
Sırası: 3
Seçilen: Çin
Sırası: 2
Seçilen: Almanya
Sırası: 4
Seçilen: Japanyo
Sırası: 3
Seçilen: Almanya
Sırası: 4[/spoiler]

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...