Page 1 of 1

DimP - Many ProcedurParameter (max 16) used as Array

Posted: Mon Jan 05, 2009 1:47 am
by STARGĂ…TE
Hi,

every now and then I took Procedure, which no specific number of parameters, but only many of the same variety.

So I try to write a generalization, which consist of many undetermined parameters produced an array:

Code: Select all

Macro _O_ : ( : EndMacro 
Macro _C_ : ) : EndMacro 
Macro MacroRepeat2(F,B) 
F#0#B,F#1#B,F#2#B,F#3#B,F#4#B,F#5#B,F#6#B,F#7#B, F#8#B,F#9#B,F#10#B,F#11#B,F#12#B,F#13#B,F#14#B,F#15#B 
EndMacro 
Macro MacroRepeat3(F,M,B) 
F#0#M#0#B:F#1#M#1#B:F#2#M#2#B:F#3#M#3#B:F#4#M#4#B:F#5#M#5#B:F#6#M#6#B:F#7#M#7#B:F#8#M#8#B: F#9#M#9#B:F#10#M#10#B:F#11#M#11#B:F#12#M#12#B:F#13#M#13#B:F#14#M#14#B:F#15#M#15#B 
EndMacro 
Macro DimP(Parameter, DefaultValue) 
 MacroRepeat2(Nr,_#Parameter=DefaultValue) ) 
 Dim Parameter(15) 
 MacroRepeat3(Parameter# _O_, _C_ =Nr, _#Parameter) 
 Defined(0,0 
EndMacro
Syntax
DimP(Parameter, DefaultValue)

Parameter
Name (type) of the parameter, which then later as an array (with 16 boxes 0-15) exists.

DefaultValue
Value with which all parameters are filled, if they are not used.
Now asks you determine how to DimP() now applies, so here are a few examples:


largest number

Code: Select all

Procedure.f Max(DimP(Zahl.f,-1e38))
 Protected Max.f = -1e38
 For n = 0 To 15
  If Zahl(n) > Max 
   Max = Zahl(n)
  EndIf
 Next
 ProcedureReturn Max
EndProcedure

Debug Max(-120, -23)
Debug Max(293, 234, 34, 34)
Debug Max(1.0,0.2,1.001,0.99)

Strings combine

Code: Select all

Procedure.s Connect(Combine.s, DimP(String.s,""))
 Protected String.s = String(0)
 For n = 1 To 15
  If String(n)
   String.s + Combine + String(n)
  EndIf
 Next
 ProcedureReturn String
EndProcedure

Debug Connect("...", "That", "is", "cool")

Array produce and fill

Code: Select all

Macro FillArray(ArrayToFill, DimP(Long,0))
 Dim ArrayToFill(15)
 For n = 0 To 15
  ArrayToFill(n) = Long(n)
 Next
EndMacro

FillArray(MyArray, 128,255,64,9)

For n = 0 To 15
 Debug MyArray(n)
Next

Random Percent Earnings

Code: Select all

Procedure SpecialRandom(DimP(Percent, 0))
 Protected Random = Random(99)
 Protected Delta, n
 For n = 0 To 15 
  If Random < Delta+Percent(n)
   ProcedureReturn n+1
  EndIf
  Delta + Percent(n)
 Next
 ProcedureReturn 0
EndProcedure

Dim Test1(3)
For n = 1 To 10000
 Number = SpecialRandom(60,20,15)
 Test1(Number) + 1
Next
Debug "no Number :"+Str(Test1(0))
Debug "Number 1 :"+Str(Test1(1))
Debug "Number 2 :"+Str(Test1(2))
Debug "Number 3 :"+Str(Test1(3))