![]() |
AW: ggT und KgV von 2 Zahlen berechnen - absolut keine Ahnung
ok.. da hab ich ein wenig voreilig was zusammengehauen
hier gibt es die mathematischen Definitionen.. ![]() aber hier wird klar, dass a mod b (für a aus Z (ganze Zahlen ) und b aus N ( natürliche Zahlen )) kein negatives Ergebnis liefert auch wenn a negativ sein sollte. genauso ist ggt(a,b) per Definition immer positiv.. Ja und die 0 ist natürlich keine natürliche Zahl !!!! |
AW: ggT und KgV von 2 Zahlen berechnen - absolut keine Ahnung
Zitat:
Kann es sein, daß du dich hier etwas zu weit aus dem Fenster lehnst? Bei der obigen Definition steht der Zusatz "(natürliche Zahlen)" so zwar nicht in Wiki, trotzdem ist er korrekt. Der Zusatz, so wie er im Text steht, bezieht sich auf die Zahlen n und m (in deinem Beispiel 3 und 5) und nicht auf die Zahlen a und b (in deinem Beispiel 0 und 3). |
AW: ggT und KgV von 2 Zahlen berechnen - absolut keine Ahnung
Zitat:
Zitat:
Ansonsten musst du dir deine eigene Definition von ggT machen (ggT_SV). Da kann dann meinetwegen alles sein, wie du möchtest. Auch das wäre mir wurscht :mrgreen: Somit würde die korrekte Version von ggT (nach der gültigen mathematische Definition) wie folgt sein:
Delphi-Quellcode:
function ggT( a, b : integer) : integer;
var aa, ab : integer; r : integer; begin // ggT( 0, 0 ) ist nicht definiert und somit nicht zulässig if ( a = 0 ) and ( b = 0 ) then raise Exception.Create( 'Kein Wert darf 0 sein!' ); // das dürfen wir denn ggT( -a, b ) = ggT( a, b ) aa := abs( a ); // auch das dürfen wir, denn es gilt ggT( a, b ) = ggT( b, a ) // und ggT( -a, b ) = ggT( a, b ) // daraus folgt ggT( a, -b ) = ggT( a, b ) // und daraus folgt auch ggT( -a, -b ) = ggT( a, b ) ab := abs( b ); if ( aa = 0 ) or ( ab = 0 ) then begin if ( aa = 0 ) then Result := ab else Result := aa; end else begin repeat r := aa mod ab; aa := ab; ab := r; until r = 0; result := aa; end; end; |
AW: ggT und KgV von 2 Zahlen berechnen - absolut keine Ahnung
Du hast ja vollkommen recht..
das was ich nur zum Ausdruck bringen wollte ist, dass der pascal-befehl mod negative Ergebnisse liefert, was mathematisch nicht definiert ist. Deshalb muß der Programm-Code also erweitert werden, damit ein positives Ergebnis herauskommt. Ob man nun die Eingangsparameter , so wie du es machst, in positive Zahlen umwandelt oder die Ausgabe in eine positive Zahl umwandelt ist eigentlich egal... Obwohl ich meine Version favorisiere, denn ein Befehl ist weniger als zwei, denn wir wollen doch möglichst ökonomisch programmieren. |
AW: ggT und KgV von 2 Zahlen berechnen - absolut keine Ahnung
Zitat:
Aber inzwischen scheint ja Einigkeit zu bestehen, auch der genannte Link ist nach erstem Überfliegen brauchbar und er listet sogar ggt(0,a) = abs(a) und ggt(0,0)=0. Dies sind völlig legale Werte und sollten nicht ad hoc ausgeschlossen werden (wie soeben wieder in einem Parallelbeitrag). Das alles wird in meiner Funktion schon gerücksichtigt. (Sie ist leider trotzdem noch nicht perfekt, da der Wert -Maxint-1 nicht richtig behandelt wird). |
AW: ggT und KgV von 2 Zahlen berechnen - absolut keine Ahnung
Delphi-Quellcode:
Ist der Code aus der Schule, für den ggT, aber für den KgV, wie müsste ich den da verändern?
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Ergebnis: TLabel; Eingabe1: TEdit; Eingabe2: TEdit; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); var Teiler, z1, z2, ggT, kz, gz :Integer; begin z1 := StrToInt (Eingabe1.Text); z2 := StrToInt (Eingabe2.Text); if z1 < z2 then begin kz := z1; // kleinste und größte Zahl bestimmen gz := z2; end else begin kz := z2; gz := z1; end; Teiler := kz + 1; // Teiler Steuervariable ggt := 0; For Teiler := 1 to kz do if (((kz mod Teiler) = 0) and ((gz mod Teiler) = 0)) then ggT := Teiler; Ergebnis.Caption := IntToStr(ggT); end; end. |
AW: ggT und KgV von 2 Zahlen berechnen - absolut keine Ahnung
Delphi-Quellcode:
Quelle:
kgv:= abs(z1*z2) div ggt(z1,z2)
![]() Aus diesem Grund wäre es auch von Vorteil wenn ggt ein Funktion wäre und nicht wie in Deinem Code vollständig in der ButtonClick Methode deklariert wird. Grüße Klaus |
AW: ggT und KgV von 2 Zahlen berechnen - absolut keine Ahnung
@Connor
na das ist ja umständlich... und auch noch fehlerhaft.. gib mal eine negative Zahl ein.... PS Gruß an deinen Mathelehrer !? |
AW: ggT und KgV von 2 Zahlen berechnen - absolut keine Ahnung
Zitat:
|
AW: ggT und KgV von 2 Zahlen berechnen - absolut keine Ahnung
@Connor
sagen wir mal so : wenn man den euklidischen Algorithmus nicht kennt, dann ist der Ansatz gar nicht mal so verkehrt, wenn man von der rudimentären Vorstellung des ggT ausgeht. Nämlich : Suche die größtmögliche Zahl, die a und b ohne Rest teilt... Wenn man dann davon ausgeht, dass a und b positive Zahlen sind, ist euer Programm schon in Ordnung.. Nur mit den negativen Zahlen.. Warum habt ihr nicht den Tip von unserem Sir Rufo übernommen ( abs(a) und abs(b) ) ; dann klappt's auch mit negativen Zahlen .. nach dem Motto : kaum macht man's falsch, meldet sich Sir Rufu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:38 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