AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi immer noch beim kürzen!
Thema durchsuchen
Ansicht
Themen-Optionen

immer noch beim kürzen!

Ein Thema von Scryless · begonnen am 29. Nov 2003 · letzter Beitrag vom 29. Nov 2003
Antwort Antwort
Benutzerbild von Mirilin
Mirilin

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

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
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:53 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