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