erweiterte Funktionen: Min() und Max()

    • Offizieller Beitrag

    Hi,
    hier der Grund, weshalb ich _Number() brauchte ;)
    Min() und Max() ermöglichen nur die Rückgabe des kleinsten/größten Wertes von zwei Werten.
    Möchte ich bei mehreren Werten den kleinsten/größten ermitteln, könnte ich sie in ein Array packen und mit entsprechender Arrayfunktion ermitteln.
    Ich hab der Einfachheit halber beide Funktionen so erweitert, dass aus bis zu 20 übergebenen Werten der kleinste/größte zurückgegeben wird.
    Die ersten beiden müssen Zahlenwerte sein (können auch als String vorliegen). Sollten bei den anderen Werten reine Strings enthalten sein, so werden diese ignoriert.

    _MinFromList() / _MaxFromList()
    [autoit]

    MsgBox(0, '', 'Maximum: ' & _MaxFromList(-34,-127,'C','127.1') & @LF & 'Minimum: ' & _MinFromList(34,127,17,127.1,'0',-1.2))

    [/autoit] [autoit][/autoit] [autoit]

    ;==================================================================================================
    ; Name: _MaxFromList($N1, $N2, ..., $N20="")
    ; Return: Erfolg: größter numerischer Wert aus max. 20 Variablen, auch Strings können übergeben werden
    ; Fehler: Leerstring
    ; Fehlerwert: 1 erster Wert nicht numerisch
    ; 2 zweiter Wert nicht numerisch
    ; Erfordert: _Number()
    ;==================================================================================================
    Func _MaxFromList($N1, $N2, $N3="", $N4="", $N5="", $N6="", $N7="", $N8="", $N9="", $N10="", $N11="", $N12="", $N13="", $N14="", $N15="", $N16="", $N17="", $N18="", $N19="", $N20="")
    Local $tmp1 = _Number($N1)
    If @error Then Return SetError(1, 0, '')
    Local $tmp2 = _Number($N2)
    If @error Then Return SetError(2, 0, '')
    Local $max = $tmp1, $num, $i = 2
    For $i = 2 To 20
    $num = _Number(Eval('N' & $i))
    If @error Then ContinueLoop
    If $num > $max Then $max = $num
    Next
    Return $max
    EndFunc ;==>_MaxFromList

    [/autoit] [autoit][/autoit] [autoit]

    ;==================================================================================================
    ; Name: _MinFromList($N1, $N2, ..., $N20="")
    ; Return: Erfolg: kleinster numerischer Wert aus max. 20 Variablen, auch Strings können übergeben werden
    ; Fehler: Leerstring
    ; Fehlerwert: 1 erster Wert nicht numerisch
    ; 2 zweiter Wert nicht numerisch
    ; Erfordert: _Number()
    ;==================================================================================================
    Func _MinFromList($N1, $N2, $N3="", $N4="", $N5="", $N6="", $N7="", $N8="", $N9="", $N10="", $N11="", $N12="", $N13="", $N14="", $N15="", $N16="", $N17="", $N18="", $N19="", $N20="")
    Local $tmp1 = _Number($N1)
    If @error Then Return SetError(1, 0, '')
    Local $tmp2 = _Number($N2)
    If @error Then Return SetError(2, 0, '')
    Local $min = $tmp1, $num, $i = 2
    For $i = 2 To 20
    $num = _Number(Eval('N' & $i))
    If @error Then ContinueLoop
    If $num < $min Then $min = $num
    Next
    Return $min
    EndFunc ;==>_MinFromList

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _Number($Expression)
    If StringRegExp($Expression, '\A[-+]{0,1}\d+\.{0,1}\d*\z') Then
    Return Number($Expression)
    Else
    Return SetError(1, 0, '')
    EndIf
    EndFunc ;==>_Number

    [/autoit]