exit;
end;
if t=1 then result:=strtofloat(leftstr(s,i-1));
end;
end;
end;
function rightnum(s:string;i:integer):double ;
var
t,l:integer;
begin
l:=length(s);
if s[i+1]='(' then
begin
for t:=i+2 to l do
if s[t]=')' then
begin
result:=strtofloat(copy(s,i+2,t-i-2));
exit;
end;
end
else
begin
for t:=i+1 to l do
begin
if not is123(s[t]) then
begin
result:=strtofloat(copy(s,i+1,t-i-1));
exit;
end;
if t=l then result:=strtofloat(rightstr(s,l-i));
end;
end;
end;
/////////////////////////////////
function leftsigh(s:string;i:integer):integer ;
var
t,l:integer;
begin
l:=length(s);
if s[i-1]=')' then
begin
for t:=i-1 downto 1 do
if s[t]='(' then
begin
result:=t;
exit;
end;
end
else
begin
for t:=i-1 downto 1 do
begin
if not is123(s[t]) then
begin
result:=t+1;
exit;
end;
if t=1 then result:=1;
end;
end;
end;
function rightsigh(s:string;i:integer):integer ;
var
t,l:integer;
begin
l:=length(s);
if s[i+1]='(' then
begin
for t:=i+2 to l do
if s[t]=')' then
begin
result:=t;
exit;
end;
end
else
begin
for t:=i+1 to l do
begin
if not is123(s[t]) then
begin
result:=t-1;
exit;
end;
if t=l then result:=l;
end;
end;
end;
////////////////////////////////////
function nomulti(s:string):string ;
var
i,l,le,ri:integer;
j,k:double ;
begin
s:=nospace(s);
result:=s;
l:=length(s);
i:=firstsignex(s,'*');
if (i=0) or (s[i]<>'*') then exit;
le:=leftsigh(s,i);
j:=leftnum(s,i);
k:=rightnum(s,i);
ri:=rightsigh(s,i);
file://if ii<l then
if j*k>=0 then
result:=nomulti(leftstr(s,le-1)+floattostr(j*k)+rightstr(s,l-ri))
else
result:=nomulti(leftstr(s,le-1)+'('+floattostr(j*k)+')'+rightstr(s,l-ri))
end;
function nodiv(s:string):string ;
var
i,l,le,ri:integer;
j,k:double ;
begin
s:=nospace(s);
result:=s;
l:=length(s);
i:=firstsignex(s,'/');
if (i=0) or (s[i]<>'/') then exit;
le:=leftsigh(s,i);
j:=leftnum(s,i);
k:=rightnum(s,i);
ri:=rightsigh(s,i);
if j/k>=0 then
result:=nodiv(leftstr(s,le-1)+floattostr(j/k)+rightstr(s,l-ri))
else
result:=nodiv(leftstr(s,le-1)+'('+floattostr(j/k)+')'+rightstr(s,l-ri))
end;
function noadd(s:string):string ;
var
i,l,le,ri:integer;
j,k:double ;
begin
s:=nospace(s);
result:=s;
l:=length(s);
i:=firstsignex(s,'+');
if (i=0) or (s[i]<>'+') then exit;
le:=leftsigh(s,i);
j:=leftnum(s,i);
k:=rightnum(s,i);
ri:=rightsigh(s,i);
if j+k>=0 then
result:=noadd(leftstr(s,le-1)+floattostr(j+k)+rightstr(s,l-ri))
else
result:=noadd(leftstr(s,le-1)+'('+floattostr(j+k)+')'+rightstr(s,l-ri))
end;
function nosub(s:string):string ;
var
i,l,le,ri:integer;
j,k:double ;
begin
s:=nospace(s);
result:=s;
l:=length(s);
i:=firstminussignex(s);
if (i=0) or (s[i]<>'-') then exit;
le:=leftsigh(s,i);
j:=leftnum(s,i);
k:=rightnum(s,i);
ri:=rightsigh(s,i);
if j-k>=0 then
result:=nosub(leftstr(s,le-1)+floattostr(j-k)+rightstr(s,l-ri))
else
result:=nosub(leftstr(s,le-1)+'('+floattostr(j-k)+')'+rightstr(s,l-ri))
end;
function alltoone(s:string):string ;
begin
s:=nomulti(s);
s:=nodiv(s);
s:=noadd(s);
s:=nosub(s);
result:=s;
end;
function myexpress(s:string):string;
var
c,j,l:integer;
le,ri,al,substr,s0:string;
tryit:double;
begin
s:=nospace(s);
s0:=s;
l:=length(s);
if (s[1]<>'(') or (s[l]<>')') then
s:='('+s+')';