AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Division by zero - Teilen durch 0

Ein Thema von HackZu · begonnen am 24. Sep 2008 · letzter Beitrag vom 25. Sep 2008
Antwort Antwort
Seite 2 von 3     12 3      
HackZu

Registriert seit: 27. Aug 2008
15 Beiträge
 
#11

Re: Division by zero - Teilen durch 0

  Alt 24. Sep 2008, 22:40
Zitat von divBy0:
Daher kommt mein Nick...

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

Delphi-Quellcode:
procedure TTestBruchrechner.BAdditionClick(Sender: TObject);
begin
  self.setzeEingabe;
  hatBruchrechner.Addition(hatBruch1, hatBruch2);
  self.zeigeErgebnis;
end;
mBruchrechner

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;
  Mit Zitat antworten Zitat
Benutzerbild von divBy0
divBy0

Registriert seit: 4. Mär 2007
Ort: Sponheim
1.021 Beiträge
 
Delphi XE2 Professional
 
#12

Re: Division by zero - Teilen durch 0

  Alt 24. Sep 2008, 22:41
Kontrollier mal was da raus kommt:

ggT(zZaehler,zNenner)
Marc
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt, die 10. summt die Melodie von Tetris... | Wenn das die Lösung ist, dann hätte ich gerne mein Problem zurück! | engbarth.es
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#13

Re: Division by zero - Teilen durch 0

  Alt 24. Sep 2008, 22:41
Da fehlen immernoch begin und end
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
Benutzerbild von freak4fun
freak4fun

Registriert seit: 22. Sep 2004
Ort: Hannover
1.807 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#14

Re: Division by zero - Teilen durch 0

  Alt 24. Sep 2008, 22:42
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;
Christian
IT: Schließen Sie bitte das Fenster. User: Die Tür auch?
i++; // zaehler i um 1 erhoehen
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#15

Re: Division by zero - Teilen durch 0

  Alt 24. Sep 2008, 22:44
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;
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#16

Re: Division by zero - Teilen durch 0

  Alt 24. Sep 2008, 22:48
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

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.
  Mit Zitat antworten Zitat
Benutzerbild von divBy0
divBy0

Registriert seit: 4. Mär 2007
Ort: Sponheim
1.021 Beiträge
 
Delphi XE2 Professional
 
#17

Re: Division by zero - Teilen durch 0

  Alt 24. Sep 2008, 22:48
begin...end fehlt ist mir gar nicht aufgefallen...

Sorry.
Marc
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt, die 10. summt die Melodie von Tetris... | Wenn das die Lösung ist, dann hätte ich gerne mein Problem zurück! | engbarth.es
  Mit Zitat antworten Zitat
HackZu

Registriert seit: 27. Aug 2008
15 Beiträge
 
#18

Re: Division by zero - Teilen durch 0

  Alt 24. Sep 2008, 23:00
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.
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#19

Re: Division by zero - Teilen durch 0

  Alt 24. Sep 2008, 23:16
Habs

Zitat von HackZu:
Delphi-Quellcode:
procedure TTestBruchrechner.BAdditionClick(Sender: TObject);
begin
  self.setzeEingabe;
  hatBruchrechner.Addition(hatBruch1, hatBruch2); // Was passiert mit dem Rückgabewert? genau => nix ^^
  self.zeigeErgebnis;
end;
  Mit Zitat antworten Zitat
HackZu

Registriert seit: 27. Aug 2008
15 Beiträge
 
#20

Re: Division by zero - Teilen durch 0

  Alt 24. Sep 2008, 23:25
Zitat von jfheins:
Habs

Zitat von HackZu:
Delphi-Quellcode:
procedure TTestBruchrechner.BAdditionClick(Sender: TObject);
begin
  self.setzeEingabe;
  hatBruchrechner.Addition(hatBruch1, hatBruch2); // Was passiert mit dem Rückgabewert? genau => nix ^^
  self.zeigeErgebnis;
end;
Okay, klingt einleuchtend.^^ Hast du vielleicht eine Idee, wie ich das regeln könnte?

Das habe ich ja bereits:

Delphi-Quellcode:
procedure TTestBruchrechner.zeigeErgebnis;
begin
  LZaehlerErgebnis.Caption:=IntToStr(hatErgebnisbruch.gibZaehler);
  LNennerErgebnis.Caption:=IntToStr(hatErgebnisbruch.gibNenner);
end;
Und so sieht jetzt die "neue" Addition aus:

Delphi-Quellcode:
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;
Wie stelle ich das jetzt an, dass diese Werte übergeben werden? Wenn das jemand wüsste, dann könnte ich zufrieden schlafen gehen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 11:31 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