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