Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Problem mit Mathe-Parser (https://www.delphipraxis.net/142578-problem-mit-mathe-parser.html)

himitsu 30. Okt 2009 17:59

Re: Problem mit Mathe-Parser
 
@NamenLozer: so schreibt aber kein Mensch und da Vorzeichen die höchste Priorität haben, ist praktisch auch keine Klammer nötig

Zitat:

Zitat von athomas
aber ich hab jetzt ein problem beim multiplizieren mit negativen zahlen:

Das Problem ist hierbei, daß du in dieser Reihenfolge auswertest
1. *
2. /
3. -
4. +

aber eigentlich ist die korrekte Reihenfolge so
1. Vorzeichen +-
2. Punktrechnung */
3. Strichrechnung +-

oder auch nacheinander
1a. Vorzeichen +
1b. Vorzeichen -
2a. Punktrechnung *
2b. Punktrechnung /
3a. Strichrechnung +
3b. Strichrechnung -
(a und b kann auch vertauscht werden)

schau mal dort
http://www.delphipraxis.net/internal...ghlight=parser
das Problem ist auch, daß du ungeprüft einfach alles miteinander verrechnest
also bei 1--2 wird 1 - "-" gerechnet

die Vorzeichenberechnungen müßtest du also noch vor die Berechnungen von * und / verlegen
und dann z.B. nur bei folgender Bedingung diese Berechnungen ausführen
((i = 0) or istKeineZahl(sl[i-1])) and (sl[i] = '-') and istZahl(sl[i+1])

athomas 30. Okt 2009 18:30

Re: Problem mit Mathe-Parser
 
also ich hab das mit den vorzeichen noch ergänzt, es will aber immernochnicht klappen:
Delphi-Quellcode:
//Vorzeichen
  ende:=false;
  i:=0;
  if arr.count>1 then
    begin
      while not(ende) do
        begin
          if ( (i = 0)or(not(isReal(arr[i-1]))) )and(arr[i]='-')and(isReal(arr[i+1])) then
            begin
              arr[i]:=floattostr(-strtofloat(arr[i+1]));
              arr.delete(i+1);
              i:=i-1;
            end;
          i:=i+1;
          if i>=arr.count-1 then
            ende:=true;
        end;
    end;

athomas 31. Okt 2009 10:24

Re: Problem mit Mathe-Parser
 
hab den fehler entdeckt: die funktion isReal hat negative werte nicht als reale werte angesehen

also vielen dank für die tolle hilfe. hat mich echt weitergebracht :)

himitsu 31. Okt 2009 10:37

Re: Problem mit Mathe-Parser
 
gern geschehen und viel Spaß noch, mit deinem Parser :)

himitsu 10. Nov 2009 08:07

Re: Problem mit Mathe-Parser
 
[nicht wichtig]

mathe parser

(man mag es nicht glauben, aber das Zusammengesetzte findet die Suchfunktion nicht, wenn es auseinander ist)

sind nur'n paar Stichworte für die Suchfunktion

Namenloser 10. Nov 2009 13:27

Re: Problem mit Mathe-Parser
 
Zitat:

Zitat von himitsu
@NamenLozer: so schreibt aber kein Mensch und da Vorzeichen die höchste Priorität haben, ist praktisch auch keine Klammer nötig

Wenn du in der Schule die Klammern weglässt, zählt das als Fehler. (Sorry, hab den Post jetzt erst gesehn)

himitsu 10. Nov 2009 13:52

Re: Problem mit Mathe-Parser
 
Zitat:

Zitat von NamenLozer
Wenn du in der Schule die Klammern weglässt, zählt das als Fehler.

OK, ist jetzt schon ein/zwei Jährchen her, aber ich kann mich garnicht an sowas erinnern.
Oder haben wir in der DDR noch anders gerechnet? :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:00 Uhr.
Seite 2 von 2     12   

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