Kettenbruchentwicklung

  • Hier meine kleinen UDFs zur Kettenbruchentwicklung:

    Zahl in Kettenbruch umwandeln bzw. umrechnen
    [autoit]

    #include-once
    #include <Array.au3>
    Func _ZahlInKettenbruch ($iDivident, $iDivisor);Rechnet eine Zahl bzw. einen Bruch (z. B. 17/10) in einen Kettenbruch der Form (1; 1, 2, 3) um.
    _EuklidischerAlgorithmus_I ($iDivident, $iDivisor)
    _ArrayDelete($aKettenbruch, UBound($aKettenbruch)-1)
    For $i = 0 To UBound($aKettenbruch)-(1+2)
    $aKettenbruch[$i] = ($aKettenbruch[$i]-$aKettenbruch[$i+2])/$aKettenbruch[$i+1]
    Next
    _ArrayDelete($aKettenbruch, UBound($aKettenbruch)-1)
    ConsoleWrite($iDivident & " / " & $iDivisor & " = " & "(" & StringReplace(_ArrayToString($aKettenbruch, ", "), ",", ";", 1) & ")" & @CRLF)
    EndFunc

    [/autoit]
    Kettenbruch in Zahl umwandeln bzw. umrechnen
    [autoit]

    #include-once
    #include <Array.au3>
    Func _KettenbruchInZahl ($aKettenbruch);Rechnet einen Kettenbruch der Form (0; 1, 2, 3, 4, 5, 6, 7, 8, 9) (in einem Array, d. h. ohne Semikolon) in eine Zahl bzw. einen Bruch um.
    Local $aZahl[2] = [0, 1], $z = 1
    For $i = UBound($aKettenbruch)-1 To 0 Step -1
    _ArrayAdd($aZahl, "")
    $z += 1
    $aZahl[$z] = $aKettenbruch[$i] * $aZahl[$z-1] + $aZahl[$z-2]
    Next
    ConsoleWrite("(" & StringReplace(_ArrayToString($aKettenbruch, ", "), ",", ";", 1) & ") = " & $aZahl[UBound($aZahl)-1] & " / " & $aZahl[UBound($aZahl)-2] & @CRLF)
    EndFunc

    [/autoit]

    Hier noch der benötigte Euklidische Algorithmus in zwei Versionen:

    Euklidischer Algorithmus -- Version I
    [autoit]

    Func _EuklidischerAlgorithmus_I ($a, $b);Berechnet den größten gemeinsamen Teiler der beiden Zahlen $a und $b [rekursive Version]
    _ArrayAdd($aKettenbruch, "")
    $n += 1
    If $b = 0 Then
    $aKettenbruch[$n] = $a
    Return $a
    Else
    $aKettenbruch[$n] = $a
    Return _EuklidischerAlgorithmus_I ($b, Mod($a, $b))
    EndIf
    EndFunc

    [/autoit]
    Euklidischer Algorithmus -- Version II
    [autoit]

    Func _EuklidischerAlgorithmus_II ($a, $b);s. o. [iterative Version]
    Local $h
    While $b <> 0
    $h = Mod($a, $b)
    $a = $b
    $b = $h
    WEnd
    Return $a
    EndFunc

    [/autoit]

    Als globale Variablen werden

    [autoit]

    Global $aKettenbruch[1]

    [/autoit]

    und

    [autoit]

    Global $n = -1

    [/autoit]

    benötigt.