Autor Beitrag
Lemartes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 40


D7 Prof
BeitragVerfasst: Do 20.04.06 00:53 
ausblenden volle Höhe 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..3of 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];   // Die beiden Stützvektoren auf eine Seite bringen

for j:= 1 to 3 do
  if (rvek_r[1,j] = 0and (rvek_s[1,j] <> 0then   // prüfen, ob "r" in einer der 3 Gleichungen nicht vorkommt
    var_s:= ergebnis[j] / rvek_s[1,j];               // und gegebenenfalls "s" daraus berechnen

if var_s = 0 then  // wenn "s" nicht berechnet werden konnte
  begin
  for k:= 1 to 3 do
    if (rvek_s[1,k] = 0and (rvek_r[1,k] <> 0then // prüfen, ob "s" in einer der 3 Gleichungen nicht vorkommt
      var_r:= ergebnis[k] / rvek_r[1,k];             // und gegebenenfalls "r" daraus berechnen
  for l:= 1 to 3 do
    if (rvek_s[1,l] <> 0and (rvek_r[1,l] <> 0then
      var_s:= (ergebnis[l] - (var_r * rvek_r[1,l])) / rvek_s[1,l];   // "r" aus "s" berechnen
  end
  else   // wenn "s" berechnet wurde
  for m:= 1 to 3 do
    if (rvek_s[1,m] <> 0and (rvek_r[1,m] <> 0then
      var_r:= (ergebnis[m] - (var_s * rvek_s[1,m])) / rvek_r[1,m];   // "s" aus "r" berechnen

if (var_s = 0and (var_r = 0then   //wenn "r" und "s" auf diese Weise nicht berechnet werden konnten, dann
  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 user profile iconGausi: Delphi-Tags hinzugefügt
Moderiert von user profile iconGausi: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 827



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 40


D7 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 154



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1284

W98 W2k WXP
Turbo D
BeitragVerfasst: 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:

_________________
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 236
Erhaltene Danke: 1



BeitragVerfasst: 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.
ausblenden Delphi-Quelltext
1:
2:
3:
  ..
  if (rvek_r[1,j] = 0and (rvek_s[1,j] <> 0then 
..

Dito "rvek_s".

Dann willst du mit einem Index Multiplikationen durchführen.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
if (var_s = 0and (var_r = 0then   //wenn "r" und "s" auf diese Weise nicht berechnet werden konnten, dann
  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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 40


D7 Prof
BeitragVerfasst: 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!!!