Thema: Delphi immer noch beim kürzen!

Einzelnen Beitrag anzeigen

Benutzerbild von Mirilin
Mirilin

Registriert seit: 21. Dez 2002
Ort: Lenzburg
861 Beiträge
 
Delphi 6 Professional
 
#2

Re: immer noch beim kürzen!

  Alt 29. Nov 2003, 10:28
Scryless

Delphi-Quellcode:
uses
  ... JCLMath, Math;

...

type
  TBruch = record
    Zaehler: Integer;
    Nenner : Integer;
  end;

...

function Kuerzen(const Bruch: TBruch): TBruch;
var
  GGT : Integer;
begin
  GGT := GCD(Bruch.Zaehler, Bruch.Nenner);
  Result.Zaehler := Bruch.Zaehler div GGT;
  Result.Nenner := Bruch.Nenner div GGT;
end;

...

function Kuerzen2(const Bruch: TBruch): TBruch;
var
  Teiler : Integer;
  MaxTeiler : Integer;
begin
  Result := Bruch;
  MaxTeiler := Min(Abs(Bruch.Zaehler), Abs(Bruch.Nenner));
  for Teiler := MaxTeiler downto 2 do
  begin
    if (Bruch.Zaehler mod Teiler = 0) and (Bruch.Nenner mod Teiler = 0) then
    begin
      Result.Zaehler := Bruch.Zaehler div Teiler;
      Result.Nenner := Bruch.Nenner div Teiler;
      Break;
    end;
  end;
end;

...
Die erste Funktion benötigt die in der Unit JclMath (-->Jedis) zur Verfügung gestellte Funktion GCD (auf Deutsch GGT).

Die beiden Funktionen hier tun eigentlich das gleiche.
Kuerzen greifft auf die Funktion GCD zurück um den GGT zu erhalten und Teilt den Bruch durch diesen, und kuerzen2 errechnet ihn kurz selber.
Und zwar tut sie das so :
- Sie fäng an, beim kleineren der beiden Werte (--> Min(...) ).
- Sie zählt nun diesen schrittweise nach unten bis 2, denn das ist der letzte sinnvolle Teiler.
- Findet sie eine Zahl im Bereich zwischen 2 und der kleineren der Beiden (im Code Maxteiler) dann teilt sie die beiden Zahlen durch diesen, und verlässt die Schleife.


Ps. (Wort markieren --> F1; oder klick)
Min() : gibt die kleinere von 2 Zahlen zurück.
Abs() : gibt den Betrag einer Zahl aus.
Break : verlässt eine Schleife.



Hoffentlich konnte ich Dir damit helfen.


mit freundlichen Grüssen Tobias
Tobias
Die Physik ist für die Physiker eigentlich viel zu schwer.
  Mit Zitat antworten Zitat