Autor |
Beitrag |
Lemartes
      
Beiträge: 40
D7 Prof
|
Verfasst: Do 20.04.06 00:53
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
_________________ Standardantworten:
Deutsch: Das ist auf die Aufklärungzurückzuführen; Dadurch verarbeitet der Autor seine Kindheit. Chemie: Das liegt an der Dichte. Biologie: Zum Schutz natürlich. Informatik: Windows ist schuld!!!
|
|
Alstar
      
Beiträge: 827
|
Verfasst: 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 
      
Beiträge: 40
D7 Prof
|
Verfasst: 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.
_________________ Standardantworten:
Deutsch: Das ist auf die Aufklärungzurückzuführen; Dadurch verarbeitet der Autor seine Kindheit. Chemie: Das liegt an der Dichte. Biologie: Zum Schutz natürlich. Informatik: Windows ist schuld!!!
|
|
Gausi
      
Beiträge: 8548
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: 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.
_________________ We are, we were and will not be.
|
|
uwewo
      
Beiträge: 154
|
Verfasst: 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
      
Beiträge: 1284
W98 W2k WXP
Turbo D
|
Verfasst: 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 
_________________ Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
|
|
Simon Joker
      
Beiträge: 236
Erhaltene Danke: 1
|
Verfasst: 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 
      
Beiträge: 40
D7 Prof
|
Verfasst: 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...
_________________ Standardantworten:
Deutsch: Das ist auf die Aufklärungzurückzuführen; Dadurch verarbeitet der Autor seine Kindheit. Chemie: Das liegt an der Dichte. Biologie: Zum Schutz natürlich. Informatik: Windows ist schuld!!!
|
|
|