MathEx UDF

  • Hallo allerseits!

    Ich möchte euch nun, ziemlich stolz, meine erste UDF! Weitere sollen folgen! ;)

    Die MathEx-UDF liegt in neuer Version vor!!!

    Aktuelle Version: 3.0.0.0
    Status: Beta
    Anzahl Funktionen: 23
    Sprache: Deutsch

    Zusammenfassung:
    Die MathEx-UDF ergänzt AutoIt um hilfreiche Funktionen, die im Bereich Mathematik liegen. Hier ein Liste mit einem kurzem Kommentar:

    • _MathEx_Checksum Berechnet verschiedene Quersummen
    • _MathEx_IsDivisible Prüft, ob eine Zahl durch eine andere teilbar ist
    • _MathEx_IsPrime Prüft, ob eine Zahl eine Primzahl ist
    • _MathEx_Pi Berechnet Pi
    • _MathEx_Max Ermittelt die größte Zahl in einem Array
    • _MathEx_Min Ermittelt die kleinste Zahl in einem Array
    • _MathEx_CreatePrimes Erstellt Primzahlen
    • _MathEx_IsNumber Prüft, ob es sich bei einem String um eine Zahl handelt
    • _MathEx_Sqrt Berechnet eine beliebige Wurzel
    • _MathEx_Mean Berechnet verschiedene Mittel
    • _MathEx_Log Berechnet einen beliebigen Logarithmus
    • _MathEx_IsEven Prüft, ob eine Zahl gerade ist.
    • _MathEx_PQ Rechnet die PQ-Formel durch
    • _MathEx_StandardDeviation Berechnet die Standart-Abweichung
    • _MathEx_GGT Ermittelt den ggT von zwei Zahlen
    • _MathEx_KGV Ermittelt das kgV von zwei Zahlen
    • _MathEx_Factorial Ermittelt verschiedene Fakultäten
    • _MathEx_Eul Errechnet die eulersche Zahl relativ genau
    • _MathEx_Point_Distance Gibt die Entfernung zwischen zwei Punkten an
    • _MathEx_Point_InRectangle Prüft, ob sich ein Punkt in einem Rechteck befindet
    • _MathEx_GraphInfo Errechnet Steigung und y-Achsenabsschnitt einer linearen Funktion aufgrund von zwei Punkten
    • _MathEx_Point_OnLine Ermittelt, ob sich ein Punkt über, unter oder auf einer Linie befindet
    • _MathEx_Point_OnSegment Ermittelt, ob sich ein Punkt auf einer Strecke befindet

    Changelog:

    Herzlichen Dank an die Mitentwickler, die mich unterstützt haben: BugFix, eukalyptus, Progandy, Depreed, AutoBert, Stilgar, L3viathan2142 und Niko H. (ChaosKeks)

    ...und natürlich die ganze deutsche Community! :thumbup:

    Source-Code
    [autoit]

    ; #INDEX# =======================================================================================================================
    ; Titel..........: MathEx
    ; AutoIt Version.: 3.3.0.0 ++
    ; Sprache........: Deutsch
    ; Beschreibung...: Diese UDF ergänzt um einige mathematische Funktionen.
    ; Version........: 3.0.0.0
    ; ===============================================================================================================================

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

    ; #AUTHOR(S)# ===================================================================================================================
    ; Hauptentwickler: Matthias Gianfelice
    ; Mitentwickler..: BugFix, eukalyptus, Progandy, Deepred, AutoBert, Stilgar, L3viathan2142, Niko H.
    ;
    ; >> !! Danke an die ganze deutsche AutoIt Community !! <<
    ;
    ; ===============================================================================================================================

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

    ; #CURRENT# =====================================================================================================================
    ; _MathEx_Checksum
    ; _MathEx_IsDivisible
    ; _MathEx_IsPrime
    ; _MathEx_Pi
    ; _MathEx_Max
    ; _MathEx_Min
    ; _MathEx_CreatePrimes
    ; _MathEx_IsNumber
    ; _MathEx_Sqrt
    ; _MathEx_Mean
    ; _MathEx_Log
    ; _MathEx_IsEven
    ; _MathEx_PQ
    ; _MathEx_StandardDeviation
    ; _MathEx_GGT
    ; _MathEx_KGV
    ; _MathEx_Factorial
    ; _MathEx_Eul
    ; _MathEx_Point_Distance
    ; _MathEx_Point_InRectangle
    ; _MathEx_GraphInfo
    ; _MathEx_Point_OnLine
    ; _MathEx_Point_OnSegment
    ; ===============================================================================================================================

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _MathEx_Checksum
    ; Beschreibung...: Gibt die Quersumme einer Zahl zurück.
    ; Syntax.........: _MathEx_Checksum($number[, $modus=0])
    ; Parameter......: $number - Die Nummer, dessen Quersumme ermittelt werden soll
    ; $modus - Welche Quersumme zurückgegeben werden soll: 0: normal; 1:iterativ; 2:alternativ
    ; Rückgaben......: Erfolg - Die Quersumme
    ; Fehler - False, wenn $number oder $modus ungültig sind.
    ; Autor(en)......: BugFix <BugFix at autoit dot de>, Matthias Gianfelice <matthias at gianfelice dot de>
    ; ===============================================================================================================================
    Func _MathEx_Checksum($number, $modus = 0)
    Local $integer_number_mathex_checksum = Number($number)
    If Not _MathEx_IsNumber($integer_number_mathex_checksum) Or Not $integer_number_mathex_checksum > 0 Or Not IsInt($modus) Then Return False
    While StringLen($integer_number_mathex_checksum) > 1
    Local $array_number_mathex_checksum = StringSplit($integer_number_mathex_checksum, '', 2)
    $integer_number_mathex_checksum = 0
    If $modus = 2 Then
    Local $mul = -1
    For $i = UBound($array_number_mathex_checksum) - 1 To 1 Step -1
    $array_number_mathex_checksum[$i - 1] = $array_number_mathex_checksum[$i] + ($mul * $array_number_mathex_checksum[$i - 1])
    $mul *= -1
    Next
    Return $array_number_mathex_checksum[0]
    Else
    For $i = 0 To UBound($array_number_mathex_checksum) - 1
    $integer_number_mathex_checksum += $array_number_mathex_checksum[$i]
    Next
    If $modus = 0 Then ExitLoop
    EndIf
    WEnd
    Return $integer_number_mathex_checksum
    EndFunc ;==>_MathEx_Checksum

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _MathEx_IsDivisible
    ; Beschreibung...: Prüft, ob eine Zahl durch eine andere teilbar ist.
    ; Syntax.........: _MathEx_IsPrime($numdividend, $numdivisor)
    ; Parameter......: $numdividend - Der Dividend
    ; $numdivisor - Der Divisor
    ; Rückgaben......: Erfolg - Gibt 1 zurück, wenn der Dividend durch den Divisor teilbar ist, gibt 0 zurück, wenn nicht.
    ; Fehler - Gibt -1 zurück und setzt @error
    ; |0 - $numdividend und $numdivisor sind nicht teilbar
    ; |1 - $numdivisor ist 0
    ; Autor(en)......: eukalyptus <eukalyptus at autoit dot de>, Matthias Gianfelice <matthias at gianfelice dot de>
    ; ===============================================================================================================================
    Func _MathEx_IsDivisible($numdividend, $numdivisor)
    If Not _MathEx_IsNumber($numdividend) Or Not _MathEx_IsNumber($numdivisor) Then
    SetError(2)
    Return -1
    EndIf
    If $numdivisor = 0 Then
    SetError(1)
    Return -1
    EndIf
    If Not Mod($numdividend, $numdivisor) Then
    Return 1
    Else
    Return 0
    EndIf
    EndFunc ;==>_MathEx_IsDivisible

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _MathEx_IsPrime
    ; Beschreibung...: Prüft, ob eine Zahl eine Primzahl ist.
    ; Syntax.........: _MathEx_IsPrime($number[, $one_prime])
    ; Parameter......: $number - Die Nummer, die geprüft werden soll
    ; $one_prime - Auf 1 setzen, wenn 1 eine Primzahl sein soll.
    ; Rückgabe.......: Erfolg - Gibt 1 zurück, wenn die Zahl eine Primzahl ist, 0 wenn nicht
    ; Fehler - Gibt -1 zurück, wenn $number keine Zahl ist, oder $one_prime ungültig ist.
    ; Author ........: Progandy <Progandy at autoit dot de>, Matthias Gianfelice <matthias at gianfelice dot de>
    ; ===============================================================================================================================
    Func _MathEx_IsPrime($number, $one_prime = 0)
    If Not _MathEx_IsNumber($number) Or Not IsInt($one_prime) Or $one_prime > 1 Or $one_prime < 0 Then Return -1
    If $one_prime And $number = 1 Then Return 1
    If $number = 1 Then Return 0
    If $number = 2 Then Return 1
    If Mod($number, 2) = 0 Then Return 0
    For $i = 3 To Sqrt($number) Step 2
    If Mod($number, $i) = 0 Then Return 0
    Next
    Return 1
    EndFunc ;==>_MathEx_IsPrime

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _MathEx_Pi
    ; Beschreibung...: Gibt Pi relativ genau zurück
    ; Syntax.........: _MathEx_Pi()
    ; Rückgaben......: Erfolg - Gibt Pi zurück
    ; Autor(en)......: Stilgar <Stilgar at autoit dot de>, Deepred <Deepred at autoit dot de>,
    ; Matthias Gianfelice <matthias at gianfelice dot de>
    ; ===============================================================================================================================
    Func _MathEx_Pi()
    Return 4 * ATan(1)
    EndFunc ;==>_MathEx_Pi

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _MathEx_Max
    ; Beschreibung...: Gibt die größte Zahl in einem Array zurück.
    ; Syntax.........: _MathEx_Max($aNumbers[, $mode = 0])
    ; Parameter......: $aNumbers - 0-basiertes Array mit den Zahlen
    ; $mode - Was zurückgegeben werden soll:
    ; |0: Die größte Nummer
    ; |1: Die ID der größten Nummer im Array
    ; |2: Beides wird in einem Array zurückgegeben: 0 enthält die größte Nummer und 1 die ID.
    ; Rückgabe.......: Erfolg - Gibt einen String, eine Nummer oder ein Array zurück
    ; Fehler - Gibt -1 zurück und setzt @error
    ; |1 - $aNumbers ist kein Array oder $mode ist kein Integer
    ; |2 - Eine Nummer im Array ist keine Zahl, @extended enthält die Id
    ; Bemerkungen....: Wenn mehrere "größte" Zahlen enthalten sind, wird die erste zurückgegeben
    ; Autor(en)......: Matthias Gianfelice <matthias at gianfelice dot de>
    ; ===============================================================================================================================
    Func _MathEx_Max($aNumbers, $mode = 0)
    If Not IsArray($aNumbers) Or Not IsInt($mode) Then
    SetError(1)
    Return -1
    EndIf
    For $i = 0 To UBound($aNumbers) - 1
    If Not _MathEx_IsNumber($aNumbers[$i]) Then
    SetError(2, $i)
    Return -1
    EndIf
    Next
    Local $integer_mathex_maximal_nummer = 0
    For $i = 0 To UBound($aNumbers) - 1
    If Number($aNumbers[$i]) > $aNumbers[$integer_mathex_maximal_nummer] Then $integer_mathex_maximal_nummer = $i
    Next
    Switch $mode
    Case 0
    Return $aNumbers[$integer_mathex_maximal_nummer]
    Case 1
    Return $integer_mathex_maximal_nummer
    Case 2
    Local $array_mathex_number_final[2] = [$aNumbers[$integer_mathex_maximal_nummer], $integer_mathex_maximal_nummer]
    Return $array_mathex_number_final
    EndSwitch
    EndFunc ;==>_MathEx_Max

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _MathEx_Min
    ; Beschreibung...: Gibt die kleinste Zahl in einem Array zurück.
    ; Syntax.........: _MathEx_Min($aNumbers[, $mode = 0])
    ; Parameter......: $aNumbers - 0-basiertes Array mit den Zahlen
    ; $mode - Was zurückgegeben werden soll:
    ; |0: Die kleinste Nummer
    ; |1: Die ID der größten Nummer im Array
    ; |2: Beides wird in einem Array zurückgegeben: 0 enthält die kleinste Nummer und 1 die ID.
    ; Rückgabe.......: Erfolg - Gibt einen String, eine Nummer oder ein Array zurück
    ; Fehler - Gibt -1 zurück und setzt @error
    ; |1 - $aNumbers ist kein Array oder $mode ist kein Integer
    ; |2 - Eine Nummer im Array ist keine Zahl, @extended enthält die Id
    ; Bemerkungen....: Wenn mehrere "kleinste" Zahlen enthalten sind, wird die erste zurückgegeben
    ; Autor(en)......: Matthias Gianfelice <matthias at gianfelice dot de>
    ; ===============================================================================================================================
    Func _MathEx_Min($aNumbers, $mode = 0)
    If Not IsArray($aNumbers) Or Not IsInt($mode) Then
    SetError(1)
    Return -1
    EndIf
    For $i = 0 To UBound($aNumbers) - 1
    If Not _MathEx_IsNumber($aNumbers[$i]) Then
    SetError(2, $i)
    Return -1
    EndIf
    Next
    Local $integer_mathex_minimal_nummer = 0
    For $i = 0 To UBound($aNumbers) - 1
    If Number($aNumbers[$i]) < $aNumbers[$integer_mathex_minimal_nummer] Then $integer_mathex_minimal_nummer = $i
    Next
    Switch $mode
    Case 0
    Return $aNumbers[$integer_mathex_minimal_nummer]
    Case 1
    Return $integer_mathex_minimal_nummer
    Case 2
    Local $array_mathex_number_final[2] = [$aNumbers[$integer_mathex_minimal_nummer], $integer_mathex_minimal_nummer]
    Return $array_mathex_number_final
    EndSwitch
    EndFunc ;==>_MathEx_Min

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _MathEx_CreatePrimes
    ; Beschreibung...: Gibt ein Array voller Primzahlen zurück.
    ; Syntax.........: _MathEx_CreatePrimes($number)
    ; Parameter......: $number - Zwischen 2 und $number werden die Primzahlen gesucht
    ; Rückgaben......: Erfolg - Gibt ein Array zurück. Im 0ten Element steht die Anzahl an Zahlen, im Rest die Primzahlen selbst.
    ; Fehler - Gibt 0 zurück, wenn $number kein Integer ist oder kleiner als 2 ist
    ; Autor(en)......: AutoBert <AutoBert at autoit dot de>, Progandy <Progandy at autoit dot de>,
    ; Matthias Gianfelice <matthias at gianfelice dot de>
    ; ===============================================================================================================================
    Func _MathEx_CreatePrimes($number)
    If Not IsInt($number) Or $number < 2 Or $number > 16777215 Then Return 0
    $number += 3
    Local $array_mathex_gestrichen[$number - 2]
    For $i = 0 To $number - 3
    $array_mathex_gestrichen[$i] = False
    Next
    Local $i = 2
    While $i * $i <= $number
    If Not $array_mathex_gestrichen[$i] Then
    For $j = $i * $i To $number - 3 Step $i
    $array_mathex_gestrichen[$j] = True
    Next
    EndIf
    $i = $i + 1
    WEnd
    Local $integer_mathex_anzahl = 0
    For $i = 2 To $number - 3
    If Not $array_mathex_gestrichen[$i] Then $integer_mathex_anzahl += 1
    Next
    Local $array_mathex_primzahlen[$integer_mathex_anzahl + 1], $integer_mathex_aktuell = 1
    $array_mathex_primzahlen[0] = $integer_mathex_anzahl
    For $i = 2 To $number - 3
    If Not $array_mathex_gestrichen[$i] Then
    $array_mathex_primzahlen[$integer_mathex_aktuell] = $i
    $integer_mathex_aktuell += 1
    EndIf
    Next
    Return $array_mathex_primzahlen
    EndFunc ;==>_MathEx_CreatePrimes

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _MathEx_IsNumber
    ; Beschreibung...: Prüft, ob ein String gleich einer Nummer ist.
    ; Syntax.........: _MathEx_IsNumber($number)
    ; Parameter......: $number - Der String, der geprüft werden soll.
    ; Rückgaben......: Gibt 1 zurück, wenn der String eine Zahl ist, oder 0 wenn es nicht der Fall ist.
    ; Autor(en)......: Matthias Gianfelice <matthias at gianfelice dot de>
    ; ===============================================================================================================================
    Func _MathEx_IsNumber($number)
    If Not Number($number) = 0 Then
    Return 1
    ElseIf $number == "0" Or $number == 0 Then
    Return 1
    MsgBox(0, "", "")
    Else
    Return 0
    EndIf
    EndFunc ;==>_MathEx_IsNumber

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _MathEx_Sqrt
    ; Beschreibung...: Gibt die nte Wurzel von einer Zahl zurück.
    ; Syntax.........: _MathEx_Sqrt($number[, $sqrt=2])
    ; Parameter......: $number - Die Nummer, aus der die Wurzel gezogen werden soll
    ; $sqrt - Welche Wurzel gezogen werden soll
    ; Rückgaben......: Erfolg - Gibt die Wurzel zurück
    ; Fehler - Gibt -1 zurück und setzt @error:
    ; |1: $number oder $sqrt ist keine Nummer
    ; |2: $number ist negativ
    ; Autor(en)......: Matthias Gianfelice <matthias at gianfelice dot de>
    ; ===============================================================================================================================
    Func _MathEx_Sqrt($number, $sqrt = 2)
    If Not _MathEx_IsNumber($number) Or Not _MathEx_IsNumber($sqrt) Then
    SetError(1)
    Return -1
    EndIf
    If $number < 0 Then
    SetError(2)
    Return -1
    EndIf
    Return $number ^ (1 / $sqrt)
    EndFunc ;==>_MathEx_Sqrt

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _MathEx_Mean
    ; Beschreibung...: Gibt das Mittel einer Zahl zurück
    ; Syntax.........: _MathEx_Mean($aNumbers[, $modus=3])
    ; Parameter......: $aNumbers - Ein 0-basiertes Array mit allen Zahlen
    ; $modus - Welches Mittel verwendet werden soll (nach größe (HM <= GM <= AM <= QM))
    ; |1: harmonisches Mittel; 2: geometrisches Mittel; 3 (Standart): arithmetisches Mittel;
    ; |4: quadratisches Mittel
    ; Rückgaben......: Erfolg - Das jeweilige Mittel
    ; Fehler - Gibt False zurück und setzt @error:
    ; |1: $aNumbers ist kein Array oder $modus ist ungültig
    ; |2: Min. ein Arrayelement ist keine Zahl, in @extended steht die ID des jeweiligen
    ; Autor(en)......: Stilgar <Stilgar at autoit dot de>, Matthias Gianfelice <matthias at gianfelice dot de>
    ; ===============================================================================================================================
    Func _MathEx_Mean($aNumbers, $mode = 3)
    If Not IsArray($aNumbers) Or Not IsInt($mode) Or $mode < 1 Or $mode > 4 Then
    SetError(1)
    Return False
    EndIf
    For $i = 0 To UBound($aNumbers) - 1
    If Not _MathEx_IsNumber($aNumbers[$i]) Then
    SetError(2, $i)
    Return False
    EndIf
    Next
    Local $integer_mathex_ubound = UBound($aNumbers), $number_mathex_temp = 0
    Switch $mode
    Case 1 ; harmonisches Mittel
    For $i = 0 To $integer_mathex_ubound - 1
    $number_mathex_temp += 1 / $aNumbers[$i]
    Next
    $number_mathex_temp = $integer_mathex_ubound / $number_mathex_temp
    Case 2 ; geometrisches Mittel
    $number_mathex_temp = 1
    For $i = 0 To $integer_mathex_ubound - 1
    $number_mathex_temp = $number_mathex_temp * $aNumbers[$i]
    Next
    $number_mathex_temp = _MathEx_Sqrt($number_mathex_temp, $integer_mathex_ubound)
    If @error Then SetError(4, 0, "")
    Case 3 ; arithmetisches Mittel
    For $i = 0 To $integer_mathex_ubound - 1
    $number_mathex_temp += $aNumbers[$i]
    Next
    $number_mathex_temp = $number_mathex_temp / $integer_mathex_ubound
    Case 4 ; quadratisches Mittel
    For $i = 0 To $integer_mathex_ubound - 1
    $number_mathex_temp += $aNumbers[$i] ^ 2
    Next
    $number_mathex_temp = Sqrt($number_mathex_temp / 2)
    EndSwitch
    Return $number_mathex_temp
    EndFunc ;==>_MathEx_Mean

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _MathEx_Log
    ; Beschreibung...: Gibt den Logarithmus einer Zahl zurück
    ; Syntax.........: _MathEx_Log($nbasis, $nlog)
    ; Parameter......: $nbasis - Die Basis
    ; $nlog - Die Zahl
    ; Rückgaben......: Erfolg - Der Logarithmus zur Basis $nbasis von $nlog
    ; Fehler - Gibt False zurück, wenn eine der beiden Nummern keine Zahl ist.
    ; Autor(en)......: Matthias Gianfelice <matthias at gianfelice dot de>
    ; ===============================================================================================================================
    Func _MathEx_Log($nbasis, $nlog)
    If Not _MathEx_IsNumber($nbasis) Or Not _MathEx_IsNumber($nlog) Then Return False
    Return Log($nlog) / Log($nbasis)
    EndFunc ;==>_MathEx_Log

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _MathEx_IsEven
    ; Beschreibung...: Prüft, ob eine Zahl gerade ist
    ; Syntax.........: _MathEx_IsEven($number)
    ; Parameter......: $number - Die Nummer, die geprüft werden soll
    ; Rückgaben......: Erfolg - Gibt 1 zurück, wenn die Zahl gerade ist und 0, wenn nicht
    ; Fehler - Gibt -1 zurück, wenn $number keine Nummer ist
    ; Autor(en)......: Matthias Gianfelice <matthias at gianfelice dot de>
    ; ===============================================================================================================================
    Func _MathEx_IsEven($number)
    If Not _MathEx_IsNumber($number) Then Return -1
    If Mod($number, 2) = 0 Then
    Return 1
    Else
    Return 0
    EndIf
    EndFunc ;==>_MathEx_IsEven

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _MathEx_PQ
    ; Beschreibung...: Errechnet aus den Variablen p und q die quadratische Ergänzung
    ; Syntax.........: _MathEx_PQ($p, $q)
    ; Parameter......: $p - p
    ; $q - q
    ; Rückgaben......: Erfolg - Ein Array, dessen beide Elemente die Lösungen enthalten
    ; Fehler - False, falls die Wurzel negativ werden würde oder p bzw. q keine Zahlen sind
    ; Autor(en)......: Deepred <Deepred at autoit dot de>, L3viathan2142 <L3viathan2142 at autoit dot de>,
    ; Matthias Gianfelice <matthias at gianfelice dot de>
    ; ===============================================================================================================================
    Func _MathEx_PQ($p, $q)
    If Not _MathEx_IsNumber($p) Or Not _MathEx_IsNumber($q) Then Return False
    Local $number_mathex_sqrt = $p ^ 2 / 4 - $q, $number_mathex_other = $p / - 2
    If $number_mathex_sqrt < 0 Then Return False
    $number_mathex_sqrt = Sqrt($number_mathex_sqrt)
    Local $return_array[2] = [$number_mathex_other + $number_mathex_sqrt, $number_mathex_other - $number_mathex_sqrt]
    Return $return_array
    EndFunc ;==>_MathEx_PQ

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _MathEx_StandardDeviation
    ; Beschreibung...: Gibt die Standardabweichung übergebener Zahlen an
    ; Syntax.........: _MathEx_StandardDeviation($aNumbers)
    ; Parameter......: $aNumbers - Ein 0-basiertes Array mit allen Zahlen
    ; Rückgaben......: Erfolg - Die Standardabweichung
    ; Fehler - Gibt False zurück und setzt @error:
    ; |1: $aNumbers ist kein Array
    ; |2: Min. ein Arrayelement ist keine Zahl, in @extended steht die ID des jeweiligen
    ; Autor(en)......: Matthias Gianfelice <matthias at gianfelice dot de>
    ; ===============================================================================================================================
    Func _MathEx_StandardDeviation($aNumbers)
    If Not IsArray($aNumbers) Then
    SetError(1)
    Return False
    EndIf
    Local $integer_mathex_ubound = UBound($aNumbers), $number_mathex_temp = 0, $number_mathex_mittel = _MathEx_Mean($aNumbers)
    For $i = 0 To $integer_mathex_ubound - 1
    If Not _MathEx_IsNumber($aNumbers[$i]) Then
    SetError(2, $i)
    Return False
    EndIf
    $number_mathex_temp += ($aNumbers[$i] - $number_mathex_mittel) ^ 2
    Next
    Return Sqrt($number_mathex_temp / ($integer_mathex_ubound - 1))
    EndFunc ;==>_MathEx_StandardDeviation

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _MathEx_GGT
    ; Beschreibung...: Gibt den größten gemeinsamen Teiler von 2 Zahlen an (nach euklidischem Algorithmus)
    ; Syntax.........: _MathEx_GGT($numbera, $numberb)
    ; Parameter......: $numbera, $numberb - Zwei beliebige Zahlen
    ; Rückgabe.......: Erfolg - Gibt einen Integer zurück
    ; Fehler - Gibt False zurück, wenn es sich nicht um Zahlen handelt
    ; Autor(en)......: Niko H. <ChaosKeks at autoit dot de>, Matthias Gianfelice <matthias at gianfelice dot de>
    ; ===============================================================================================================================
    Func _MathEx_GGT($numbera, $numberb)
    If Not _MathEx_IsNumber($numbera) Or Not _MathEx_IsNumber($numberb) Then Return False
    If $numbera = 0 Or $numberb = 0 Then Return 1
    Local $number_mathex_rest1 = $numbera, $number_mathex_rest2 = $numberb, $number_mathex_temp
    Do
    $number_mathex_temp = Mod($number_mathex_rest1, $number_mathex_rest2)
    $number_mathex_rest1 = $number_mathex_rest2
    $number_mathex_rest2 = $number_mathex_temp
    Until $number_mathex_temp = 0
    Return $number_mathex_rest1
    EndFunc ;==>_MathEx_GGT

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _MathEx_KGV
    ; Beschreibung...: Gibt das kleinste gemeinsame Vielfache von 2 Zahlen an
    ; Syntax.........: _MathEx_kgV($numbera, $numberb)
    ; Parameter......: $numbera, $numberb - Zwei beliebige Zahlen
    ; Rückgabe.......: Erfolg - Gibt einen Integer zurück
    ; Fehler - Gibt False zurück, wenn es sich nicht um Zahlen handelt
    ; Autor(en)......: Niko H. <ChaosKeks at autoit dot de>, Matthias Gianfelice <matthias at gianfelice dot de>
    ; ===============================================================================================================================
    Func _MathEx_KGV($numbera, $numberb)
    Local $number_mathex_ggt = _MathEx_GGT($numbera, $numberb)
    If $number_mathex_ggt = False Then Return False
    Return $numbera * $numberb / $number_mathex_ggt
    EndFunc ;==>_MathEx_KGV

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _MathEx_Factorial
    ; Beschreibung...: Gibt eine beliebige Fakultät zurück
    ; Syntax.........: _MathEx_Factorial($number[, $mode = 0])
    ; Parameter......: $number - Eine beliebige natürliche Zahl
    ; $mode - Die gewünschte Fakultät:
    ; |0: Normale Fakultät
    ; |1: Primfakultät
    ; |2: Superfakultät (Vorsicht! Rekursiver Aufruf!)
    ; |3: Hyperfakultät
    ; Rückgabe.......: Erfolg - Gibt einen Integer zurück
    ; Fehler - Gibt False zurück, wenn $number oder $mode ungültig war
    ; Autor(en)......: Niko H. <ChaosKeks at autoit dot de>, Matthias Gianfelice <matthias at gianfelice dot de>
    ; ===============================================================================================================================
    Func _MathEx_Factorial($number, $mode = 0)
    If Not _MathEx_IsNumber($number) Or $number < 1 Or $mode < 0 Or $mode > 3 Or Not IsInt($mode) Then Return False
    Local $number_mathex_temp = 1
    Switch $mode
    Case 0
    For $i = 1 To $number
    $number_mathex_temp *= $i
    Next
    Case 1
    If $number = 1 Then Return 0
    For $i = 2 To $number
    If _MathEx_IsPrime($i) Then $number_mathex_temp *= $i
    Next
    Case 2
    For $i = 1 To $number
    $number_mathex_temp *= _MathEx_Factorial($i)
    Next
    Case 3
    For $i = 1 To $number
    $number_mathex_temp *= $i ^ $i
    Next
    EndSwitch
    Return $number_mathex_temp
    EndFunc ;==>_MathEx_Factorial

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _MathEx_Eul
    ; Beschreibung...: Gibt die eulersche Zahl nach einer vorgegebenen Genauigkeit an
    ; Syntax.........: _MathEx_Eul([$accuracy = 65])
    ; Parameter......: $accuracy - Die Genauigkeit (Zahl sollte einschließlich zwischen 1 und 65 liegen)
    ; Rückgabe.......: Erfolg - Gibt die eurlersche Zahl zurück
    ; Fehler - Gibt -1 zurück, wenn $accuracy ungültig war
    ; Autor(en)......: Niko H. <ChaosKeks at autoit dot de>, Matthias Gianfelice <matthias at gianfelice dot de>
    ; ===============================================================================================================================
    Func _MathEx_Eul($accuracy = 65)
    Local $number_mathex_eul = 1
    If Not IsInt($accuracy) Then Return -1
    If $accuracy < 1 Then $accuracy = 1
    If $accuracy > 65 Then $accuracy = 65
    For $i = 1 To $accuracy
    $number_mathex_eul += 1 / _MathEx_Factorial($i)
    Next
    Return $number_mathex_eul
    EndFunc ;==>_MathEx_Eul

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _MathEx_Point_Distance
    ; Beschreibung...: Ermittelt den Abstand zwischen zwei Punkten
    ; Syntax.........: _MathEx_Point_Distance($x1, $y1, $x2, $y2)
    ; Parameter......: $x1, $y1, $x2, $y2 - Die Koordinaten der Punkte
    ; Rückgabe.......: Erfolg - Gibt den Abstand zurück
    ; Fehler - Gibt -1 zurück, eine der Koordinaten ungültig war
    ; Autor(en)......: Matthias Gianfelice <matthias at gianfelice dot de>
    ; ===============================================================================================================================
    Func _MathEx_Point_Distance($x1, $y1, $x2, $y2)
    If Not _MathEx_IsNumber($x1) Or Not _MathEx_IsNumber($y1) Or Not _MathEx_IsNumber($x2) Or Not _MathEx_IsNumber($y2) Then Return -1
    Return Sqrt(($x1 - $x2) ^ 2 + ($y1 - $y2) ^ 2)
    EndFunc ;==>_MathEx_Point_Distance

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _MathEx_Point_InRectangle
    ; Beschreibung...: Ermittelt den Abstand zwischen zwei Punkten
    ; Syntax.........: _MathEx_Point_InRectangle($P1, $P2, $X)
    ; Parameter......: $P1, $P2 - Arrays mit den Koordinaten des linken oberen Punktes ($P1) und des rechten unteren ($P2)
    ; $X - Koordinaten des zu prüfenden Punkts
    ; => [0] enthält die x-Koordinate und [1] die y-Koordinate der entsprechenden Punkte
    ; Rückgabe.......: Erfolg - Gibt 1 zurück, wenn sich der Punkt im, 0 wenn er sich auf dem Rand und -1 wenn er sich außerhalb
    ; befindet
    ; Fehler - Gibt False zurück, wenn eine der Koordinaten ungültig war.
    ; Autor(en)......: Matthias Gianfelice <matthias at gianfelice dot de>
    ; ===============================================================================================================================
    Func _MathEx_Point_InRectangle($P1, $P2, $X)
    If Not IsArray($P1) Or Not IsArray($P2) Or Not IsArray($X) Then Return False
    If Not _MathEx_IsNumber($P1[0]) Or Not _MathEx_IsNumber($P1[1]) Or Not _MathEx_IsNumber($P2[0]) Or Not _MathEx_IsNumber($P2[1]) Then Return False
    If Not _MathEx_IsNumber($X[0]) Or Not _MathEx_IsNumber($X[1]) Then Return False
    If $P1[0] > $P2[0] Or $P1[1] < $P2[1] Then Return False
    Select
    Case $X[0] > $P1[0] And $X[0] < $P2[0] And $X[1] < $P1[1] And $X[1] > $P2[1]
    Return 1
    Case $X[0] = $P1[0] And $X[1] <= $P1[1] And $X[1] >= $P2[1]
    Return 0
    Case $X[0] = $P2[0] And $X[1] <= $P1[1] And $X[1] >= $P2[1]
    Return 0
    Case $X[1] = $P1[1] And $X[0] >= $P1[0] And $X[0] <= $P2[0]
    Return 0
    Case $X[1] = $P2[1] And $X[0] >= $P1[0] And $X[0] <= $P2[0]
    Return 0
    Case Else
    Return -1
    EndSelect
    EndFunc ;==>_MathEx_Point_InRectangle

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _MathEx_GraphInfo
    ; Beschreibung...: Liefert Steigung und y-Achsenabschnitt eines Graphen zurück
    ; Syntax.........: _MathEx_GraphInfo($P1, $P2)
    ; Parameter......: $P1, $P2 - Arrays mit den Koordinaten zweier Punkte, die auf der Geraden liegen. $P2 muss einen größeren
    ; x-Wert als $P1 haben!
    ; => [0] enthält die x-Koordinate und [1] die y-Koordinate der entsprechenden Punkte
    ; Rückgabe.......: Erfolg - Gibt ein Array zurück, dass folgende Elemente enthält:
    ; | [0] - Steigung
    ; | [1] - y-Achsenabschnitt
    ; Fehler - Gibt False zurück, wenn eine der Koordinaten ungültig war.
    ; Autor(en)......: Matthias Gianfelice <matthias at gianfelice dot de>
    ; ===============================================================================================================================
    Func _MathEx_GraphInfo($P1, $P2)
    If Not IsArray($P1) Or Not IsArray($P2) Then Return False
    If Not _MathEx_IsNumber($P1[0]) Or Not _MathEx_IsNumber($P1[1]) Or Not _MathEx_IsNumber($P2[0]) Or Not _MathEx_IsNumber($P2[1]) Then Return False
    If Not $P2[0] > $P1[0] Then Return False
    Local $array_mathex_return[2]
    $array_mathex_return[0] = ($P2[1] - $P1[1]) / ($P2[0] - $P1[0])
    $array_mathex_return[1] = $P1[1] - ($array_mathex_return[0] * $P1[0])
    Return $array_mathex_return
    EndFunc ;==>_MathEx_GraphInfo

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _MathEx_Point_OnLine
    ; Beschreibung...: Prüft, ob sich ein Punkt auf einer geraden befindet.
    ; Syntax.........: _MathEx_Point_OnLine($P1, $P2, $X)
    ; Parameter......: $P1, $P2 - Arrays mit den Koordinaten zweier auf der Geraden liegenden Punkte. $P2 muss einen größeren
    ; x-Wert als $P1 haben!
    ; $X - Koordinaten des zu prüfenden Punkts
    ; => [0] enthält die x-Koordinate und [1] die y-Koordinate der entsprechenden Punkte
    ; Rückgabe.......: Erfolg - Gibt 1 zurück, wenn sich der Punkt "über" der Geraden befindet, 0 wenn er sich auf der Geraden
    ; befindet und -1 wenn er sich "unter" der geraden befindet
    ; Fehler - Gibt False zurück, wenn eine der Koordinaten ungültig war.
    ; Autor(en)......: Matthias Gianfelice <matthias at gianfelice dot de>
    ; ===============================================================================================================================
    Func _MathEx_Point_OnLine($P1, $P2, $X)
    If Not IsArray($X) Then Return False
    Local $array_mathex_graphinfo = _MathEx_GraphInfo($P1, $P2)
    If $array_mathex_graphinfo == False Then Return False
    Local $number_mathex_term = $array_mathex_graphinfo[0] * $X[0] + $array_mathex_graphinfo[1]
    If $X[1] < $number_mathex_term Then
    Return -1
    ElseIf $X[1] > $number_mathex_term Then
    Return 1
    Else
    Return 0
    EndIf
    EndFunc ;==>_MathEx_Point_OnLine

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _MathEx_Point_OnSegment
    ; Beschreibung...: Prüft, ob sich ein Punkt auf einer Strecken befindet
    ; Syntax.........: _MathEx_Point_OnSegment($P1, $P2, $X)
    ; Parameter......: $P1, $P2 - Arrays mit den Koordinaten der zwei Endpunkte der Strecke. $P2 muss einen größeren x-Wert als $P1
    ; haben!
    ; $X - Koordinaten des zu prüfenden Punkts
    ; => [0] enthält die x-Koordinate und [1] die y-Koordinate der entsprechenden Punkte
    ; Rückgabe.......: Erfolg - Gibt 1 zurück, wenn sich der Punkt auf der Strecke befindet, 0 wenn nicht.
    ; Fehler - Gibt -1 zurück, wenn eine der Koordinaten ungültig war.
    ; Autor(en)......: Matthias Gianfelice <matthias at gianfelice dot de>
    ; ===============================================================================================================================
    Func _MathEx_Point_OnSegment($P1, $P2, $X)
    $number_mathex_online = _MathEx_Point_OnLine($P1, $P2, $X)
    If $number_mathex_online == False Then Return -1
    If Not $number_mathex_online = 0 Then Return 0
    If $X[0] >= $P1[0] And $X[0] <= $P2[0] Then
    Return 1
    Else
    Return 0
    EndIf
    EndFunc ;==>_MathEx_Point_OnSegment

    [/autoit]
    Beispiel
    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Outfile=mathex-example.exe
    #AutoIt3Wrapper_UseUpx=n
    #AutoIt3Wrapper_Res_Description=Beispiel für die MathEx.au3
    #AutoIt3Wrapper_Res_Fileversion=1.0.0.0
    #AutoIt3Wrapper_Res_LegalCopyright=(c) BugFix, Matthias Gianfelice
    #AutoIt3Wrapper_Res_Language=1031
    #AutoIt3Wrapper_Au3Check_Stop_OnWarning=y
    #AutoIt3Wrapper_Run_After=%out%
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #NoTrayIcon

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

    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.3.0.0 ++
    Author: BugFix < BugFix at autoit dot de >,
    Author: Matthias Gianfelice < matthias at gianfelice dot de >

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

    Script Function:
    Beispiel für die MathEx.au3

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

    #ce ----------------------------------------------------------------------------

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

    #include "MathEx.au3"
    #include <GDIPlus.au3>

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

    If Not @Compiled Then
    MsgBox(262160, "Fehler!", "Das Skript muss kompiliert sein um zu funktionieren!" & @CRLF & @CRLF & "Drücke in SciTE bitte F7 anstatt von F5!")
    Exit
    EndIf

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

    Global $hConsoleOutput, $hConsoleInput, $AllocConsole = DllCall("kernel32", "long", "AllocConsole")

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

    If $AllocConsole[0] = 0 Then
    MsgBox(262160, "Fehler!", "Fehler beim Öffnen der Konsole!")
    Exit
    EndIf

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

    $hConsoleOutput = GetStdHandle(-11)
    If $hConsoleOutput = -1 Then
    MsgBox(262160, "Fehler!", "Fehler beim STDIN-Handle!")
    Exit
    EndIf
    $hConsoleInput = GetStdHandle(-10)
    If $hConsoleOutput = -1 Then
    MsgBox(262160, "Fehler!", "Fehler beim STDIN-Handle!")
    Exit
    EndIf

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

    Global $AllocConsole = DllCall("kernel32", "long", "SetConsoleTitleA", "str", "MathEx.au3 - Beispiel")
    If $AllocConsole[0] = 0 Then
    MsgBox(262160, "Fehler!", "Fehler beim Setzen des Titels!")
    Exit
    EndIf

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

    SetConsoleTextAttribute(0x10 + 0x20)
    WriteConsole(" " & @CRLF)
    WriteConsole(" *********************************************************** " & @CRLF)
    WriteConsole(" * * " & @CRLF)
    WriteConsole(" * MathEx.au3 - Beispiel * " & @CRLF)
    WriteConsole(" * * " & @CRLF)
    WriteConsole(" * (c) Matthias Gianfelice, 2009 * " & @CRLF)
    WriteConsole(" * * " & @CRLF)
    WriteConsole(" * Console.au3: BugFix < BugFix at autoit dot de > * " & @CRLF)
    WriteConsole(" * Danke an: BugFix, eukalyptus, Progandy, Depreed, * " & @CRLF)
    WriteConsole(" * AutoBert, Stilgar, L3viathan2142, Niko H. * " & @CRLF)
    WriteConsole(" * * " & @CRLF)
    WriteConsole(" * ... und die ganze deutsche Community!!! * " & @CRLF)
    WriteConsole(" * * " & @CRLF)
    WriteConsole(" *********************************************************** " & @CRLF)
    WriteConsole(" " & @CRLF)
    WriteConsole(" " & @CRLF)

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

    Sleep(1000)

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

    SetConsoleTextAttribute(0x0 + 0x4)
    WriteConsole(@CRLF & " Druecke ENTER" & @CRLF)

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

    ConsoleReadLine()

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

    ShowPage(1)

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

    Func ShowPage($page)
    DllCall("kernel32", "long", "CloseHandle", "long", $hConsoleOutput)
    DllCall("kernel32", "long", "CloseHandle", "long", $hConsoleInput)
    DllCall("kernel32", "long", "FreeConsole")
    $AllocConsole = DllCall("kernel32", "long", "AllocConsole")
    If $AllocConsole[0] = 0 Then
    MsgBox(262160, "Fehler!", "Fehler beim Öffnen der Konsole!")
    Exit
    EndIf
    $hConsoleOutput = GetStdHandle(-11)
    If $hConsoleOutput = -1 Then
    MsgBox(262160, "Fehler!", "Fehler beim STDIN-Handle!")
    Exit
    EndIf
    $hConsoleInput = GetStdHandle(-10)
    If $hConsoleOutput = -1 Then
    MsgBox(262160, "Fehler!", "Fehler beim STDIN-Handle!")
    Exit
    EndIf
    Global $AllocConsole = DllCall("kernel32", "long", "SetConsoleTitleA", "str", "MathEx.au3 - Beispiel")
    If $AllocConsole[0] = 0 Then
    MsgBox(262160, "Fehler!", "Fehler beim Setzen des Titels!")
    Exit
    EndIf
    WinWait("MathEx.au3 - Beispiel")
    WinMove("MathEx.au3 - Beispiel", "", 0, 0)
    SetConsoleTextAttribute(0x2 + 0x4 + 0x10 + 0x8)
    WriteConsole("MathEx.au3 - Beispiel - Seite " & $page & ": Bitte waehle eine zu testende Funktion aus: " & @CRLF)
    WriteConsole(" " & @CRLF & @CRLF)
    Switch $page
    Case 1
    SetConsoleTextAttribute(0x0 + 0x4 + 0x2 + 0x8)
    WriteConsole(" (1) _MathEx_Checksum" & @CRLF)
    WriteConsole(" (2) _MathEx_IsDivisible" & @CRLF)
    WriteConsole(" (3) _MathEx_IsPrime" & @CRLF)
    WriteConsole(" (4) _MathEx_Pi" & @CRLF)
    WriteConsole(" (5) _MathEx_Max" & @CRLF)
    WriteConsole(" (6) _MathEx_Min" & @CRLF)
    WriteConsole(" (7) _MathEx_CreatePrimes" & @CRLF)
    WriteConsole(" (8) _MathEx_IsNumber" & @CRLF)
    WriteConsole(" (9) _MathEx_Sqrt" & @CRLF)
    WriteConsole(" (0) _MathEx_Mean" & @CRLF)
    Case 2
    SetConsoleTextAttribute(0x0 + 0x4 + 0x2 + 0x8)
    WriteConsole(" (1) _MathEx_Log" & @CRLF)
    WriteConsole(" (2) _MathEx_IsEven" & @CRLF)
    WriteConsole(" (3) _MathEx_PQ" & @CRLF)
    WriteConsole(" (4) _MathEx_StandardDeviation" & @CRLF)
    WriteConsole(" (5) _MathEx_GGT" & @CRLF)
    WriteConsole(" (6) _MathEx_KGV" & @CRLF)
    WriteConsole(" (7) _MathEx_Factorial" & @CRLF)
    WriteConsole(" (8) _MathEx_Eul" & @CRLF)
    WriteConsole(" (9) _MathEx_Point_Distance" & @CRLF)
    WriteConsole(" (0) _MathEx_Point_InRectangle" & @CRLF)
    Case 3
    SetConsoleTextAttribute(0x0 + 0x4 + 0x2 + 0x8)
    WriteConsole(" (1) _MathEx_GraphInfo" & @CRLF)
    WriteConsole(" (2) _MathEx_Point_OnLine" & @CRLF)
    WriteConsole(" (3) _MathEx_Point_OnSegment" & @CRLF)
    WriteConsole(@CRLF & @CRLF & @CRLF & @CRLF & @CRLF & @CRLF & @CRLF)
    EndSwitch
    SetConsoleTextAttribute(0x2 + 0x4 + 0x10 + 0x8)
    WriteConsole(@CRLF & @CRLF & @CRLF & @CRLF & @CRLF & @CRLF & @CRLF & " " & @CRLF)
    If $page < 3 Then
    WriteConsole("(W) - Weiter")
    Else
    WriteConsole(" ")
    EndIf
    WriteConsole(" ")
    If $page > 1 Then
    WriteConsole("(Z) - Zurueck")
    Else
    WriteConsole(" ")
    EndIf
    WriteConsole(" (X) - Beenden " & @CRLF)
    WriteConsole(" " & @CRLF)
    SetConsoleTextAttribute(0x0 + 0x4 + 0x2 + 0x8)
    WriteConsole(@CRLF & "Deine Auswahl: ")
    $eingabe = ConsoleReadLine()
    If $eingabe = "10" Then
    SetConsoleTextAttribute(0x40 + 0x4 + 0x2 + 0x8)
    WriteConsole(@CRLF & @CRLF & "Ungueltige Eingabe! Druecke ENTER um zurueck zu gelangen! ")
    ConsoleReadLine()
    Return ShowPage($page)
    EndIf
    If $eingabe = "0" Then $eingabe = "10"
    If Number($eingabe) > 0 And Number($eingabe) < 11 Then
    ShowExample(Number($eingabe) + (10 * ($page - 1)))
    EndIf
    If $page < 3 Then
    If $eingabe = "W" Or $eingabe = "w" Then Return ShowPage($page + 1)
    EndIf
    If $page > 1 Then
    If $eingabe = "Z" Or $eingabe = "z" Then Return ShowPage($page - 1)
    EndIf
    If $eingabe = "X" Or $eingabe = "x" Then Exit
    SetConsoleTextAttribute(0x40 + 0x4 + 0x2 + 0x8)
    WriteConsole(@CRLF & @CRLF & "Ungueltige Eingabe! Druecke ENTER um zurueck zu gelangen! ")
    ConsoleReadLine()
    Return ShowPage($page)
    EndFunc ;==>ShowPage

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

    Func ShowExample($function)
    WriteConsole(@CRLF & @CRLF & @CRLF & @CRLF & @CRLF & @CRLF & @CRLF & @CRLF & @CRLF & @CRLF & @CRLF & @CRLF & @CRLF & @CRLF & @CRLF & @CRLF & @CRLF & @CRLF & @CRLF & @CRLF & @CRLF & @CRLF & @CRLF)
    SetConsoleTextAttribute(0x2 + 0x4 + 0x10 + 0x8)
    WriteConsole("MathEx.au3 - Beispiel - Funktionsinfos: " & @CRLF)
    WriteConsole(" " & @CRLF)
    SetConsoleTextAttribute(0x20 + 0x2 + 0x4 + 0x8)
    Switch $function
    Case 1
    WriteConsole("Funktion: _MathEx_Checksum " & @CRLF & @CRLF)
    SetConsoleTextAttribute(0x0 + 0x1 + 0x2 + 0x4)
    WriteConsole("Beispiel: Gebe eine Zahl ein, aus der verschiedene Quersummen gebildet werden" & @CRLF & "sollen: ")
    $zahl = ConsoleReadLine()
    WriteConsole("Normale Quersumme......: " & _MathEx_Checksum(Number($zahl)) & @CRLF)
    WriteConsole("Iterative Quersumme....: " & _MathEx_Checksum(Number($zahl), 1) & @CRLF)
    WriteConsole("Alternative Quersumme..: " & _MathEx_Checksum(Number($zahl), 2) & @CRLF & @CRLF)
    WriteConsole("Druecke ENTER, um ins Hauptmenue zurueck zu gelangen.")
    Case 2
    WriteConsole("Funktion: _MathEx_IsDivisible " & @CRLF & @CRLF)
    SetConsoleTextAttribute(0x0 + 0x1 + 0x2 + 0x4)
    WriteConsole("Beispiel: Gebe zuerst einen Dividenden ein: ")
    Local $zahl1 = ConsoleReadLine()
    WriteConsole(" Gebe nun einen Divisor ein......: ")
    Local $zahl2 = ConsoleReadLine()
    If _MathEx_IsDivisible($zahl1, $zahl2) Then
    WriteConsole(@CRLF & "Die Zahl " & $zahl1 & " ist durch " & $zahl2 & " teilbar!")
    Else
    WriteConsole(@CRLF & "Die Zahl " & $zahl1 & "ist ")
    SetConsoleTextAttribute(0x40 + 0x2 + 0x4 + 0x8)
    WriteConsole("NICHT")
    SetConsoleTextAttribute(0x0 + 0x1 + 0x2 + 0x4)
    WriteConsole(" durch " & $zahl2 & " teilbar!")
    EndIf
    WriteConsole(@CRLF & @CRLF & "Druecke ENTER, um ins Hauptmenue zurueck zu gelangen.")
    Case 3
    WriteConsole("Funktion: _MathEx_IsPrime " & @CRLF & @CRLF)
    SetConsoleTextAttribute(0x0 + 0x1 + 0x2 + 0x4)
    WriteConsole("Beispiel: Primzahlspirale von Ulam. Alle Zahlen werden spiralförmig angeordnet und blau hinterlegt. Primzahlen werden gelb hervorgehoben. Beispiel ist in einer externen GUI. Oeffnen? (J/N - ungueltige Eingabe = N) ")
    $eingabe = ConsoleReadLine()
    If $eingabe = "j" Or $eingabe = "J" Then
    Else
    Return ShowPage(1)
    EndIf
    Global $grenze = InputBox("Primzahlspirale von Ulam", "Bitte geben Sie den Spalten- bzw. Reihen-Wert ein (ungerade Zahl):" & @CRLF & @CRLF & "(Achtung! Ab ca. 100 sehr Ressourcenlastig!)", "", " M", "-1", "-1", "-1", "-1")
    If @error Then Return ShowPage(1)
    If _MathEx_IsEven($grenze) Then $grenze -= 1
    Local $aNumbers[$grenze][$grenze], $Schritt = ($grenze - 1) / 2
    $progress_gui = GUICreate("", 500, 50, -1, -1, 0x80000000, 128)
    GUISetBkColor(0xFFFFFF)
    $progress_1 = GUICtrlCreateProgress(0, 0, 500, 35)
    $progress_2 = GUICtrlCreateLabel("Ordne Zahlen an... (1/2)", 0, 35, 500, 15)
    GUISetState()
    For $n = 0 To $Schritt
    $aNumbers[$Schritt - $n][$Schritt - $n] = 4 * $n ^ 2 + 1
    $aNumbers[$Schritt - $n][$Schritt + $n] = 4 * $n ^ 2 - 2 * $n + 1
    $aNumbers[$Schritt + $n][$Schritt - $n] = 4 * $n ^ 2 + 2 * $n + 1
    $aNumbers[$Schritt + $n][$Schritt + $n] = 4 * $n ^ 2 + 4 * $n + 1
    If $n Then
    For $i = 1 To $n * 2 - 1
    $aNumbers[$Schritt - $n + $i][$Schritt - $n] = $aNumbers[$Schritt - $n][$Schritt - $n] + $i
    $aNumbers[$Schritt - $n + $i][$Schritt + $n] = $aNumbers[$Schritt - $n][$Schritt + $n] - $i
    $aNumbers[$Schritt + $n][$Schritt - $n + $i] = $aNumbers[$Schritt + $n][$Schritt - $n] + $i
    $aNumbers[$Schritt - $n][$Schritt - $n + $i] = $aNumbers[$Schritt - $n][$Schritt - $n] - $i
    Next
    EndIf
    GUICtrlSetData($progress_1, 100 / $Schritt * $n)
    Next
    GUICtrlSetData($progress_1, 0)
    GUICtrlSetData($progress_2, "Berechne Primzahlen... (2/2)")
    If MsgBox(262436, "Primzahlspirale von Ulam", "Soll die große GUI angezeigt werden?") = 6 Then
    $Form1 = GUICreate("Primzahlspirale von Ulam", $grenze * 50, $grenze * 20)
    For $x = 0 To $grenze - 1
    For $y = 0 To $grenze - 1
    GUICtrlCreateLabel($aNumbers[$x][$y], 50 * $x, 20 * $y, 50, 20, 0x01)
    GUICtrlSetColor(-1, 0xFFFFFF)
    If _MathEx_IsPrime($aNumbers[$x][$y]) Then
    GUICtrlSetBkColor(-1, 0xFFFF00)
    Else
    GUICtrlSetBkColor(-1, 0x0000FF)
    EndIf
    Next
    GUICtrlSetData($progress_1, 100 / $Schritt * $x)
    Next
    Sleep(500)
    GUIDelete($progress_gui)
    GUISetState(@SW_SHOW, $Form1)
    Do
    Sleep(10)
    Until GUIGetMsg() = -3
    GUIDelete($Form1)
    EndIf
    GUIDelete($progress_gui)
    $gui = GUICreate("Primzahlspirale von Ulam", $grenze, $grenze, -1, -1, -1, 128)
    $hwnd = WinGetHandle("Primzahlspirale von Ulam")
    GUISetState()
    _GDIPlus_Startup()
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hwnd)
    $hBrush = _GDIPlus_BrushCreateSolid(0xFF0000FF)
    $hBrush2 = _GDIPlus_BrushCreateSolid(0xFFFFFF00)
    _GDIPlus_GraphicsFillRect($hGraphic, 0, 0, $grenze, $grenze, $hBrush)
    _GDIPlus_BrushDispose($hBrush)
    For $x = 0 To $grenze - 1
    For $y = 0 To $grenze - 1
    If _MathEx_IsPrime($aNumbers[$x][$y]) Then
    _GDIPlus_GraphicsFillRect($hGraphic, $x, $y, 1, 1, $hBrush2)
    EndIf
    Next
    Next
    _GDIPlus_BrushDispose($hBrush2)
    Do
    Sleep(10)
    Until GUIGetMsg() = -3
    GUIDelete($gui)
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_Shutdown()
    Return ShowPage(1)
    Case 4
    WriteConsole("Funktion: _MathEx_Pi " & @CRLF & @CRLF)
    SetConsoleTextAttribute(0x0 + 0x1 + 0x2 + 0x4)
    WriteConsole("Beispiel: Pi lautet: " & _MathEx_Pi() & @CRLF & @CRLF & "Druecke ENTER um ins Hauptmenue zurueck zu gelangen")
    Case 5
    WriteConsole("Funktion: _MathEx_Max " & @CRLF & @CRLF)
    SetConsoleTextAttribute(0x0 + 0x1 + 0x2 + 0x4)
    WriteConsole("Beispiel: Gebe bitte ein paar Zahlen mit einem Komma getrennt an (z.B. '5,10,4,7.6'): ")
    $zahlen = StringSplit(ConsoleReadLine(), ",", 2)
    WriteConsole("Groesste Zahl: " & _MathEx_Max($zahlen) & @CRLF & @CRLF & "Druecke ENTER um ins Hauptmenue zurueck zu gelangen")
    Case 6
    WriteConsole("Funktion: _MathEx_Min " & @CRLF & @CRLF)
    SetConsoleTextAttribute(0x0 + 0x1 + 0x2 + 0x4)
    WriteConsole("Beispiel: Gebe bitte ein paar Zahlen mit einem Komma getrennt an (z.B. '5,10,4,7.6'): ")
    $zahlen = StringSplit(ConsoleReadLine(), ",", 2)
    WriteConsole("Kleinste Zahl: " & _MathEx_Min($zahlen) & @CRLF & @CRLF & "Druecke ENTER um ins Hauptmenue zurueck zu gelangen")
    Case 7
    WriteConsole("Funktion: _MathEx_CreatePrimes " & @CRLF & @CRLF)
    SetConsoleTextAttribute(0x0 + 0x1 + 0x2 + 0x4)
    WriteConsole("Beispiel: Alle Primzahlen zwischen 0 und 1000: " & @CRLF)
    $primzahlen = _MathEx_CreatePrimes(1000)
    For $i = 1 To $primzahlen[0]
    WriteConsole($primzahlen[$i])
    For $j = 0 To (3 - StringLen($primzahlen[$i]))
    WriteConsole(" ")
    Next
    If $i <> $primzahlen[0] Then
    WriteConsole(", ")
    If Mod($i, 10) = 0 Then WriteConsole(@CRLF)
    EndIf
    Next
    WriteConsole(@CRLF & @CRLF & "Druecke ENTER um ins Hauptmenue zurueck zu gelangen")
    Case 8
    WriteConsole("Funktion: _MathEx_IsNumber " & @CRLF & @CRLF)
    SetConsoleTextAttribute(0x0 + 0x1 + 0x2 + 0x4)
    WriteConsole("Beispiel: Gebe bitte eine Zeichenkette an, die Funktion meldet, ob es sich um eine Zahl handelt: ")
    If _MathEx_IsNumber(ConsoleReadLine()) Then
    WriteConsole("Es handelt sich um eine Zahl!")
    Else
    WriteConsole("Es handelt sich um ")
    SetConsoleTextAttribute(0x40 + 0x2 + 0x4 + 0x8)
    WriteConsole("KEINE")
    SetConsoleTextAttribute(0x0 + 0x1 + 0x2 + 0x4)
    WriteConsole(" Zahl!")
    EndIf
    WriteConsole(@CRLF & @CRLF & "Druecke ENTER um ins Hauptmenue zurueck zu gelangen")
    Case 9
    WriteConsole("Funktion: _MathEx_Sqrt " & @CRLF & @CRLF)
    SetConsoleTextAttribute(0x0 + 0x1 + 0x2 + 0x4)
    WriteConsole("Beispiel: Gebe bitte eine Zahl unter der Wurzel an................: ")
    $zahl1 = ConsoleReadLine()
    WriteConsole(" Gebe bitte an, die wievielte Wurzel gebildet werden soll: ")
    $zahl2 = ConsoleReadLine()
    If $zahl1 < 0 Then
    WriteConsole(" !!! DIE WURZEL IST NEGATIV !!!")
    Else
    WriteConsole(" Die " & $zahl2 & ". Wurzel aus " & $zahl1 & " lautet")
    For $i = 0 To 31 - StringLen($zahl1) - StringLen($zahl2)
    WriteConsole(".")
    Next
    WriteConsole(": " & _MathEx_Sqrt($zahl1, $zahl2))
    EndIf
    WriteConsole(@CRLF & @CRLF & "Druecke ENTER um ins Hauptmenue zurueck zu gelangen")
    Case 10
    WriteConsole("Funktion: _MathEx_Mean " & @CRLF & @CRLF)
    SetConsoleTextAttribute(0x0 + 0x1 + 0x2 + 0x4)
    WriteConsole("Beispiel: Gebe eine Zeichenkette von Zahlen ein, aus der verschiedene Mittel" & @CRLF & "errechnet werden sollen. Trenne diese mit einem Komma" & @CRLF & "(z.B. '5,6,7,3'): ")
    $zahlen = StringSplit(ConsoleReadLine(), ",", 2)
    WriteConsole("Harmonisches Mittel............: " & _MathEx_Mean($zahlen, 1) & @CRLF)
    WriteConsole("Geometrisches Mittel...........: " & _MathEx_Mean($zahlen, 2) & @CRLF)
    WriteConsole("Arithmetisches Mittel (Stadart): " & _MathEx_Mean($zahlen) & @CRLF)
    WriteConsole("Quadratisches Mittel...........: " & _MathEx_Mean($zahlen, 4) & @CRLF & @CRLF)
    WriteConsole("Druecke ENTER, um ins Hauptmenue zurueck zu gelangen.")
    Case 11
    WriteConsole("Funktion: _MathEx_Log " & @CRLF & @CRLF)
    SetConsoleTextAttribute(0x0 + 0x1 + 0x2 + 0x4)
    WriteConsole("Beispiel: Gebe bitte eine Basis an..: ")
    $zahl1 = ConsoleReadLine()
    WriteConsole(" Gebe bitte die Zahl an....: ")
    $zahl2 = ConsoleReadLine()
    WriteConsole(" Der Logaritmus lautet.....: " & _MathEx_Log($zahl1, $zahl2))
    WriteConsole(@CRLF & @CRLF & "Druecke ENTER, um ins Hauptmenue zurueck zu gelangen.")
    Case 12
    WriteConsole("Funktion: _MathEx_IsEven " & @CRLF & @CRLF)
    SetConsoleTextAttribute(0x0 + 0x1 + 0x2 + 0x4)
    WriteConsole("Beispiel: Gebe bitte eine Zahl an. Die Funktion meldet, ob es sich um eine gerade Zahl handelt: ")
    If _MathEx_IsEven(ConsoleReadLine()) Then
    WriteConsole("Es handelt sich um eine gerade Zahl!")
    Else
    WriteConsole("Es handelt sich ")
    SetConsoleTextAttribute(0x40 + 0x2 + 0x4 + 0x8)
    WriteConsole("NICHT")
    SetConsoleTextAttribute(0x0 + 0x1 + 0x2 + 0x4)
    WriteConsole(" um eine gerade Zahl!")
    EndIf
    WriteConsole(@CRLF & @CRLF & "Druecke ENTER um ins Hauptmenue zurueck zu gelangen")
    Case 13
    WriteConsole("Funktion: _MathEx_PQ " & @CRLF & @CRLF)
    SetConsoleTextAttribute(0x0 + 0x1 + 0x2 + 0x4)
    WriteConsole("Beispiel: Gebe bitte ein p an..: ")
    $zahl1 = ConsoleReadLine()
    WriteConsole(" Gebe bitte ein q an..: ")
    $zahl2 = ConsoleReadLine()
    $temp = _MathEx_PQ($zahl1, $zahl2)
    WriteConsole(" x1 lautet............: " & $temp[0] & @CRLF & " x2 lautet............: " & $temp[1])
    WriteConsole(@CRLF & @CRLF & "Druecke ENTER, um ins Hauptmenue zurueck zu gelangen.")
    Case 14
    WriteConsole("Funktion: _MathEx_StandardDeviation " & @CRLF & @CRLF)
    SetConsoleTextAttribute(0x0 + 0x1 + 0x2 + 0x4)
    WriteConsole("Beispiel: Gebe eine Zeichenkette von Zahlen ein, aus der die Standard-" & @CRLF & "abweichung errechnet werden soll. Trenne diese mit einem Komma" & @CRLF & "(z.B. '5,6,7,3'): ")
    $zahlen = StringSplit(ConsoleReadLine(), ",", 2)
    WriteConsole("Standardabweichung: " & _MathEx_StandardDeviation($zahlen) & @CRLF & @CRLF)
    WriteConsole("Druecke ENTER, um ins Hauptmenue zurueck zu gelangen.")
    Case 15
    WriteConsole("Funktion: _MathEx_GGT " & @CRLF & @CRLF)
    SetConsoleTextAttribute(0x0 + 0x1 + 0x2 + 0x4)
    WriteConsole("Beispiel: Gebe zwei Zahlen an, aus denen der groesste gemeinsame Teiler" & @CRLF & "errechnet werden soll. Trenne diese mit einem Komma" & @CRLF & "(z.B. '5,6'): ")
    $zahlen = StringSplit(ConsoleReadLine(), ",", 2)
    WriteConsole("ggT: " & _MathEx_GGT($zahlen[0], $zahlen[1]) & @CRLF & @CRLF)
    WriteConsole("Druecke ENTER, um ins Hauptmenue zurueck zu gelangen.")
    Case 16
    WriteConsole("Funktion: _MathEx_KGV " & @CRLF & @CRLF)
    SetConsoleTextAttribute(0x0 + 0x1 + 0x2 + 0x4)
    WriteConsole("Beispiel: Gebe zwei Zahlen an, aus denen das kleinste gemeinsame" & @CRLF & "Vielfache errechnet werden soll. Trenne diese mit einem Komma" & @CRLF & "(z.B. '5,6'): ")
    $zahlen = StringSplit(ConsoleReadLine(), ",", 2)
    WriteConsole("kgV: " & _MathEx_KGV($zahlen[0], $zahlen[1]) & @CRLF & @CRLF)
    WriteConsole("Druecke ENTER, um ins Hauptmenue zurueck zu gelangen.")
    Case 17
    WriteConsole("Funktion: _MathEx_Factorial " & @CRLF & @CRLF)
    SetConsoleTextAttribute(0x0 + 0x1 + 0x2 + 0x4)
    WriteConsole("Beispiel: Gebe eine Zahl ein, aus der verschiedene Fakultaeten errechnet werden" & @CRLF & "sollen!" & @CRLF)
    WriteConsole("Deine Zahl........: ")
    $zahl = ConsoleReadLine()
    WriteConsole("Normale Fakultaet.: " & _MathEx_Factorial($zahl) & @CRLF)
    WriteConsole("Primfakultaet.....: " & _MathEx_Factorial($zahl, 1) & @CRLF)
    WriteConsole("Superfakultaet....: " & _MathEx_Factorial($zahl, 2) & @CRLF)
    WriteConsole("Hyperfakultaelt...: " & _MathEx_Factorial($zahl, 3) & @CRLF & @CRLF)
    WriteConsole("Druecke ENTER, um ins Hauptmenue zurueck zu gelangen.")
    Case 18
    WriteConsole("Funktion: _MathEx_Eul " & @CRLF & @CRLF)
    SetConsoleTextAttribute(0x0 + 0x1 + 0x2 + 0x4)
    WriteConsole("Beispiel: Die eulersche Zahl lautet relativ genau: " & _MathEx_Eul() & @CRLF & @CRLF & "Druecke ENTER um ins Hauptmenue zurueck zu gelangen")
    Case 19
    WriteConsole("Funktion: _MathEx_Point_Distance " & @CRLF & @CRLF)
    SetConsoleTextAttribute(0x0 + 0x1 + 0x2 + 0x4)
    WriteConsole("Beispiel: Beispiel ist in einer externen GUI. Oeffnen? (J/N - ungueltige Eingabe = N) ")
    $eingabe = ConsoleReadLine()
    If $eingabe = "j" Or $eingabe = "J" Then
    Else
    Return ShowPage(2)
    EndIf
    Opt("MouseCoordMode", 2)
    $Form1 = GUICreate("Form1", 101, 101, -1, -1)
    GUISetBkColor(0xFFFFFF)
    $Label1 = GUICtrlCreateLabel("", 50, 50, 1, 1)
    GUICtrlSetBkColor($Label1, 0xFF0000)
    GUISetState()
    While 1
    $test1 = MouseGetPos()
    $test = _MathEx_Point_Distance(50, -50, $test1[0], $test1[1] * - 1)
    ToolTip($test1[0] & ":" & $test1[1] & "| Abstand: " & $test & "px")
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case - 3
    GUIDelete($Form1)
    Return ShowPage(2)
    EndSwitch
    Sleep(10)
    WEnd
    Case 20
    WriteConsole("Funktion: _MathEx_InRectangle " & @CRLF & @CRLF)
    SetConsoleTextAttribute(0x0 + 0x1 + 0x2 + 0x4)
    WriteConsole("Beispiel: Beispiel ist in einer externen GUI. Oeffnen? (J/N - ungueltige Eingabe = N) ")
    $eingabe = ConsoleReadLine()
    If $eingabe = "j" Or $eingabe = "J" Then
    Else
    Return ShowPage(2)
    EndIf
    Opt("MouseCoordMode", 2)
    $Form1 = GUICreate("Form1", 151, 151, 192, 124)
    GUISetBkColor(0xFFFFFF)
    $Label1 = GUICtrlCreateLabel("", 50, 50, 50, 50)
    GUICtrlSetBkColor($Label1, 0xFF0000)
    GUISetState()
    Global $Punkt1[2] = [50, -50], $Punkt2[2] = [100, -100]
    While 1
    $test1 = MouseGetPos()
    $test1[1] *= -1
    $test = _MathEx_Point_InRectangle($Punkt1, $Punkt2, $test1)
    If $test == False Then Exit
    ToolTip($test1[0] & ":" & $test1[1] & "|" & $test)
    Switch $test
    Case 1
    GUICtrlSetBkColor($Label1, 0x0000FF)
    Case 0
    GUICtrlSetBkColor($Label1, 0x00FF00)
    Case Else
    GUICtrlSetBkColor($Label1, 0xFF0000)
    EndSwitch
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case - 3
    GUIDelete($Form1)
    Return ShowPage(2)
    EndSwitch
    Sleep(10)
    WEnd
    Case 21
    WriteConsole("Funktion: _MathEx_GraphInfo " & @CRLF & @CRLF)
    SetConsoleTextAttribute(0x0 + 0x1 + 0x2 + 0x4)
    WriteConsole("Beispiel: Beispiel ist in einer externen GUI. Oeffnen? (J/N - ungueltige Eingabe = N) ")
    $eingabe = ConsoleReadLine()
    If $eingabe = "j" Or $eingabe = "J" Then
    Else
    Return ShowPage(3)
    EndIf
    Opt("MouseCoordMode", 2)
    $Form1 = GUICreate("Form1", 101, 101, -1, -1)
    GUISetBkColor(0xFFFFFF)
    $Label1 = GUICtrlCreateLabel("", 50, 50, 1, 1)
    GUICtrlSetBkColor($Label1, 0xFF0000)
    GUISetState()
    Local $Point[2] = [50, -50]
    While 1
    $test1 = MouseGetPos()
    $test1[1] *= -1
    $test = _MathEx_GraphInfo($Point, $test1)
    ToolTip("Funktion: f(x)=" & $test[0] & "*x+" & $test[1])
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case - 3
    GUIDelete($Form1)
    Return ShowPage(3)
    EndSwitch
    Sleep(10)
    WEnd
    Case 22
    WriteConsole("Funktion: _MathEx_Point_OnLine " & @CRLF & @CRLF)
    SetConsoleTextAttribute(0x0 + 0x1 + 0x2 + 0x4)
    WriteConsole("Beispiel: Beispiel ist in einer externen GUI. Oeffnen? (J/N - ungueltige Eingabe = N) ")
    $eingabe = ConsoleReadLine()
    If $eingabe = "j" Or $eingabe = "J" Then
    Else
    Return ShowPage(3)
    EndIf
    Opt("MouseCoordMode", 2)
    $Form1 = GUICreate("Form1", 150, 150, -1, -1)
    GUISetBkColor(0xFFFFFF)
    $Label1 = GUICtrlCreateLabel("", 0, 50, 150, 1)
    GUICtrlSetBkColor($Label1, 0xFF0000)
    GUISetState()
    Global $Punkt1[2] = [50, -50], $Punkt2[2] = [100, -50]
    While 1
    $test1 = MouseGetPos()
    $test1[1] *= -1
    $test = _MathEx_Point_OnLine($Punkt1, $Punkt2, $test1)
    If $test == False Then Exit
    ToolTip($test1[0] & ":" & $test1[1] & "|" & $test)
    Switch $test
    Case 1
    GUICtrlSetBkColor($Label1, 0x0000FF)
    Case 0
    GUICtrlSetBkColor($Label1, 0x00FF00)
    Case Else
    GUICtrlSetBkColor($Label1, 0xFF0000)
    EndSwitch
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case - 3
    GUIDelete($Form1)
    Return ShowPage(3)
    EndSwitch
    Sleep(10)
    WEnd
    Case 23
    WriteConsole("Funktion: _MathEx_Point_OnSegment " & @CRLF & @CRLF)
    SetConsoleTextAttribute(0x0 + 0x1 + 0x2 + 0x4)
    WriteConsole("Beispiel: Beispiel ist in einer externen GUI. Oeffnen? (J/N - ungueltige Eingabe = N) ")
    $eingabe = ConsoleReadLine()
    If $eingabe = "j" Or $eingabe = "J" Then
    Else
    Return ShowPage(3)
    EndIf
    Opt("MouseCoordMode", 2)
    $Form1 = GUICreate("Form1", 200, 200, -1, -1)
    GUISetBkColor(0xFFFFFF)
    $Label1 = GUICtrlCreateLabel("", 50, 100, 100, 1)
    GUICtrlSetBkColor($Label1, 0xFF0000)
    GUISetState()

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

    Global $Punkt1[2] = [50, -100], $Punkt2[2] = [150, -100]

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

    While 1
    $test1 = MouseGetPos()
    $test1[1] *= -1
    $test = _MathEx_Point_OnSegment($Punkt1, $Punkt2, $test1)
    If $test == False Then Exit
    ToolTip($test1[0] & ":" & $test1[1] & "|" & $test)
    Switch $test
    Case 1
    GUICtrlSetBkColor($Label1, 0x00FF00)
    Case Else
    GUICtrlSetBkColor($Label1, 0xFF0000)
    EndSwitch
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case - 3
    GUIDelete($Form1)
    Return ShowPage(3)
    EndSwitch
    Sleep(10)
    WEnd
    EndSwitch
    ConsoleReadLine()
    If $function < 11 Then Return ShowPage(1)
    If $function < 21 Then Return ShowPage(2)
    Return ShowPage(3)
    EndFunc ;==>ShowExample

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

    Func OnAutoItExit()
    WriteConsole(@CRLF & @CRLF & @CRLF & @CRLF & @CRLF & @CRLF & @CRLF & @CRLF & @CRLF & @CRLF & @CRLF & @CRLF & @CRLF & @CRLF & @CRLF & @CRLF & @CRLF & @CRLF & @CRLF & @CRLF & @CRLF & @CRLF & @CRLF & @CRLF)
    Sleep(500)
    WriteConsole(" MathEx.au3 - Credits: " & @CRLF)
    Sleep(100)
    WriteConsole(" ===================== " & @CRLF)
    Sleep(100)
    WriteConsole(" " & @CRLF)
    Sleep(100)
    WriteConsole(" BugFix........: _MathEx_Checksum " & @CRLF)
    Sleep(100)
    WriteConsole(" eukalyptus....: _MathEx_IsDivisible " & @CRLF)
    Sleep(100)
    WriteConsole(" Progandy......: _MathEx_IsPrime, _MathEx_CreatePrimes " & @CRLF)
    Sleep(100)
    WriteConsole(" Deepred.......: _MathEx_Pi, _MathEx_PQ " & @CRLF)
    Sleep(100)
    WriteConsole(" AutoBert......: _MathEx_CreatePrimes " & @CRLF)
    Sleep(100)
    WriteConsole(" Stilgar.......: _MathEx_Pi, _MathEx_Mean " & @CRLF)
    Sleep(100)
    WriteConsole(" L3viathan2142.: _MathEx_PQ " & @CRLF)
    Sleep(100)
    WriteConsole(" Niko H........: _MathEx_GGT, _MathEx_KGV, _MathEx_Factorial, _MathEx_Eul " & @CRLF)
    Sleep(100)
    WriteConsole(" Matthias G....: Funktionssamlung an sich, alle Funktionen " & @CRLF)
    Sleep(100)
    WriteConsole(" " & @CRLF)
    Sleep(100)
    WriteConsole(" Command.au3...: BugFix (HERZLICHEN DANK!!!) " & @CRLF)
    Sleep(100)
    WriteConsole(" " & @CRLF)
    Sleep(100)
    WriteConsole(" Beispiel......: Matthias Gianfelice " & @CRLF)
    Sleep(100)
    WriteConsole(" " & @CRLF)
    Sleep(100)
    WriteConsole("!!! > HERZLICHEN DANK AN DIE GESAMTE DEUTSCHE COMMUNITY FUER DIE HILFE ;) < !!!" & @CRLF)
    Sleep(100)
    WriteConsole(" " & @CRLF)
    Sleep(100)
    WriteConsole("Danke fuers Testen, bitte melde Probleme, Bugs oder Wuensche im deutschen Forum" & @CRLF)
    Sleep(100)
    WriteConsole(@CRLF)
    Sleep(100)
    WriteConsole(@CRLF)
    Sleep(100)
    WriteConsole(@CRLF)
    Sleep(100)
    WriteConsole(@CRLF)
    Sleep(100)
    WriteConsole("Druecke ENTER zum Beenden")
    ConsoleReadLine()
    DllCall("kernel32", "long", "CloseHandle", "long", $hConsoleOutput)
    DllCall("kernel32", "long", "CloseHandle", "long", $hConsoleInput)
    DllCall("kernel32", "long", "FreeConsole")
    EndFunc ;==>OnAutoItExit

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

    Func WriteConsole($sText)
    Local $lpBuffer = DllStructCreate("char[" & StringLen($sText) & "]"), $lpNumberOfCharsWritten = DllStructCreate('int')
    DllStructSetData($lpBuffer, 1, $sText)
    Local $ret = DllCall("kernel32", "long", "WriteConsoleA", "long", $hConsoleOutput, "ptr", DllStructGetPtr($lpBuffer), _
    "long", StringLen($sText), "ptr", DllStructGetPtr($lpNumberOfCharsWritten), "long", 0)
    If $ret[0] = 0 Then
    MsgBox(262160, "Fehler!", "Fehler beim Schreiben in die Konsole!")
    Exit
    EndIf
    Return $ret[0]
    EndFunc ;==>WriteConsole

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

    Func SetConsoleTextAttribute($wAttributes)
    Local $ret = DllCall("kernel32", "long", "SetConsoleTextAttribute", "long", $hConsoleOutput, "long", $wAttributes)
    If $ret[0] = 0 Then
    MsgBox(262160, "Fehler!", "Fehler beim Setzen der Attribute!")
    Exit
    EndIf
    Return 1
    EndFunc ;==>SetConsoleTextAttribute

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

    Func GetStdHandle($nStdHandle)
    Local $ret = DllCall("kernel32", "long", "GetStdHandle", "long", $nStdHandle)
    If $ret[0] = 0 Then Return SetError(1, 0, 0)
    Return $ret[0]
    EndFunc ;==>GetStdHandle

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

    Func ConsoleReadLine()
    Local $ZeroPos, $ConsoleReadLine = ''
    For $i = 0 To 79
    $ConsoleReadLine &= Chr(0)
    Next
    $ConsoleReadLine = ReadConsole($hConsoleInput, $ConsoleReadLine)
    $ZeroPos = StringInStr($ConsoleReadLine, Chr(0))
    If $ZeroPos > 0 Then $ConsoleReadLine = StringLeft($ConsoleReadLine, $ZeroPos - 3)
    Local $splitted_string = StringSplit($ConsoleReadLine, @CRLF)
    Return $splitted_string[1]
    EndFunc ;==>ConsoleReadLine

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

    Func ReadConsole($hConsoleInput, $ConsoleReadLine)
    Local $lpBuffer = DllStructCreate("char[80]"), $lpNumberOfCharsRead = DllStructCreate('int')
    DllStructSetData($lpBuffer, 1, $ConsoleReadLine)
    Local $ret = DllCall("kernel32", "long", "ReadConsoleA", "long", $hConsoleInput, "ptr", DllStructGetPtr($lpBuffer), _
    "long", StringLen($ConsoleReadLine), "ptr", DllStructGetPtr($lpNumberOfCharsRead), 'long', 0)
    If $ret[0] = 0 Then Return SetError(1, 0, 0)
    Return DllStructGetData($lpBuffer, 1)
    EndFunc ;==>ReadConsole

    [/autoit]


    !!! ACHTUNG !!! In SciTE bitte F7 statt F5 drücken (kompilieren), Beispiel wird danach automatisch aufgerufen!

    To-Do-Liste:

    To-Do-Liste
    • Speicher für Primzahlen (Datenbank) um höhere Primzahlen errechnen zu können in Bearbeitung...
    • Hinzufügen zahlreicher Funktionen im Bereich der Geometrie (genaueres folgt) in Bearbeitung...
    • Hinzufügen von _MathEx_Ln() von UEZ in Bearbeitung...
    Bugs

    KEINE!

    Habt ihr noch Vorschläge, Kritik, Änderungswünsche, Anregungen, etc.?

    Download:
    Im Moment sind keine Bugs bekannt, bitte meldet neue!


    Version 2.0.0.0 (Beta): autoit.de/wcf/attachment/4572/
    Version 2.0.1.0: autoit.de/wcf/attachment/5531/
    Version 3.0.0.0 (Beta): autoit.de/wcf/attachment/6584/
    Beispiel: autoit.de/wcf/attachment/6585/

  • Danke! :thumbup:

    Ich bin auch ziemlich stolz :D

    Ursprünglich wollte ich einen 50.000 Nachkommastellen langen String einspielen, aber das ist übertrieben :D
    Wäre AutoIt genauer, würde die Berechnung immer genauer werden, umso höher die mitgelieferte Integer-Zahl ist ;)

  • Yep, Pi find ich auch cool!

    Bei _MathEx_IsDivisible konnte man auch

    [autoit]

    If Mod($integer_number_mathex_dividend,$integer_number_mathex_divisor)=0 Then

    [/autoit]


    verwenden...

    Aufgabe:
    Ein Schusterbetrieb hat im Jahr 15€ Umsatz. Wieviel Umsatz hat er in 2 Jahren, wenn der Umsatz pro Jahr gleich bleibt ;)
    (projekt x / fm4)

    lgE

  • Auch dir danke!

    Ja gut, aber an sowas denkt man ja nicht ;) Wieso leicht, wenns kompliziert geht? ;)

    Die Lösung der Aufgabe lautet ja 30 :)

  • den Primzahltest kann man auch verändern ;) Man muss nur ungerade Zahlen testen, da gerade keine Primzahlen sind. (nur die 2, die dann eben vor der Schleife prüfen)

    Und zur Aufgabe von eukalyptus: LOL 15€ im Jahr.
    In zwei Jahren macht er immer noch 15€ Umsatz pro Jahr :P

  • Achso, @progandy!

    In der Schleife wird doch erst geguckt, ob durch zwei teilbar ist, wenn ja, fliegt die Zahl doch sofort durch

    [autoit]

    ExitLoop

    [/autoit]


    raus! :P

  • Gute Umsetzung !
    Weiter so !

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

    • Offizieller Beitrag

    Hi,
    weiter so.

    Bei Quersummen gibt es ja einige. Ich habe mal in einer Funktion die 'normale', die iterierte und die alternierende Quersumme als Möglichkeit. Kannst du ja bei Bedarf mit einbauen.

    [autoit]

    ConsoleWrite('Quersumme: ' & _Quersumme(1428) & @CRLF)
    ConsoleWrite('Iterierte Quersumme : ' & _Quersumme(1428,0,1) & @CRLF)
    ConsoleWrite('Alternierende Quersumme: ' & _Quersumme(1428,1) & @CRLF)

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

    Func _Quersumme($number, $aqs=0, $iteriert=0)
    While StringLen($number) > 1
    Local $split = StringSplit($number, '', 2)
    $number = 0
    If $aqs Then ; alternierende QS
    Local $mul = -1
    For $i = UBound($split) -1 To 1 Step -1
    $split[$i-1] = $split[$i] + ($mul * $split[$i-1])
    $mul *= -1
    Next
    Return $split[0]
    Else ; normale u. iterierte QS
    For $i = 0 To UBound($split) -1
    $number += $split[$i]
    Next
    If Not $iteriert Then ExitLoop ; normale QS
    EndIf
    WEnd
    Return $number
    EndFunc

    [/autoit]
  • Hier mal die Erklärung die ich dank Wikipedia mal erstellen konnte (Kurzform).

    Quersumme : Die Quersumme ist die Summe aller Ziffern einer Zahl.
    1234 = 1 + 2 + 3 + 4 = QS 10

    Iterierte Quersumme : Von der einfachen Quersumme wird weiter so lange die Quersumme gebildet, bis nur noch eine einstellige Zahl übrig bleibt.
    1234 = 1 + 2 + 3 + 4 = QS 10
    10 = 1 0 = QS 1

    Alternierende Quersumme:
    Die alternierende Quersumme erhält man, indem man bei einer Zahl, beginnend ganz rechts, die Ziffernwerte abwechselnd subtrahiert und addiert.
    1234 = 4-3+2-1 = QS 2

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • So,
    nochmal danke an alle!
    Habe jetzt an der Performance-Schraube gedreht: (Danke nochmal! ;) )

    Spoiler anzeigen
    [autoit]

    ; #INDEX# =======================================================================================================================
    ; Title .........: MathEx
    ; AutoIt Version : 3.3.0.0 ++
    ; Language ......: English
    ; Description ...: This module contains various functions for calculating.
    ; ===============================================================================================================================

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

    ; #CURRENT# =====================================================================================================================
    ; _MathEx_Checksum
    ; _MathEx_IsDivisible
    ; _MathEx_IsPrime
    ; _MathEx_AccountOfSettlement
    ; _MathEx_Pi
    ; ===============================================================================================================================

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _MathEx_Checksum
    ; Description ...: Returns the Checksum of a number
    ; Syntax.........: _MathEx_Checksum($number[, $modus=0])
    ; Parameters ....: $number - Number to calc
    ; $modus - The kind of checksum: 0: normal; 1:iterate; 2:alternate
    ; Return values .: Success - The checksum
    ; Failure - -1, sets @error
    ; |1 - $number or $modus is not an integer
    ; Author ........: BugFix <BugFix at autoit dot de>, Matthias Gianfelice <matthias at gianfelice dot de>
    ; ===============================================================================================================================
    Func _MathEx_Checksum($number, $modus = 0)
    $integer_number_mathex_checksum = Number($number)
    If IsInt($integer_number_mathex_checksum) = 1 And $integer_number_mathex_checksum > 0 And IsInt($modus) Then
    While StringLen($integer_number_mathex_checksum) > 1
    Local $array_number_mathex_checksum = StringSplit($integer_number_mathex_checksum, '', 2)
    $integer_number_mathex_checksum = 0
    If $modus = 2 Then
    Local $mul = -1
    For $i = UBound($array_number_mathex_checksum) - 1 To 1 Step -1
    $array_number_mathex_checksum[$i - 1] = $array_number_mathex_checksum[$i] + ($mul * $array_number_mathex_checksum[$i - 1])
    $mul *= -1
    Next
    Return $array_number_mathex_checksum[0]
    Else
    For $i = 0 To UBound($array_number_mathex_checksum) - 1
    $integer_number_mathex_checksum += $array_number_mathex_checksum[$i]
    Next
    If $modus = 0 Then ExitLoop
    EndIf
    WEnd
    Return $integer_number_mathex_checksum
    Else
    SetError(1)
    Return -1
    EndIf
    EndFunc ;==>_MathEx_Checksum

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _MathEx_IsDivisible
    ; Description ...: Checks, whether an integer is a prime
    ; Syntax.........: _MathEx_IsPrime($numdividend, $numdivisor)
    ; Parameters ....: $numdividend - The Dividend to check
    ; $numdivisor - The Divisor to check
    ; Return values .: Success - Returns 1
    ; Failure - Returns 0 and sets @error
    ; |0 - $numdividend and $numdivisor are not divisible
    ; |1 - $numdivisor is 0
    ; |2 - $numdividdend or $numdivisor is not an integer
    ; Author ........: eukalyptus, <eukalyptus at autoit dot de>, Matthias Gianfelice <matthias at gianfelice dot de>
    ; ===============================================================================================================================
    Func _MathEx_IsDivisible($numdividend, $numdivisor)
    $integer_number_mathex_dividend = Number($numdividend)
    $integer_number_mathex_divisor = Number($numdivisor)
    If $integer_number_mathex_divisor = 0 Then
    SetError(1)
    Return 0
    Else
    If IsInt($integer_number_mathex_dividend) = 1 And $integer_number_mathex_dividend > 0 And IsInt($integer_number_mathex_divisor) = 1 And $integer_number_mathex_divisor > 0 Then
    If Mod($integer_number_mathex_dividend, $integer_number_mathex_divisor) = 0 Then
    Return 1
    Else
    SetError(0)
    Return 0
    EndIf
    Else
    SetError(2)
    Return 0
    EndIf
    EndIf
    EndFunc ;==>_MathEx_IsDivisible

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _MathEx_IsPrime
    ; Description ...: Checks, whether an integer is a prime
    ; Syntax.........: _MathEx_IsPrime($number)
    ; Parameters ....: $number - Number to calc
    ; Return values .: Success - Returns 1
    ; Failure - Returns 0 and sets @error
    ; |0 - $number is not a prime
    ; |1 - $number is not an integer
    ; Author ........: Matthias Gianfelice <matthias at gianfelice dot de>
    ; ===============================================================================================================================
    Func _MathEx_IsPrime($number)
    $integer_number_mathex_prime = Number($number)
    If IsInt($integer_number_mathex_prime) = 1 And $integer_number_mathex_prime > 0 Then
    Local $prime = True
    For $i = 2 To $integer_number_mathex_prime / 2
    If _MathEx_IsDivisible($integer_number_mathex_prime, $i) Then
    $prime = False
    ExitLoop
    EndIf
    Next
    If $prime = False Then
    SetError(0)
    Return 0
    Else
    Return 1
    EndIf
    Else
    SetError(1)
    Return -1
    EndIf
    EndFunc ;==>_MathEx_IsPrime

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _MathEx_AccountOfSettlement
    ; Description ...: Gather a fourth size from three other sizes
    ; Syntax.........: _MathEx_AccountOfSettlement($firstsize, $secondsize, $thirdsize)
    ; Parameters ....: $firstsize, $secondsize, $thirdsize - The sizes, which are given
    ; Return values .: Success - Returns the fourth size
    ; Failure - Returns -1 and sets @error
    ; |1 - One string is not a number or zero
    ; Author ........: Matthias Gianfelice <matthias at gianfelice dot de>
    ; ===============================================================================================================================
    Func _MathEx_AccountOfSettlement($firstsize, $secondsize, $thirdsize)
    Local $integer_number_mathex_account[3]
    $integer_number_mathex_account[0] = Number($firstsize)
    $integer_number_mathex_account[1] = Number($secondsize)
    $integer_number_mathex_account[2] = Number($thirdsize)
    For $i = 0 To 2
    If $integer_number_mathex_account[$i] = 0 Then
    SetError(1)
    Return -1
    EndIf
    Next
    If $integer_number_mathex_account[0] = 1 Then
    $integer_number_mathex_account_final = $integer_number_mathex_account[1] * $integer_number_mathex_account[2]
    ElseIf $integer_number_mathex_account[2] = 1 Then
    $integer_number_mathex_account_final = $integer_number_mathex_account[1] / $integer_number_mathex_account[0]
    Else
    $integer_number_mathex_account_final = $integer_number_mathex_account[1] * $integer_number_mathex_account[0]
    $integer_number_mathex_account_final = $integer_number_mathex_account_final / $integer_number_mathex_account[2]
    EndIf
    Return $integer_number_mathex_account_final
    EndFunc ;==>_MathEx_AccountOfSettlement

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _MathEx_Pi
    ; Description ...: Returns Pi
    ; Syntax.........: _MathEx_Pi($accuracy = 100000)
    ; Parameters ....: $accuracy - The accuracy of Pi
    ; If $accuracy is -1, Pi will be very accurately
    ; Return values .: Success - Returns Pi
    ; Failure - Returns 0 and sets @error on 1 if $accuracy is not an integer.
    ; Author ........: Deepred <Deepred at autoit dot de>, Matthias Gianfelice <matthias at gianfelice dot de>
    ; ===============================================================================================================================
    Func _MathEx_Pi($accuracy = 100000)
    If IsInt($accuracy) = 0 Then
    SetError(1)
    Return 0
    Else
    Local $a = 2 * Sqrt(3), $b = 3

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

    If $accuracy = -1 Then
    Do
    $a = 2 * $a * $b / ($a + $b)
    $b = Sqrt($a * $b)
    Until $a = $b
    Else
    For $i = 1 To $accuracy
    $a = 2 * $a * $b / ($a + $b)
    $b = Sqrt($a * $b)
    Next
    EndIf
    Return $b
    EndIf
    EndFunc ;==>_MathEx_Pi

    [/autoit]

    Hoffe, das ist jetzt so ok ;)

  • Ich meine immer noch, dass man die geraden Zahlen bei _IsPrime nicht testen muss ;) Und noch was: 1 ist keine Primzahl. Aber sonst ist die echt super geworden.

    Spoiler anzeigen
    [autoit]

    Local $prime = True
    If $integer_number_mathex_prime==1 Or Mod($integer_number_mathex_prime,2)=0 Then
    $prime = False
    Else
    For $i = 3 To $integer_number_mathex_prime / 2 Step 2
    If _MathEx_IsDivisible($integer_number_mathex_prime, $i) Then
    $prime = False
    ExitLoop
    EndIf
    Next
    EndIf

    [/autoit]


    //Edit: und die Variablen solltest du alle als Local deklarieren.

  • So, nun die 3. Version, die 1 rausfiltert.
    Problem nur: Es gibt zwei Gruppen von Mathematikern, die erste sagt, 1 wäre eine Primzahl, die anderen sagen, 1 ist keine.
    Ich gehöre zu letzteren und meine die ersten glaube noch, die Erde sei eine Scheibe :rofl:

    Naja, ich habe eins verhindert.
    Aber wenn die Zahl durch 2 teilbar ist, wird die Schleife doch unterbrochen, durch ExitLoop() oder nicht?

    Spoiler anzeigen
    [autoit]

    ; #INDEX# =======================================================================================================================
    ; Title .........: MathEx
    ; AutoIt Version : 3.3.0.0 ++
    ; Language ......: English
    ; Description ...: This module contains various functions for calculating.
    ; ===============================================================================================================================

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

    ; #CURRENT# =====================================================================================================================
    ; _MathEx_Checksum
    ; _MathEx_IsDivisible
    ; _MathEx_IsPrime
    ; _MathEx_AccountOfSettlement
    ; _MathEx_Pi
    ; ===============================================================================================================================

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _MathEx_Checksum
    ; Description ...: Returns the Checksum of a number
    ; Syntax.........: _MathEx_Checksum($number[, $modus=0])
    ; Parameters ....: $number - Number to calc
    ; $modus - The kind of checksum: 0: normal; 1:iterate; 2:alternate
    ; Return values .: Success - The checksum
    ; Failure - -1, sets @error
    ; |1 - $number or $modus is not an integer
    ; Author ........: BugFix <BugFix at autoit dot de>, Matthias Gianfelice <matthias at gianfelice dot de>
    ; ===============================================================================================================================
    Func _MathEx_Checksum($number, $modus = 0)
    Local $integer_number_mathex_checksum = Number($number)
    If IsInt($integer_number_mathex_checksum) = 1 And $integer_number_mathex_checksum > 0 And IsInt($modus) Then
    While StringLen($integer_number_mathex_checksum) > 1
    Local $array_number_mathex_checksum = StringSplit($integer_number_mathex_checksum, '', 2)
    $integer_number_mathex_checksum = 0
    If $modus = 2 Then
    Local $mul = -1
    For $i = UBound($array_number_mathex_checksum) - 1 To 1 Step -1
    $array_number_mathex_checksum[$i - 1] = $array_number_mathex_checksum[$i] + ($mul * $array_number_mathex_checksum[$i - 1])
    $mul *= -1
    Next
    Return $array_number_mathex_checksum[0]
    Else
    For $i = 0 To UBound($array_number_mathex_checksum) - 1
    $integer_number_mathex_checksum += $array_number_mathex_checksum[$i]
    Next
    If $modus = 0 Then ExitLoop
    EndIf
    WEnd
    Return $integer_number_mathex_checksum
    Else
    SetError(1)
    Return -1
    EndIf
    EndFunc ;==>_MathEx_Checksum

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _MathEx_IsDivisible
    ; Description ...: Checks, whether an integer is a prime
    ; Syntax.........: _MathEx_IsPrime($numdividend, $numdivisor)
    ; Parameters ....: $numdividend - The Dividend to check
    ; $numdivisor - The Divisor to check
    ; Return values .: Success - Returns 1
    ; Failure - Returns 0 and sets @error
    ; |0 - $numdividend and $numdivisor are not divisible
    ; |1 - $numdivisor is 0
    ; |2 - $numdividdend or $numdivisor is not an integer
    ; Author ........: eukalyptus <eukalyptus at autoit dot de>, Matthias Gianfelice <matthias at gianfelice dot de>
    ; ===============================================================================================================================
    Func _MathEx_IsDivisible($numdividend, $numdivisor)
    Local $integer_number_mathex_dividend = Number($numdividend), $integer_number_mathex_divisor = Number($numdivisor)
    If $integer_number_mathex_divisor = 0 Then
    SetError(1)
    Return 0
    Else
    If IsInt($integer_number_mathex_dividend) = 1 And $integer_number_mathex_dividend > 0 And IsInt($integer_number_mathex_divisor) = 1 And $integer_number_mathex_divisor > 0 Then
    If Mod($integer_number_mathex_dividend, $integer_number_mathex_divisor) = 0 Then
    Return 1
    Else
    SetError(0)
    Return 0
    EndIf
    Else
    SetError(2)
    Return 0
    EndIf
    EndIf
    EndFunc ;==>_MathEx_IsDivisible

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _MathEx_IsPrime
    ; Description ...: Checks, whether an integer is a prime
    ; Syntax.........: _MathEx_IsPrime($number)
    ; Parameters ....: $number - Number to calc
    ; Return values .: Success - Returns 1
    ; Failure - Returns 0 and sets @error
    ; |0 - $number is not a prime
    ; |1 - $number is not an integer
    ; Author ........: Progandy <Progandy at autoit dot de>, Matthias Gianfelice <matthias at gianfelice dot de>
    ; ===============================================================================================================================
    Func _MathEx_IsPrime($number)
    Local $integer_number_mathex_prime = Number($number)
    If IsInt($integer_number_mathex_prime) = 1 And $integer_number_mathex_prime > 0 Then
    If $integer_number_mathex_prime = 1 Then
    SetError(0)
    Return 0
    EndIf
    Local $prime = True
    For $i = 2 To $integer_number_mathex_prime / 2
    If _MathEx_IsDivisible($integer_number_mathex_prime, $i) Then
    $prime = False
    ExitLoop
    EndIf
    Next
    If $prime = False Then
    SetError(0)
    Return 0
    Else
    Return 1
    EndIf
    Else
    SetError(1)
    Return -1
    EndIf
    EndFunc ;==>_MathEx_IsPrime

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _MathEx_AccountOfSettlement
    ; Description ...: Gather a fourth size from three other sizes
    ; Syntax.........: _MathEx_AccountOfSettlement($firstsize, $secondsize, $thirdsize)
    ; Parameters ....: $firstsize, $secondsize, $thirdsize - The sizes, which are given
    ; Return values .: Success - Returns the fourth size
    ; Failure - Returns -1 and sets @error
    ; |1 - One string is not a number or zero
    ; Author ........: Matthias Gianfelice <matthias at gianfelice dot de>
    ; ===============================================================================================================================
    Func _MathEx_AccountOfSettlement($firstsize, $secondsize, $thirdsize)
    Local $integer_number_mathex_account[3] = [Number($firstsize), Number($secondsize), Number($thirdsize)], $integer_number_mathex_account_final
    For $i = 0 To 2
    If $integer_number_mathex_account[$i] = 0 Then
    SetError(1)
    Return -1
    EndIf
    Next
    If $integer_number_mathex_account[0] = 1 Then
    $integer_number_mathex_account_final = $integer_number_mathex_account[1] * $integer_number_mathex_account[2]
    ElseIf $integer_number_mathex_account[2] = 1 Then
    $integer_number_mathex_account_final = $integer_number_mathex_account[1] / $integer_number_mathex_account[0]
    Else
    $integer_number_mathex_account_final = $integer_number_mathex_account[1] * $integer_number_mathex_account[0]
    $integer_number_mathex_account_final = $integer_number_mathex_account_final / $integer_number_mathex_account[2]
    EndIf
    Return $integer_number_mathex_account_final
    EndFunc ;==>_MathEx_AccountOfSettlement

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _MathEx_Pi
    ; Description ...: Returns Pi
    ; Syntax.........: _MathEx_Pi($accuracy = 100000)
    ; Parameters ....: $accuracy - The accuracy of Pi
    ; If $accuracy is -1, Pi will be very accurately
    ; Return values .: Success - Returns Pi
    ; Failure - Returns 0 and sets @error on 1 if $accuracy is not an integer.
    ; Author ........: Deepred <Deepred at autoit dot de>, Matthias Gianfelice <matthias at gianfelice dot de>
    ; ===============================================================================================================================
    Func _MathEx_Pi($accuracy = 100000)
    If IsInt($accuracy) = 0 Then
    SetError(1)
    Return 0
    Else
    Local $a = 2 * Sqrt(3), $b = 3
    If $accuracy = -1 Then
    Do
    $a = 2 * $a * $b / ($a + $b)
    $b = Sqrt($a * $b)
    Until $a = $b
    Else
    For $i = 1 To $accuracy
    $a = 2 * $a * $b / ($a + $b)
    $b = Sqrt($a * $b)
    Next
    EndIf
    Return $b
    EndIf
    EndFunc ;==>_MathEx_Pi

    [/autoit]
  • Ja, wenn die Zahl durch zwei teilbar ist, wird die Schleife unterbrochen.
    Jetzt nimm aber mal zum Beispiel 47
    -> nicht durch 2 teilbar
    -> nicht durch 3 teilbar
    -> nicht durch 4 teilbar
    -> nicht durch 5 teilbar

    ...

    -> nicht durch 6 teilbar
    -> nicht durch 7 teilbar
    -> nicht durch 8 teilbar
    -> nicht durch 9 teilbar
    -> nicht durch 10 teilbar
    -> nicht durch 11 teilbar
    -> nicht durch 12 teilbar
    -> nicht durch 13 teilbar
    -> nicht durch 14 teilbar
    -> nicht durch 15 teilbar
    -> nicht durch 16 teilbar
    -> nicht durch 17 teilbar
    -> nicht durch 18 teilbar
    -> nicht durch 19 teilbar
    -> nicht durch 20 teilbar
    -> nicht durch 21 teilbar


    ...
    alles fette könte man sich sparen ;)
    Warum ist 1 keine Primzahl?

  • Ja, is ja gut! Ist geändert ;) :
    Hab auch drei rausgenommen:

    Spoiler anzeigen
    [autoit]

    ; #INDEX# =======================================================================================================================
    ; Title .........: MathEx
    ; AutoIt Version : 3.3.0.0 ++
    ; Language ......: English
    ; Description ...: This module contains various functions for calculating.
    ; ===============================================================================================================================

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

    ; #CURRENT# =====================================================================================================================
    ; _MathEx_Checksum
    ; _MathEx_IsDivisible
    ; _MathEx_IsPrime
    ; _MathEx_AccountOfSettlement
    ; _MathEx_Pi
    ; ===============================================================================================================================

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _MathEx_Checksum
    ; Description ...: Returns the Checksum of a number
    ; Syntax.........: _MathEx_Checksum($number[, $modus=0])
    ; Parameters ....: $number - Number to calc
    ; $modus - The kind of checksum: 0: normal; 1:iterate; 2:alternate
    ; Return values .: Success - The checksum
    ; Failure - -1, sets @error
    ; |1 - $number or $modus is not an integer
    ; Author ........: BugFix <BugFix at autoit dot de>, Matthias Gianfelice <matthias at gianfelice dot de>
    ; ===============================================================================================================================
    Func _MathEx_Checksum($number, $modus = 0)
    Local $integer_number_mathex_checksum = Number($number)
    If IsInt($integer_number_mathex_checksum) = 1 And $integer_number_mathex_checksum > 0 And IsInt($modus) Then
    While StringLen($integer_number_mathex_checksum) > 1
    Local $array_number_mathex_checksum = StringSplit($integer_number_mathex_checksum, '', 2)
    $integer_number_mathex_checksum = 0
    If $modus = 2 Then
    Local $mul = -1
    For $i = UBound($array_number_mathex_checksum) - 1 To 1 Step -1
    $array_number_mathex_checksum[$i - 1] = $array_number_mathex_checksum[$i] + ($mul * $array_number_mathex_checksum[$i - 1])
    $mul *= -1
    Next
    Return $array_number_mathex_checksum[0]
    Else
    For $i = 0 To UBound($array_number_mathex_checksum) - 1
    $integer_number_mathex_checksum += $array_number_mathex_checksum[$i]
    Next
    If $modus = 0 Then ExitLoop
    EndIf
    WEnd
    Return $integer_number_mathex_checksum
    Else
    SetError(1)
    Return -1
    EndIf
    EndFunc ;==>_MathEx_Checksum

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _MathEx_IsDivisible
    ; Description ...: Checks, whether an integer is a prime
    ; Syntax.........: _MathEx_IsPrime($numdividend, $numdivisor)
    ; Parameters ....: $numdividend - The Dividend to check
    ; $numdivisor - The Divisor to check
    ; Return values .: Success - Returns 1
    ; Failure - Returns 0 and sets @error
    ; |0 - $numdividend and $numdivisor are not divisible
    ; |1 - $numdivisor is 0
    ; |2 - $numdividdend or $numdivisor is not an integer
    ; Author ........: eukalyptus <eukalyptus at autoit dot de>, Matthias Gianfelice <matthias at gianfelice dot de>
    ; ===============================================================================================================================
    Func _MathEx_IsDivisible($numdividend, $numdivisor)
    Local $integer_number_mathex_dividend = Number($numdividend), $integer_number_mathex_divisor = Number($numdivisor)
    If $integer_number_mathex_divisor = 0 Then
    SetError(1)
    Return 0
    Else
    If IsInt($integer_number_mathex_dividend) = 1 And $integer_number_mathex_dividend > 0 And IsInt($integer_number_mathex_divisor) = 1 And $integer_number_mathex_divisor > 0 Then
    If Mod($integer_number_mathex_dividend, $integer_number_mathex_divisor) = 0 Then
    Return 1
    Else
    SetError(0)
    Return 0
    EndIf
    Else
    SetError(2)
    Return 0
    EndIf
    EndIf
    EndFunc ;==>_MathEx_IsDivisible

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _MathEx_IsPrime
    ; Description ...: Checks, whether an integer is a prime
    ; Syntax.........: _MathEx_IsPrime($number)
    ; Parameters ....: $number - Number to calc
    ; Return values .: Success - Returns 1
    ; Failure - Returns 0 and sets @error
    ; |0 - $number is not a prime
    ; |1 - $number is not an integer
    ; Author ........: Progandy <Progandy at autoit dot de>, Matthias Gianfelice <matthias at gianfelice dot de>
    ; ===============================================================================================================================
    Func _MathEx_IsPrime($number)
    Local $integer_number_mathex_prime = Number($number)
    If IsInt($integer_number_mathex_prime) = 1 And $integer_number_mathex_prime > 0 Then
    If $integer_number_mathex_prime = 1 Then
    SetError(0)
    Return 0
    EndIf
    Local $prime = True
    If _MathEx_IsDivisible($integer_number_mathex_prime, 2) Or _MathEx_IsDivisible($integer_number_mathex_prime, 3) Then
    $prime = False
    Else
    For $i = 2 To $integer_number_mathex_prime / 2
    If _MathEx_IsDivisible($integer_number_mathex_prime, $i) Then
    $prime = False
    ExitLoop
    EndIf
    Next
    EndIf
    If $prime = False Then
    SetError(0)
    Return 0
    Else
    Return 1
    EndIf
    Else
    SetError(1)
    Return -1
    EndIf
    EndFunc ;==>_MathEx_IsPrime

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _MathEx_AccountOfSettlement
    ; Description ...: Gather a fourth size from three other sizes
    ; Syntax.........: _MathEx_AccountOfSettlement($firstsize, $secondsize, $thirdsize)
    ; Parameters ....: $firstsize, $secondsize, $thirdsize - The sizes, which are given
    ; Return values .: Success - Returns the fourth size
    ; Failure - Returns -1 and sets @error
    ; |1 - One string is not a number or zero
    ; Author ........: Matthias Gianfelice <matthias at gianfelice dot de>
    ; ===============================================================================================================================
    Func _MathEx_AccountOfSettlement($firstsize, $secondsize, $thirdsize)
    Local $integer_number_mathex_account[3] = [Number($firstsize), Number($secondsize), Number($thirdsize)], $integer_number_mathex_account_final
    For $i = 0 To 2
    If $integer_number_mathex_account[$i] = 0 Then
    SetError(1)
    Return -1
    EndIf
    Next
    If $integer_number_mathex_account[0] = 1 Then
    $integer_number_mathex_account_final = $integer_number_mathex_account[1] * $integer_number_mathex_account[2]
    ElseIf $integer_number_mathex_account[2] = 1 Then
    $integer_number_mathex_account_final = $integer_number_mathex_account[1] / $integer_number_mathex_account[0]
    Else
    $integer_number_mathex_account_final = $integer_number_mathex_account[1] * $integer_number_mathex_account[0]
    $integer_number_mathex_account_final = $integer_number_mathex_account_final / $integer_number_mathex_account[2]
    EndIf
    Return $integer_number_mathex_account_final
    EndFunc ;==>_MathEx_AccountOfSettlement

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _MathEx_Pi
    ; Description ...: Returns Pi
    ; Syntax.........: _MathEx_Pi($accuracy = 100000)
    ; Parameters ....: $accuracy - The accuracy of Pi
    ; If $accuracy is -1, Pi will be very accurately
    ; Return values .: Success - Returns Pi
    ; Failure - Returns 0 and sets @error on 1 if $accuracy is not an integer.
    ; Author ........: Deepred <Deepred at autoit dot de>, Matthias Gianfelice <matthias at gianfelice dot de>
    ; ===============================================================================================================================
    Func _MathEx_Pi($accuracy = 100000)
    If IsInt($accuracy) = 0 Then
    SetError(1)
    Return 0
    Else
    Local $a = 2 * Sqrt(3), $b = 3
    If $accuracy = -1 Then
    Do
    $a = 2 * $a * $b / ($a + $b)
    $b = Sqrt($a * $b)
    Until $a = $b
    Else
    For $i = 1 To $accuracy
    $a = 2 * $a * $b / ($a + $b)
    $b = Sqrt($a * $b)
    Next
    EndIf
    Return $b
    EndIf
    EndFunc ;==>_MathEx_Pi

    [/autoit]


    Tut mir Leid, dass ich nicht Mod benutzt habe, aber ich bleibe meinen eigenen Funktionen treu :rofl:

  • Ich hab hier noch eine Primzahl UDF:

    [autoit]

    Func IsPrime2($iValue)
    Switch IsNumber($iValue)
    Case False
    $iValue = Number($iValue)
    EndSwitch
    Switch True
    Case $iValue = 2
    Return True
    Case $iValue < 2 Or Mod($iValue,2) = 0 Or IsFloat($iValue)
    Return False
    EndSwitch
    $maxTest = Floor(Sqrt($iValue))
    For $i = 3 To $maxTest Step 2
    If Mod($iValue, $i) = 0 Then Return False
    Next
    Return True
    EndFunc ;==>IsPrime2

    [/autoit]