Thema: Delphi Kürzen eines Bruches

Einzelnen Beitrag anzeigen

Benutzerbild von TonyR
TonyR

Registriert seit: 17. Jun 2006
Ort: Bautzen
503 Beiträge
 
FreePascal / Lazarus
 
#2

Re: Kürzen eines Bruches

  Alt 10. Mär 2007, 23:32
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
  Mit Zitat antworten Zitat