Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi wie genau programmier i das GGT? (https://www.delphipraxis.net/12535-wie-genau-programmier-i-das-ggt.html)

Scryless 29. Nov 2003 12:32


wie genau programmier i das GGT?
 
Liste der Anhänge anzeigen (Anzahl: 1)
also,ich schätz zum Programmieren von Brüchenkürzen,benötige ich das GGT,doch wie genau programmier ich das,ist mir total unbekannt,kann mir das jemand in anfänger language erklären und eine Pozedur angeben.

Das GGt (größter gemeinsamer Teiler) würd ich gern bei deisem Bruchrechner einsetzen können und zwar in den Befehl (Clickverfahren) "Kürzen"

THAnKS


P.s (ich sitze hier und bekomme Kürzvorschläge zum Programmieren,doch jedes MAL erscheint ne Fehlermeldung...verdammt!

Ich brauch Hilfe!! :wall:

siehe DOWNLOAD..

Christian S. 29. Nov 2003 13:46

Re: wie genau programmier i das GGT?
 
Hallo!

Hiermit berechnest Du den ggT mittels des Euklidischen Algorithmus. Du musst Dir lediglich noch Gedanken drüber machen, was passiert, wenn Zähler oder Nenner kleiner Null sind.

Delphi-Quellcode:
function ggT(zaehler, nenner : Integer) : Integer;
VAR r : INTEGER;
begin
  if nenner = 0 then
  begin
    result := 0;
    exit;
  end;

  while nenner > 0 do
  begin
    r := zaehler mod nenner;
    zaehler := nenner;
    nenner := r;
  end;

  result := zaehler;
end;
MfG
Peter

Niels 29. Nov 2003 18:06

Re: wie genau programmier i das GGT?
 
Ich hab hier noch ne kurze Version von ggT. Ist halt rekursiv und deshalb vieleicht net so einfach verständlich.

Delphi-Quellcode:
function ggt(a,b:longint): longint;
begin
  if b = 0 then result := a;
  else
  result := ggt(b,a mod b);
end ggt;

evilseven 12. Jun 2004 22:40

Re: wie genau programmier i das GGT?
 
Gibt es eigentlich auch eine Möglichkeit, das Ganze ohne Integer zu programmieren? So funktioniert das Kürzen nämlich für größere Zahlen nicht.

DP-Maintenance 12. Jun 2004 22:46

DP-Maintenance
 
Dieses Thema wurde von "Luckie" von "Multimedia" nach "Programmieren allgemein" verschoben.
Was hat das mit Multimedia zu tun? :roll:

Niels 13. Jun 2004 11:08

Re: wie genau programmier i das GGT?
 
Moin,
du kannst int64 benutzen, da sind die Zahlen ein bisschen größer. :wink:

MfG Niels

evilseven 13. Jun 2004 11:44

Re: wie genau programmier i das GGT?
 
Das Problem ist nur, dass ich gerade einen Algorithmus habe, der mit SEHR großen Zahlen arbeitet, da nützt Int64 leider auch nichts. Bin noch am Suchen einer Lösung.

CalganX 13. Jun 2004 12:11

Re: wie genau programmier i das GGT?
 
Hi,
da wirst du dir wohl selber einen [dp="Langzahlarithmetik"]Typen für Langzahlarithmetik[/dp] schreiben müssen. Bzw. nach selbigem suchen (bspw. bei Torry).

Chris

negaH 14. Jun 2004 10:05

Re: wie genau programmier i das GGT?
 
@evilseven,

den ggT = GCD = Greatest Common Divisor, kannst du so wie oben gezeigt auch auf größere Zahlen adaptieren. Der Algorithmus selber bleibt also gleich. Du benötigst also eine Bibliothek die es dir ermöglicht mit sehr großen Zahlen zu rechnen. Nun, da deine Frage davon ausging das du einen ggT() für sehr große Zahlen benötigst gehe ich mal davon aus das du schon eine solche "BigNum", "Large Integer" Library benutzt.

Der obige Algorithmus ist die einfachste Form des GCD, der euklidsche Algorithmus. Gute Large Integer Librarys nutzen einen anderen Algorithmus der nach Lehmer oder Sorensen arbeitet. Der euklidsche Algo. extrahtiert von rechts nach links, also vom LSB zum MSB der Zahlen. Die Methode nach Lehmer oder Sorenson arbeiten aber umgedreht, sie berechnen die Subprodukte von Oben nach Unten, sprich vom MSB zum LSB. Dadurch sind diese Verfahren weit effizienter. Sie bauen sozusagen eine Verhältnissgleichung der MSB's beider Zahlen zueinander auf und reduzieren dann beide Zahlen so lange bis der GCD gefunden wurde. Gerade mit sehr großen Zahlen führt dies zu einer drastischen Beschleunigung des GCD.

Gruß Hagen

DP-Maintenance 14. Jun 2004 13:19

DP-Maintenance
 
Dieses Thema wurde von "sakura" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Das ist eine Delphi-Frage ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:37 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz