Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Calss operator liefert das falsche Ergebnis (https://www.delphipraxis.net/125808-calss-operator-liefert-das-falsche-ergebnis.html)

Timb0 12. Dez 2008 07:35


Calss operator liefert das falsche Ergebnis
 
Hallo alle zusammen,

ich ahbe mir den folgenden Typ definiert:
Delphi-Quellcode:
TVector = record
  first : PElement;

  class Operator Multiply(c:Real;u:TVector) : TVector;Overload;
  class Operator Multiply(u:TVector;c:Real) : TVector;Overload;
  class Operator Multiply(v,u:TVector): Double;
  class Operator Add(v,u:TVector) : TVector; Overload;
end;
alle Class Operatoren funktionieren ausser der 3. mit
Delphi-Quellcode:
class Operator Multiply(v,u:TVector): Double;
dieser Rechnet das richtige ergebnis aus und Übergibt dann einfach das flasche. Ich verstehe einfach nicht warum hier mal kurz die funktion
Delphi-Quellcode:
Class Operator TVector.Multiply(v,u:TVector): Double;
var s,r:PElement; // Liste aus real werten die eine Eigenschaft x:real , next :Pelement hat.
  summe : Real;
begin
s:= v.first;
r:= u.first;

Result := 0;

if not Dimension(v) = Dimension(u) then begin Result := -1; Exit; end;

while s.next <> nil do
begin
  Result := Result + s^.x*r^.x;
  s := s^.next;
  r := r^.next;
end;

  Result := Result + s^.x*r^.x;
end;
Es handelt sich dabei um ein Skalarprodukt von Vektoren. Der Witz ist einfach, das der Result genau das Richtige ergebniss liefer, wenn man ihn innerhalb der Procedure abfrag (also nach der letzten Zeile eine MSgBox). Der Aufruf sieht wie folgt aus:
Delphi-Quellcode:
  S := Vec*Vec2;
Gruß und schonmal danke fürs lesen, Timb00

mkinzler 12. Dez 2008 08:06

Re: Calss operator liefert das falsche Ergebnis
 
Und was bedeutet falsch?

Sharky 12. Dez 2008 09:22

Re: Calss operator liefert das falsche Ergebnis
 
Hai Timb0,

bitte nicht falsch verstehen: Aber man kann deinen Text sicher besser lesen wenn Du zumindest die groben Schreibfehler beseitigst. ;-)

mirage228 12. Dez 2008 09:55

Re: Calss operator liefert das falsche Ergebnis
 
Vielleicht musst Du die Multiplikation ja explizit klammern?

Viele Grüße

Hawkeye219 12. Dez 2008 12:33

Re: Calss operator liefert das falsche Ergebnis
 
Hallo,

unabhängig von deinem eigentlichen Problem musst du den Plausibilitätstest korrigieren:

Delphi-Quellcode:
//if not Dimension(v) = Dimension(u) then begin Result := -1; Exit; end; // falsch
//if not (Dimension(v) = Dimension(u)) then begin Result := -1; Exit; end; // richtig
if (Dimension(v) <> Dimension(u)) then begin Result := -1; Exit; end; // besser
Gruß Hawkeye

Blup 12. Dez 2008 13:26

Re: Calss operator liefert das falsche Ergebnis
 
Delphi-Quellcode:
class Operator Multiply(v,u:TVector): Double;
Fehlt da nicht ein "overload;"?

Sherlock 12. Dez 2008 13:56

Re: Calss operator liefert das falsche Ergebnis
 
Das frage ich mich auch die ganze Zeit, aber wenn mkinzler und sharky das nicht bemängeln muss es korrekt sein ;)

Sherlock

mkinzler 12. Dez 2008 14:14

Re: Calss operator liefert das falsche Ergebnis
 
So genau habe ich mir das gar nicht angeschaut


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:23 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