![]() |
Kürzen eines Bruches
Mit der folgenden Funktion ist es möglich, einen Bruch mit Hilfe des ggT vollkommen zu kürzen:
Delphi-Quellcode:
type TBruch = record
zaehler,nenner :Integer; end; ... Function Kuerzen(zaehler,nenner:integer):Tbruch; var a,b,rest:Integer; begin If (zaehler = 0) or (nenner = 0) then exit; ////größere Zahl bestimmen/////////// If abs(Zaehler) < abs(Nenner) then begin a := Zaehler; b := Nenner; end else begin b := Zaehler; a := Nenner; end; ///////////ggT////////////// rest:= a mod b; while rest<>0 do begin rest:=a mod b; a:=b; b:=rest; end; //////Ergebnis ausgeben////// Result.zaehler := Round(Zaehler / a); Result.nenner := Round(Nenner / a); end; |
Re: Kürzen eines Bruches
Wir hatten das Thema ja vor kurzem erst
![]() Es fehlt bei dir das zerlegen des Bruches in Ganzzahl, Zähler und Nenner! Meine Lösung:
Delphi-Quellcode:
Edit: Link zum angesprochenen Thema hinzugefügt.
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=CalganX]Code-Style angepasst. Mfg, CalganX[/edit] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz