Thema: Delphi immer noch beim kürzen!

Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.147 Beiträge
 
Delphi 12 Athens
 

Re: immer noch beim kürzen!

  Alt 29. Nov 2003, 11:37
http://www.FrankNStein.de/Smiley-Wolke.gif Hallöle Scryless,

Die Funktion von Min(), Abs() und Break hat ja Miri schon erklärt.

Ursprünglich sah die Schleife so aus:
Delphi-Quellcode:
{kürzen}
For I := 2 to Abs(ez) {oder Abs(en)} do
  If (ez mod I2 = 0) and (en mod I2 = 0) Then Begin
    ez2 := ez div I2;
    en2 := en div I2;
  End;
ez := ez2;
en := en2;
Dabei wird aber das Ergebnist mehrmals berechnet und die Schleife immer komplett durchlaufen - daher wurde das noch etwas beschleunigt:
Delphi-Quellcode:
    {kürzen}
{1} For I := Min(Abs(ez), Abs(en)) downto 2 do
{2}   If (ez mod I2 = 0) and (en mod I2 = 0) Then Begin
        ez := ez div I2;
        en := en div I2;
{3}     Break;
      End;
  1. Min(Abs(Z1), Abs(Z1)) sucht einfach die kleinste der beiden Zahlen, ohne das Vorzeichen zu beachten
    Und dann wird in der Schleife (I) bis zur 2 runtergezählt
  2. prüft ob Nenner und Zähler durch die aktuelle Zahl (I) ohne Rest teilbar sind
  3. beendet die For-Schleife, sobald ein Ergebnis (GGT - Größter Gemeinsamer Teiler) gefunden wurde



Kannste mal sagen bei welcher Rechenaufgabe es hagt und eventuell nochmal dein Prog zeigen.


http://www.FrankNStein.de/Smiley-Kuss.gif * * http://www.FrankNStein.de/Smiley-Spinne.gif * * * http://www.FrankNStein.de/Smiley-Winken.gif
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat