Thema: Delphi Threads hier sinnvoll?

Einzelnen Beitrag anzeigen

jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#10
  Alt 18. Okt 2002, 17:39
Für meine Verhältnisse rufst du pos0 zu oft auf. Probiere es mal mit der von mir veränderten TermToReal-Version:

Code:
[b]function[/b] pos0Ex([b]const[/b] c: Char; [b]const[/b] s: [b]string[/b]; out ResultValue: Integer): Integer;
[b]begin[/b]
  Result := pos0(c, s);
  ResultValue := Result;
[b]end[/b];

[b]function[/b] TermToReal(s:[b]string[/b]):real;
[i]//  {Bisher '+' '-' '*' '/' Klammern und 'x' integriert,
//   d.h. gebrochen rationale Funktionen werden ausgewertet[/i]
[b]var[/b] ps: Integer;
[b]begin[/b]
  [i]//showmessage(s); Empfehlenswert zum Verständnis[/i]
  [b]if[/b] pos0Ex('+',s,ps)>0 [b]then[/b] result:=TermToReal(copy(s,1,ps-1))+TermToReal(copyab(s,ps+1)) [b]else[/b]
  [b]if[/b] pos0Ex('-',s,ps)>0 [b]then[/b] result:=TermToReal(copy(s,1,ps-1))-TermToReal(copyab(s,ps+1)) [b]else[/b]
  [b]if[/b] pos0Ex('*',s,ps)>0 [b]then[/b] result:=TermToReal(copy(s,1,ps-1))*TermToReal(copyab(s,ps+1)) [b]else[/b]
  [b]if[/b] pos0Ex('/',s,ps)>0 [b]then[/b] result:=TermToReal(copy(s,1,ps-1))/TermToReal(copyab(s,ps+1)) [b]else[/b]
  [b]if[/b] pos0Ex('^',s,ps)>0 [b]then[/b] result:=Power(TermToReal(copy(s,1,ps-1)),TermToReal(copyab(s,ps+1))) [b]else[/b]
  [b]if[/b] pos0Ex('$',s,ps)>0 [b]then[/b]
  [b]begin[/b]
    [b]try[/b]
      result:=Power(TermToReal(copy(s,1,ps-1)),1/TermToReal(copyab(s,ps+1)));
    [b]except[/b]
      Result := 0;
    [b]end[/b];
  [b]end[/b]
  [b]else[/b]
  [b]if[/b] pos0Ex('s',s,ps)>0 [b]then[/b] result:=sin(DegToRad(TermToReal(copyab(s,ps+1)))) [b]else[/b]
  [b]if[/b] pos0Ex('c',s,ps)>0 [b]then[/b] result:=cos(DegToRad(TermToReal(copyab(s,ps+1)))) [b]else[/b]
  [b]if[/b] pos0Ex('t',s,ps)>0 [b]then[/b] result:=tan(DegToRad(TermToReal(copyab(s,ps+1)))) [b]else[/b]
  [b]if[/b] (s<>'') [b]and[/b] (s[1]='(') [b]then[/b] [b]begin[/b] [i]//Am Anfang und Ende eine Klammer[/i]
    s:=copy(s,2,length(s)-2);
    result:=TermToReal(s)
  [b]end[/b] [b]else[/b]
  [b]if[/b] s='x' [b]then[/b] result:=x [b]else[/b] [i]//oder TermToReal(Form1.Ex.text)[/i]
  result:=StrToFloat(s);
[b]end[/b];
  Mit Zitat antworten Zitat