AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Code-Bibliothek Library: Sonstiges Delphi Annäherung eines Bruches
Thema durchsuchen
Ansicht
Themen-Optionen

Annäherung eines Bruches

Ein Thema von jfheins · begonnen am 4. Dez 2004 · letzter Beitrag vom 8. Dez 2004
Antwort Antwort
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#1

Annäherung eines Bruches

  Alt 4. Dez 2004, 14:10
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]
Angehängte Dateien
Dateityp: exe kettenbruch.exe (380,0 KB, 49x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

Re: Annäherung eines Bruches

  Alt 8. Dez 2004, 16:36
Zur Erklärung, was ein Kettenbruch ist

Wir nehmen obiges Beispiel (1461 / 651)

Code:
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
bei der erreichten Tiefe wird einfach gerundet. (z.B. 9/10 auf 1 >>> 15 + 1)
  Mit Zitat antworten Zitat
Antwort Antwort

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:11 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz