![]() |
Annäherung eines Bruches
Liste der Anhänge anzeigen (Anzahl: 1)
Diese rekursive Prozedur nähert einen Bruch mit Hilfe eines
![]() Sie erwartet 3 Parameter: :arrow: Den Zähler (var) :arrow: Den Nenner (var) :arrow: 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:
[edit=flomei]Auf Wunsch eine kleine Änderung vorgenommen. Mfg, flomei[/edit]
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=Chakotay1308]Klassifizierung. Mfg, Chakotay1308[/edit] [edit=fkerber]Neu abgespeichert wg. Code-Highlighting. Mfg, fkerber[/edit] |
Re: Annäherung eines Bruches
Zur Erklärung, was ein Kettenbruch ist
Wir nehmen obiges Beispiel (1461 / 651)
Code:
bei der erreichten Tiefe wird einfach gerundet. (z.B. 9/10 auf 1 >>> 15 + 1)
1461 159 1 1 1
---- = 2 --- = 2 --- = 2 ------ = 2 --------- 641 651 651 10 1 --- 4 --- 4 ------ 159 159 9 15 -- 10 |________________|________________________|__________________|_________ Tiefe 0 Tiefe 1 Tiefe 2 Tiefe 3 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz