Zufallszahlenreihe generieren
Verfasst: 12.05.2006 21:47
Kleine Spielerei mit Zahlen: Aus einem Bereich von integer-Zhalen wird eine zufällige Reihe von Zahlen generiert, von der keine doppelt vorkommt.
Beispiel für Verwendung von Arrays, Gadgets, Pointer, Prozeduren, usw.
Bitte rumschnipseln und verbessern und ???
Jeder comment ist willkommen!
Wünsche puren Spass
_____________________
mit codetags sieht's netter aus .. bobobo
Beispiel für Verwendung von Arrays, Gadgets, Pointer, Prozeduren, usw.
Bitte rumschnipseln und verbessern und ???
Jeder comment ist willkommen!
Wünsche puren Spass
Code: Alles auswählen
; Zufällige Reihe von Zahlen aus dem Bereich a - b (integer), die nicht doppelt vorkommen
;
; hier im Beispiel (= Vorbelegung): "Würfeln" der Zahlen 1 .. 6
;
; PB-Version: 3.93
; 05/2006 by 'Bayernhans'
Global MinValue
Global MaxValue
#Button1 = 1
;###################################
; Ermittelt Zufallszahl im Bereich von Min bis Max mit ganzen Zahlen (Source: PB Forum ...)
Procedure MyRandom(Min.l, Max.l)
ProcedureReturn Random(Max - Min) + Min
EndProcedure ; MyRandom
;###################################
Procedure DeleteL(DIR.l,ELEM.l,DM.l) ;(Source: PB Forum ...)
; DIR.l ist das Array in dem das Item ELEM.l gelöscht wird. Die Größe des Arrays ist DM
CopyMemory(DIR+(ELEM+1)*4,DIR+ELEM*4,(DM-ELEM)*4)
PokeL(DIR+DM*4,0)
EndProcedure
;###################################
Procedure FillArray(a, b)
Dim T_Array.l(b-a) ; Für den Bereich a-b Array dimensionieren ( Achtung! Erstes Element hat Index = 0 ) und ...
For z = a To b
T_Array(z-a) = z ; und aufsteigend von a nach b mit integer-Werten füllen
Next
EndProcedure ; FillArray
;###################################
Procedure Randomize(a, b)
Dim H_Array.l(b-a) ; gleich großes Hilfs-Array dimensionieren
For x = 0 To (b-a)
R_Value = MyRandom(MinValue-a, MaxValue-a) ; Zufallswert ermitteln und ...
H_Array(x) = T_Array(R_Value) ; dem Hilfsarray zuweisen
DeleteL(T_Array.l(), R_Value, (b+1-a)) ; Element aus T_Array löschen, um keine doppelte Zahlen zu haben
MaxValue = MaxValue - 1 ; Wertebereich um eins verringern, da schon ein Element gezogen wurde
AddGadgetItem(10, -1, Str(H_Array(x))) ; Wert ins ListGadget jeweils am Ende (-1) schreiben
Next
EndProcedure
;############ MAIN #################
If OpenWindow(0, 0, 0, 400, 400, #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "Zufallswerte in einer Reihen von a - b (integer)")
If CreateGadgetList(WindowID(0))
TextGadget(4, 10, 20,450,20,"Im Bereich a - b Zahlenreihen ohne doppelte Zahlen generieren")
ButtonGadget(#Button1, 200, 350, 100, 25, "Reihe generieren")
TextGadget(20,10, 40, 80, 20, "Unterer Wert (a):")
StringGadget(2, 100, 40, 25, 20, "1")
TextGadget(30,10, 60, 80, 20, "Oberer Wert (b):")
StringGadget(3, 100, 60, 25, 20, "6")
ListIconGadget(10, 10, 80, 104, 200, "Zahlenreihe: ", 100)
EndIf
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadgetID()
Case #Button1
ClearGadgetItemList(10)
MinValue = Val(GetGadgetText(2))
MaxValue = Val(GetGadgetText(3))
If MinValue<0 Or MaxValue<0 Or MaxValue<=MinValue
MessageRequester("Unzulässig !!", "a, b >= 0 und b > a")
Else
FillArray(MinValue,MaxValue)
Randomize(MinValue,MaxValue)
EndIf
EndSelect
Case #PB_Event_CloseWindow
Ende = 1
EndSelect
Until Ende = 1
End
EndIf
;############ End ##################
mit codetags sieht's netter aus .. bobobo