![]() |
Re: Division by zero - Teilen durch 0
Zitat:
Delphi-Quellcode:
mBruchrechner
procedure TTestBruchrechner.BAdditionClick(Sender: TObject);
begin self.setzeEingabe; hatBruchrechner.Addition(hatBruch1, hatBruch2); self.zeigeErgebnis; end;
Delphi-Quellcode:
function Bruchrechner.Addition(pBruch1,pBruch2: Bruch): Bruch;
begin result:=Bruch.init; result.setzeNenner(pBruch2.gibNenner * pBruch1.gibZaehler); result.setzeZaehler(pBruch1.gibZaehler * pBruch2.gibNenner + pBruch2.gibZaehler * pBruch1.gibNenner); result.KuerzeVoll; end; |
Re: Division by zero - Teilen durch 0
Kontrollier mal was da raus kommt:
Delphi-Quellcode:
ggT(zZaehler,zNenner)
|
Re: Division by zero - Teilen durch 0
Da fehlen immernoch begin und end
|
Re: Division by zero - Teilen durch 0
Delphi-Quellcode:
procedure Bruch.KuerzeUm(pFaktor: integer);
begin if pFaktor <> 0 then if ((zZaehler MOD pFaktor = 0) and (zNenner MOD pFaktor = 0)) then begin zZaehler := zZaehler div pFaktor; zNenner := zNenner div pFaktor; end; end; |
Re: Division by zero - Teilen durch 0
Wenn dann zeig ihm bitte die vollere Variante, denn offenbar weiß er nicht wann er sie weglassen darf und wann nicht. Im Zweifelsfall also imemr einmal zuviel als zuwenig
Delphi-Quellcode:
procedure Bruch.KuerzeUm(pFaktor: integer);
begin if pFaktor <> 0 then begin if ((zZaehler MOD pFaktor = 0) and (zNenner MOD pFaktor = 0)) then begin zZaehler := zZaehler div pFaktor; zNenner := zNenner div pFaktor; end; end; end; |
Re: Division by zero - Teilen durch 0
Okay, ,also:
1. Du rechnest falsch. Allgemein gilt a/b + c/d = (ad+bc)/bd - In deiner Methode wird der Nenner falsch berechnet. 2. Du solltest bereits beim Verscuh, den Nenner auf 0 zu setzen, eine Exception werfen, oder etwas ähnliches. Der Nenner darf unter keinen Umständen 0 werden ;) 3. Damit löst dsich das Problem in Luft auf. Deine ggt-Methode gibt immer einen Wert >= 1 zurück, daher kannst du einfach auf die Prüfung verzichten und knallhart dividieren. (und wenn du durch 1 kürzt .. na und?) 4. Die Kürze-Methode sollte natürlich protected sein, ,damit keiner auf die Idee kommt, 0 kürzen zu wollen. (Ist auch eine Division durch null, mmacht mathematisch keinen Sinn.) Hoffe gehilfen zu haben :stupid: Edit, okay, im Zuge der allgemeinen Redundanz kann man evtl. pFaktor in der Kuerze-Methode auf != 0 prüfen. Aber wenn die Methode protected ist, dann bracht man das nicht. Und public sollte sie eh nicht sein. |
Re: Division by zero - Teilen durch 0
begin...end fehlt ist mir gar nicht aufgefallen... :oops:
Sorry. |
Re: Division by zero - Teilen durch 0
Danke soweit, habe die Sache mit dem begin und end übernommen, die Methode Addition korrigiert und kuerzeUm von public nach protected verfrachtet, das Ergebnis der Addition ist weiterhin 0.
|
Re: Division by zero - Teilen durch 0
Habs :)
Zitat:
|
Re: Division by zero - Teilen durch 0
Zitat:
Das habe ich ja bereits:
Delphi-Quellcode:
Und so sieht jetzt die "neue" Addition aus:
procedure TTestBruchrechner.zeigeErgebnis;
begin LZaehlerErgebnis.Caption:=IntToStr(hatErgebnisbruch.gibZaehler); LNennerErgebnis.Caption:=IntToStr(hatErgebnisbruch.gibNenner); end;
Delphi-Quellcode:
Wie stelle ich das jetzt an, dass diese Werte übergeben werden? Wenn das jemand wüsste, dann könnte ich zufrieden schlafen gehen. :mrgreen:
function Bruchrechner.Addition(pBruch1,pBruch2: Bruch): Bruch;
begin result:=Bruch.init; result.setzeNenner(pBruch2.gibNenner * pBruch1.gibNenner); result.setzeZaehler(pBruch1.gibZaehler * pBruch2.gibNenner + pBruch2.gibZaehler * pBruch1.gibNenner); result.KuerzeVoll; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:21 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 by Thomas Breitkreuz