[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];