Wir hatten das Thema ja vor kurzem erst
hier in der DP.
Es fehlt bei dir das zerlegen des Bruches in Ganzzahl, Zähler und Nenner!
Meine Lösung:
Delphi-Quellcode:
TBruch = record
Zaehler: integer;
Nenner: Integer;
Ganzzahl: integer;
end;
function ggT(a, b: integer): integer;
var
x: integer;
begin
if b <> 0 then
repeat
x:=a mod b;
a:=b;
b:=x;
until x = 0;
result := abs(a); //falls a, oder b negativ
end;
function Kuerzen(Bruch: Tbruch;): TBruch;
var
Teiler: Integer;
TempZaehler, TempGanzzahl: Word;
begin
Teiler := ggt(bruch.Zaehler, bruch.Nenner);
if Teiler <> 0 then
begin
Result.Zaehler := Round(bruch.Zaehler / Teiler);
Result.Nenner := Round(bruch.Nenner / Teiler);
TempZaehler := result.Zaehler; // musste ich mit temporären Brüchen rechnen, weil die folgende Funktionen werte des Typs Word verlangt
TempGanzzahl := 0;
DivMod(result.zaehler, Result.Nenner, TempGanzzahl, TempZaehler); // hier erhält man die Ganzzahl mithilfe der Restberchnung
Result.Zaehler := TempZaehler;
Result.Ganzzahl := TempGanzzahl;
end;
end;
Edit: Link zum angesprochenen Thema hinzugefügt.
[edit=CalganX]Code-Style angepasst. Mfg, CalganX[/edit]
Es ist unmöglich, witzig zu sein ohne ein bisschen Bosheit. Die Bosheit eines guten Witzes ist der Widerhaken, der ihn haften lässt. - Georg Christoph Lichtenberg