Einzelnen Beitrag anzeigen

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