Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Division by zero - Teilen durch 0 (https://www.delphipraxis.net/121265-division-zero-teilen-durch-0-a.html)

HackZu 24. Sep 2008 20:55


Division by zero - Teilen durch 0
 
Auf Geheiß des Moderators und nach erfolgreicher Lösung der vorhergehende Frage, nun eine neue Frage. :-D

Der nächste Fehler scheint hier zu entstehen, es wird die Fehlermeldung Division durch 0 ausgegeben, muss die Methode um die Zähler und Nenner der beiden Brüche erweitert werden?

mBruch

Delphi-Quellcode:
procedure Bruch.KuerzeUm(pFaktor: integer);
begin
       if ((zZaehler MOD pFaktor = 0) and (zNenner MOD pFaktor = 0)) then
         zZaehler := zZaehler div pFaktor;
         zNenner := zNenner div pFaktor;
end;

function Bruch.ggt(zZaehler,zNenner:integer): integer;
begin
  if zZaehler = zNenner then result := zZaehler
  else
  result := ggt(min(zNenner,zZaehler), abs(zZaehler-zNenner));
end;
Die entsprechende Funktion in mBruchrechner sieht so aus:

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;

grenzgaenger 24. Sep 2008 21:05

Re: Division by zero - Teilen durch 0
 
prüfst du denn ab, ob der divisor 0 ist, bevor du die division vornimmst?

divBy0 24. Sep 2008 21:05

Re: Division by zero - Teilen durch 0
 
Was willst du denn wissen? Warum der Fehler auftritt?

Du musst drauf achten, dass pFaktor <> 0 ist.

freak4fun 24. Sep 2008 21:06

Re: Division by zero - Teilen durch 0
 
Delphi-Quellcode:
procedure Bruch.KuerzeUm(pFaktor: integer);
begin
       if ((zZaehler MOD pFaktor = 0) and (zNenner MOD pFaktor = 0)) then
       begin
         zZaehler := zZaehler div pFaktor;
         zNenner := zNenner div pFaktor;
       end;
end;

HackZu 24. Sep 2008 21:24

Re: Division by zero - Teilen durch 0
 
Zitat:

Zitat von grenzgaenger
prüfst du denn ab, ob der divisor 0 ist, bevor du die division vornimmst?

Nein.

Zitat:

Zitat von divBy0
Was willst du denn wissen? Warum der Fehler auftritt?

Du musst drauf achten, dass pFaktor <> 0 ist.

Ja.

Okay, aber wie setze ich das um? Habe es mal so versucht:

Delphi-Quellcode:
procedure Bruch.KuerzeUm(pFaktor: integer);
begin
  if pFaktor <> 0 then
    begin
       if ((zZaehler MOD pFaktor = 0) and (zNenner MOD pFaktor = 0)) then
         zZaehler := zZaehler div pFaktor;
         zNenner := zNenner div pFaktor;
    end;
end;
Da ist das Ergebnis der Addition aber immer 0.

divBy0 24. Sep 2008 21:26

Re: Division by zero - Teilen durch 0
 
Was hat den pFaktor für einen Wert?

grenzgaenger 24. Sep 2008 21:32

Re: Division by zero - Teilen durch 0
 
Zitat:

Zitat von HackZu
Zitat:

Zitat von grenzgaenger
prüfst du denn ab, ob der divisor 0 ist, bevor du die division vornimmst?

Nein.

und weshalb nicht? meist der rechner meckert schon, wenn er durch 0 teilt ... aber das gefällt dir ja auch nicht oder :roll:

grenzgaenger 24. Sep 2008 21:33

Re: Division by zero - Teilen durch 0
 
Zitat:

Zitat von divBy0
Was hat den pFaktor für einen Wert?

in diesem fall wohl NULL und dann gibts deinen nick 8)

HackZu 24. Sep 2008 21:35

Re: Division by zero - Teilen durch 0
 
Zitat:

Zitat von divBy0
Was hat den pFaktor für einen Wert?

Das ist ja das Problem, wir haben diese Unit aus einem alten Projekt übernommen, bei dem der Benutzer den Faktor eingeben musste (kuerzeUm) oder pFaktor den Wert des ggT annahm (kuerzeVoll) mit dem dann gekürzt wurde, daher meine Frage, wie ich das kuerzeUm auf das neue Projekt anpassen muss?

Zur Zeit sieht das halt so aus:

Delphi-Quellcode:
procedure Bruch.KuerzeUm(pFaktor: integer);
begin
  if pFaktor <> 0 then
    begin
       if ((zZaehler MOD pFaktor = 0) and (zNenner MOD pFaktor = 0)) then
         zZaehler := zZaehler div pFaktor;
         zNenner := zNenner div pFaktor;
    end;
end;

function Bruch.ggt(zZaehler,zNenner:integer): integer;
begin
  if zZaehler = zNenner then result := zZaehler
  else
  result := ggt(min(zNenner,zZaehler), abs(zZaehler-zNenner));
end;

procedure Bruch.KuerzeVoll;
begin
  self.KuerzeUm(self.ggT(zZaehler,zNenner));
end;

divBy0 24. Sep 2008 21:37

Re: Division by zero - Teilen durch 0
 
Daher kommt mein Nick... :-D

Wie rufst du die Funktion denn auf? Sieht eigentlich ganz gut aus.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:32 Uhr.
Seite 1 von 3  1 23      

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