Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Operator ist auf diesen Operandentyp nicht anwendbar?
Lemartes - Do 20.04.06 00:53
Titel: Operator ist auf diesen Operandentyp nicht anwendbar?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45:
| function TForm1.equal : boolean; var i,j,k,l,m,n, is_equal : integer; var var_r, var_s : real; var ergebnis: array[1..3] of real; begin var_r:= 0; var_s:= 0; is_equal:= 0;
for i:= 1 to 3 do ergebnis[i]:= stzvek[2,i] - stzvek[1,i]; for j:= 1 to 3 do if (rvek_r[1,j] = 0) and (rvek_s[1,j] <> 0) then var_s:= ergebnis[j] / rvek_s[1,j]; if var_s = 0 then begin for k:= 1 to 3 do if (rvek_s[1,k] = 0) and (rvek_r[1,k] <> 0) then var_r:= ergebnis[k] / rvek_r[1,k]; for l:= 1 to 3 do if (rvek_s[1,l] <> 0) and (rvek_r[1,l] <> 0) then var_s:= (ergebnis[l] - (var_r * rvek_r[1,l])) / rvek_s[1,l]; end else for m:= 1 to 3 do if (rvek_s[1,m] <> 0) and (rvek_r[1,m] <> 0) then var_r:= (ergebnis[m] - (var_s * rvek_s[1,m])) / rvek_r[1,m]; if (var_s = 0) and (var_r = 0) then begin var_s:= ((ergebnis[1] * rvek_r[2]) - (ergebis[2] * rvek_r[1])) / ((rvek_s[1] * rvek_r[2]) - (rvek_s[2] * rvek_r[1])); var_r:= (ergebnis[1] - (var_s * rvek_s[1])) / rvek_r[1]; end;
for m:= 1 to 3 do if ((rvek_r[m] * var_r) + (rvek_s[m] * var_s)) = ergebnis[m] then is_equal:= is_equal + 1;
if is_equal = 3 then equal := true;
end; |
habe diesen queslltext. die gesamten arrays sind real werte, von daher sollte das funktionieren.
der compiler sagt aber an den markierten stellen immer [Fehler] Unit1.pas(119): Operator ist auf diesen Operandentyp nicht anwendbar.
von der häufigkeit der fehlermeldugen würd ich sagen, dass die * schuld sind, eine einfache multiplikation sollte aber normal funktionieren. bin grad etwas ratlos...
Moderiert von
Gausi: Delphi-Tags hinzugefügtModeriert von
Gausi: Topic aus Sonstiges (Delphi) verschoben am Fr 21.04.2006 um 08:37
Alstar - Do 20.04.06 01:34
Hallo!
Zu deiner Problemstellung direkt kann ich nichts (sinnvolles) beitragen, allerdings solltest du Fliesskommawerte nie auf Gleichheit pruefen, da dies meisstens False ergibt.
Alstar
Lemartes - Do 20.04.06 07:26
ist aber ein mathematikprogramm, bei dem das zwingend notwendig ist.
wenn ich die aus nem edit mit 0 einlese, wird da wohl auch 0 drin stehen, von daher ist das kein problem. wird wohl auch selten vorkommen, aber muss ja für alle fälle funktionieren.
Gausi - Do 20.04.06 07:56
Auch bei Mathematik-Programmen sollten Real-Werte nie auf Gleichheit überprüft werden. Besser wäre es, wenn man den Differenzbetrag auf < eps überprüft, wobei eps in etwa die Maschinengenauigkeit ist.
uwewo - Do 20.04.06 08:12
Hallo,
es ist sehr schwer in Deinem Code-Schnipsel zu erkennen wo der Fehler liegt,
poste etwas mehr von Deinem Code und man kann es ausprobieren.
Uwe
Kroko - Do 20.04.06 08:29
(a) Um Real-Typ auf Null zu prüfen gibt es in der Unit Math die Funktionen "IsZero"+ F1
(b) Warum steht in der Deklaration eigentlich 3x var, 1x sollte auch genügen :wink:
Simon Joker - Do 20.04.06 09:04
Der Fehler ist doch sonnenklar!
Die Variable "rvek_r" muß irgendwie so deklariert sein "Array of Array" denn du greift mit 2 Indices darauf zu.
Delphi-Quelltext
1: 2: 3:
| .. if (rvek_r[1,j] = 0) and (rvek_s[1,j] <> 0) then .. |
Dito "rvek_s".
Dann willst du mit einem Index Multiplikationen durchführen.
Delphi-Quelltext
1: 2: 3: 4: 5:
| if (var_s = 0) and (var_r = 0) then begin var_s:= ((ergebnis[1] * rvek_r[2]) - (ergebis[2] * rvek_r[1])) / ((rvek_s[1] * rvek_r[2]) - (rvek_s[2] * rvek_r[1])); var_r:= (ergebnis[1] - (var_s * rvek_s[1])) / rvek_r[1]; end; |
Das funktioniert natürlich nicht, denn Real * Array ist nun mal nicht wirklich eine sinnvolle Operation.
MfG Simon
Lemartes - Do 20.04.06 16:29
ok, das zeigt mir, dass ich abends, wenn ich so wie so verwirrt bin nur noch mit copy and paste arbeiten sollte...
funzt jetzt. man sollte sich schon merken, was nen zweidimensionales array war und was nicht...
danke leute.
und da steht 3x var, weil ich das immer so gemacht hab, wenn nen neuer typ kam. für meine eigene übersicht...
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!