AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein ggT und KgV von 2 Zahlen berechnen - absolut keine Ahnung
Thema durchsuchen
Ansicht
Themen-Optionen

ggT und KgV von 2 Zahlen berechnen - absolut keine Ahnung

Ein Thema von Connor Temple · begonnen am 16. Nov 2010 · letzter Beitrag vom 23. Nov 2010
Thema geschlossen
Seite 6 von 9   « Erste     456 78     Letzte »    
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#51

AW: ggT und KgV von 2 Zahlen berechnen - absolut keine Ahnung

  Alt 21. Nov 2010, 18:49
Ich hoffe der Lösungsweg ist einigermaßen verständlich.
Mag ja sein, aber leider ist er ziemlich falsch. Deine Funktion bietet noch nicht einmal die Symmetrie ggt(a,b)=ggt(b,a), wie man leicht an ggt(2,-2) = 0 und ggt(-2,2) = 2 sieht. Außerdem werden leider wieder einmal völlig falsche Werte für negative Zahlen geliefert, einerseits mit voller Absicht: ggt(a,b) = 0 für b <= 0! (Warum das ganze?). Andererseits (wohl) aus Unkenntnis der mod-Funktion: ggt(-5,2) = -1. Eine verbesserte Version könne so aussehen:
Delphi-Quellcode:
 function ggt(zahl1,zahl2: integer): integer;
var
  rest: integer;
begin
  zahl1 := abs(zahl1);
  zahl2 := abs(zahl2);
  while zahl2>0 do begin
    rest := zahl1 mod zahl2;
    zahl1 := zahl2;
    zahl2 := rest;
  end;
  ggt := zahl1;
end;
 
wolfgang_SV

Registriert seit: 9. Nov 2007
Ort: Neumünster
39 Beiträge
 
#52

AW: ggT und KgV von 2 Zahlen berechnen - absolut keine Ahnung

  Alt 21. Nov 2010, 19:27
@gammatester

das was du nun erzählst ist völlig daneben..

nimm die funktion aus meinem ersten Programmbeispiel ..#5

ggt(a,b) liefert dasgleiche wie ggt(b,a)

sollten a oder b negativ sein , was von der mathematischen definition
bez. modulo gar nicht vorgesehen ist ( hier unterscheidet sich mal wieder Mathematik von programmier-sprachen)

dann sollte man so vorgehen :
c:=abs(ggt(a,b));

Geändert von wolfgang_SV (21. Nov 2010 um 19:31 Uhr)
 
wolfgang_SV

Registriert seit: 9. Nov 2007
Ort: Neumünster
39 Beiträge
 
#53

AW: ggT und KgV von 2 Zahlen berechnen - absolut keine Ahnung

  Alt 21. Nov 2010, 19:50
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

function ggt(a,b : integer) : integer;
  var r : integer;
  begin
 
  repeat
  r:= a mod b;
  a:=b;
  b:=r;
  until r=0;

  result:=a;
  end;

procedure TForm1.Button1Click(Sender: TObject);
  var a,b,c : integer;
  begin
  a:=strtoint(edit1.text);
  b:=strtoint(edit2.text);

  c:=abs(ggt(a,b));

  label1.caption:=inttostr(c);
  end;

end.
mehr sag ich jetzt nicht...
weil so geht es...
und wenn man jetzt für a oder b den wert 0 eingibt...
ok.. dann kann man das ja abfangen...

Geändert von wolfgang_SV (21. Nov 2010 um 21:44 Uhr)
 
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#54

AW: ggT und KgV von 2 Zahlen berechnen - absolut keine Ahnung

  Alt 21. Nov 2010, 20:06
@gammatester

das was du nun erzählst ist völlig daneben..
Was ist völlig daneben? Ein fehlerhaftes Ergebnis meiner Funktion würde mir reichen.
nimm die funktion aus meinem ersten Programmbeispiel ..#5

ggt(a,b) liefert dasgleiche wie ggt(b,a)
Wie man leicht sieht, beziehe ich mich auf Klaus (wer lesen kann, ist klar im Vorteil).
sollten a oder b negativ sein , was von der mathematischen definition
bez. modulo gar nicht vorgesehen ist ( hier unterscheidet sich mal wieder Mathematik von programmier-sprachen)

dann sollte man so vorgehen :
c:=abs(ggt(a,b));
Ich 'erzähle' nichts, sondern zeige nur die Ergebnis von Klaus's letzter Funktion. Wenn Du meinst, daß ist 'daneben". dann stimmen wird ja überein. Wir stimmen allerdings nicht überein in folgenden Punkten:

- der ggt von negativen Zahlen und mod von negativen Zahlen ist selbstverständlich mathematisch vorgesehen

- Programmiersprachen unterscheiden sich darin nicht: mod ist zumindest in Pascal für negative Zahlen definiert. ggt nicht, muß also selbstgeschrieben werden. Aber möglichst richtig. Pascal mod und mathematisches mod unterscheiden sich leider. Pascal: -5 mod 3 = -2, mathematisch ist -5 mod 3 = 1. Der mathematische Rest a mod b für b > 0 ist nämlich: 0 <= a mod b < b. Was bei Pascal nun mal leider nicht der Fall. Wenn man einen mathematisch korrekten ggt via Euklidischem Algorithmus berechnen will muß man das berücksichtigen.

- c:=abs(ggt(a,b)) ist zwar richtig, aber nur wenn ggt schon halbwegs richtig ist, Klaus ' Funktion liefert ggt(-2,-2)=0.
 
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#55

AW: ggT und KgV von 2 Zahlen berechnen - absolut keine Ahnung

  Alt 21. Nov 2010, 20:10
c:=abs(ggt(a,b));
Wieso von einer positiven Zahl noch den Absolutwert ermitteln?
Per Definition liefert ggT ein Ergebnis aus der Menge der natürlichen Zahlen und damit.

Weiterhin gilt:
Code:
ggT( -a, b ) = ggT( a, b )
Somit ist es absolut richtig von beiden Eingangsparametern die Absolutwerte zu nehmen.

Weiterhin gilt auch, dass keiner der Eingangswerte 0 sein darf, denn dann ist ggT nicht definiert.
In dem Falle müsste also korrekterweise eine Exception ausgelöst werden.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (21. Nov 2010 um 20:13 Uhr)
 
wolfgang_SV

Registriert seit: 9. Nov 2007
Ort: Neumünster
39 Beiträge
 
#56

AW: ggT und KgV von 2 Zahlen berechnen - absolut keine Ahnung

  Alt 21. Nov 2010, 20:34
falsch Sir Rufo..

gib doch einfach mal eine negative Zahl für a oder b ein..

und schau was a mod b dir zurückliefert...
 
wolfgang_SV

Registriert seit: 9. Nov 2007
Ort: Neumünster
39 Beiträge
 
#57

AW: ggT und KgV von 2 Zahlen berechnen - absolut keine Ahnung

  Alt 21. Nov 2010, 20:43
@gammatester

ok.. entschuldigung
habe die procedure von klaus01 soweit nicht getestet.
wenn seine funktion für ggt(a,b) einen anderen wert als ggt(b,a) liefert , abgesehen vom vorzeichen , ist sie natürlich schrott!!!

PS. obwohl auch das Vorzeichen müßte gleich sein

Geändert von wolfgang_SV (21. Nov 2010 um 20:49 Uhr)
 
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#58

AW: ggT und KgV von 2 Zahlen berechnen - absolut keine Ahnung

  Alt 21. Nov 2010, 20:54
.. gut, dass ich mal wieder ein schlechtes Beispiel sein durfte..
Klaus
Klaus
 
wolfgang_SV

Registriert seit: 9. Nov 2007
Ort: Neumünster
39 Beiträge
 
#59

AW: ggT und KgV von 2 Zahlen berechnen - absolut keine Ahnung

  Alt 21. Nov 2010, 21:06
@gammatester

bez. Mathematik und natürliche Zahlen

Die Division mit Rest oder der Divisionsalgorithmus ist ein mathematischer Satz aus der Algebra und der Zahlentheorie. Er besagt, dass es zu zwei Zahlen n und m <>0 aus N ( natürliche Zahlen ) eindeutig bestimmte Zahlen a und b gibt für die gilt :

n=a*m +b ; 0<=b<m
 
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#60

AW: ggT und KgV von 2 Zahlen berechnen - absolut keine Ahnung

  Alt 22. Nov 2010, 08:17
@gammatester

bez. Mathematik und natürliche Zahlen

Die Division mit Rest oder der Divisionsalgorithmus ist ein mathematischer Satz aus der Algebra und der Zahlentheorie. Er besagt, dass es zu zwei Zahlen n und m <>0 aus N ( natürliche Zahlen ) eindeutig bestimmte Zahlen a und b gibt für die gilt :

n=a*m +b ; 0<=b<m
Wenn Du schon Wiki wörtlich zitierst, dann bitte richtig (Quellenangabe könnte nicht schaden) und ohne verfälschende Zusätze. Da steht eben nicht "(natürliche Zahlen)". Mit diesem von Dir frei erfundenen Zusatz ist der Satz nämlich falsch, wie man leicht an der eindeutigen Darstellung der Division 3 durch 5 sieht: 3 = 0*5 + 3. Aber als nächstes willst Du wahrscheinlich noch sagen, daß 0 natürlich eine natürliche Zahl ist.
 
Thema geschlossen
Seite 6 von 9   « Erste     456 78     Letzte »    


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 04:13 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