Diese rekursive Prozedur nähert einen Bruch mit Hilfe eines
Kettenbruches an.
Sie erwartet 3 Parameter:
Den Zähler (
var)
Den Nenner (
var)
Die Tiefe
Je größer der letzte Parameter, desto genauer ist die Näherung, und desto größe werden die Zahlen.
Beispiel:
Zähler: 1461
Nenner: 651
Tiefe: 0
Ergebnis: 2/1
Tiefe: 1
Ergebnis: 9/4
Tiefe: 2
Ergebnis: 101/45
Tiefe: 3
Ergebnis: 193/86
Tiefe: 4
Ergebnis: 294/131
Tiefe: 5
Ergebnis: 487/217
Das letzte Ergebnis ist der vollständig gekürzte Bruch,
die Differenz zum Ausgangsbruch beträgt also 0.
Es wird nur mit positiven Zahlen gerechnet, ein eventuelles Vorzeichen wird entfernt !
Delphi-Quellcode:
procedure Kettenbruch (var z1, z2: Int64; Ebenen: Byte);
var
Ganzzahl, Zaehler, Nenner: Int64;
begin
z1 := abs(z1); // Vorzeichen werden entfernt
z2 := abs(z2);
// aus dem (unechten) Bruch wird ein gemischter Bruch
Ganzzahl := z1 DIV z2;
Zaehler := z1 - (Ganzzahl * z2);
Nenner := z2;
// Falls die angegebene Tiefe erreicht ist, oder der Ausgangsbruch vollständig angenähert wurde,
// wird der gemischte Bruch auf einen unechten X/1 Bruch gerundet.
if (Ebenen = 0) OR (Zaehler = 0) then
begin
Zaehler := Ganzzahl + round (Zaehler / Nenner);
Nenner := 1;
end
else // Rekusion mit dem Kehrwert des Bruches aus dem gem. Bruch; gem. Bruch > unechter Bruch
begin
Kettenbruch (Nenner, Zaehler, Ebenen - 1);
Zaehler := Zaehler + (Ganzzahl * Nenner);
end;
// var-parameter werden verändert
z1 := Zaehler;
z2 := Nenner;
end;
[edit=flomei]Auf Wunsch eine kleine Änderung vorgenommen. Mfg, flomei[/edit]
[edit=Chakotay1308]Klassifizierung. Mfg, Chakotay1308[/edit]
[edit=fkerber]Neu abgespeichert wg. Code-Highlighting. Mfg, fkerber[/edit]