![]() |
Calss operator liefert das falsche Ergebnis
Hallo alle zusammen,
ich ahbe mir den folgenden Typ definiert:
Delphi-Quellcode:
alle Class Operatoren funktionieren ausser der 3. mit
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;
Delphi-Quellcode:
dieser Rechnet das richtige ergebnis aus und Übergibt dann einfach das flasche. Ich verstehe einfach nicht warum hier mal kurz die funktion
class Operator Multiply(v,u:TVector): Double;
Delphi-Quellcode:
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:
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;
Delphi-Quellcode:
Gruß und schonmal danke fürs lesen, Timb00
S := Vec*Vec2;
|
Re: Calss operator liefert das falsche Ergebnis
Und was bedeutet falsch?
|
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. ;-) |
Re: Calss operator liefert das falsche Ergebnis
Vielleicht musst Du die Multiplikation ja explizit klammern?
Viele Grüße |
Re: Calss operator liefert das falsche Ergebnis
Hallo,
unabhängig von deinem eigentlichen Problem musst du den Plausibilitätstest korrigieren:
Delphi-Quellcode:
Gruß Hawkeye
//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 |
Re: Calss operator liefert das falsche Ergebnis
Delphi-Quellcode:
Fehlt da nicht ein "overload;"?
class Operator Multiply(v,u:TVector): Double;
|
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 |
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