1746287843190
Q&A
HOME
Tips & Tech
Q&A
Discuss
Download
자유게시판
홍보 / 광고
구인 / 구직
LOGIN
회원가입
다중연산식(문자형)계산방법좀 도와주세요!
안녕하세요 .!
광주에서 델파이를 배우며 좀씩 프로그램 해보고 있습니다.
제겐 아주 중요한 건대요 .
에디트(Edit)버튼 하나에 다중산술식(예 100+200*2 등)을
입력된(문자형)경우 어떻게 처리를 해야 하나요..?
고수님께 한수 부탁드립니다
2
COMMENTS
류종택
•
2000.10.28 08:27
터보파스칼 시절에 사용하던 것이라..
코딩이 다소 매끄럽지 못합니다..
정확한 원리를 아시려면..
알고리즘에 관한 서적을 보셔야할 것 입니다..
수식을 풀어내는 중위법/선위법 하는 놈들을 알아야 하니까요..
컴파일러에 관한 책에도 나옵니다..
참으로 오랫만에..
From 류..
* P.S. : Compute(P:에러났을 때 위치, Strg:수식, Error:에러났는지 여부):결과값;
Unit BMath;
Interface
Var
IVar : Packed Array [0..50] Of Real;
Function CReal(x:Real):Boolean;
Function Tan(x:Real):Real;
Function ArcCos(x:Real):Real;
Function ArcSin(x:Real):Real;
Function Fact(n:Integer):Real;
Function XY(x,y:Real):Real;
Function nPr(n,r:Integer):Real;
Function nCr(n,r:Integer):Real;
Function nHr(n,r:Integer):Real;
Function nTr(n,r:Integer):Real;
Function Sinh(x:Real):Real;
Function Cosh(x:Real):Real;
Function Tanh(x:Real):Real;
Function Pol(x,y:Real):Real;
Function Log(x:Real):Real;
Function Lg(x,y:Real):Real;
Function Max(x,b:Real):Real;
Function Min(x,b:Real):Real;
Procedure Bound(Var X:Integer; BS,BE:Integer);
Function MaxBound(x,b:Integer):Integer;
Function MinBound(x,b:Integer):Integer;
Function Compute(Var P:Integer; Strg:String; Var Error:Boolean):Real;
Function BoxIn(DataX,DataY,X1,Y1,X2,Y2:Integer):Boolean;
Implementation
Uses
SysUtils;
Function CReal;
var Logic:real;
begin
Logic:=x-round(x);
if Logic=0 then CReal:=False
else CReal:=True
end;
Function Tan;
begin
Tan:=sin(x)/cos(x)
end;
Function ArcCos;
begin
if x<>0 then ArcCos:=ArcTan(sqrt(1/sqr(x)-1))
else ArcCos:=pi/2;
end;
Function ArcSin;
begin
if x<>1 then ArcSin:=ArcTan(sqrt(1/(1-sqr(x))-1))
else ArcSin:=0;
end;
Function Fact;
var F1:Real;
begin
F1:=1;
for n:=1 to n do F1:=F1*n;
Fact:=F1
end;
Function XY;
var FA:real;
begin
if (CReal(y)) and (x<0) then XY:=0
else if x=1 then XY:=1
else if (x>0) and (x<>1) then XY:=Exp(y*Ln(x))
else if x=0 then XY:=0
else if (x=-1) and (odd(round(y))) then XY:=-1
else if (x=-1) and (odd(round(y+1))) then XY:=1
else if (x<0) and (x<>-1) then begin
XY:=1;
if odd(round(y)) then FA:=-1;
XY:=Exp(y*Ln(Abs(x)))*FA
end;
end;
Function nPr;
begin
nPr:=Fact(n)/Fact(n-r)
end;
Function nCr;
begin
nCr:=nPr(n,r)/Fact(r)
end;
Function nHr;
begin
nHr:=nCr(n+r-1,r)
end;
Function nTr;
begin
nTr:=XY(n,r)
end;
Function Sinh;
begin
sinh:=(Exp(x)-Exp(-x))/2
end;
Function Cosh;
begin
Cosh:=(Exp(x)+Exp(-x))/2
end;
Function Tanh;
begin
Tanh:=Sinh(x)/Cosh(x)
end;
Function Pol;
begin
Pol:=Sqrt(sqr(x)+sqr(y))
end;
Function Log;
begin
Log:=Ln(x)/Ln(10)
end;
Function Lg;
begin
Lg:=Ln(y)/ln(x)
end;
Function Max;
begin
if x>b then Max:=b
else Max:=x;
end;
Function Min;
begin
if x
else Min:=x;
end;
Procedure Bound(Var X:Integer; BS,BE:Integer);
Begin
If X > BE then X:= BE;
If X < BS then X:= BS;
End;
Function Maxbound;
begin
if x>b then Maxbound:=b
else Maxbound:=x;
end;
Function Minbound;
begin
if x
else Minbound:=x;
end;
Function Compute(Var P:Integer; Strg:String; Var Error:Boolean):Real;
Var
R : Real;
I, BreakPoint : Integer;
Ch : Char;
Procedure Eval(Var Formula:String; Var Value:Real; Var BreakPoint:Integer);
Const
Numbers : Set Of Char = ['0'..'9','.'];
Var
P, I : Integer;
Ch : Char;
Procedure NextP;
Begin
Repeat
Inc(P);
If P <= Length(Formula) Then Ch:=Formula[P]
Else Ch:=#13;
Until Ch <> ' ';
End;
Function Expr:Real;
Var
E : Real;
Operator : Char;
Function SmplExpr:real;
Var
S : Real;
Operator : Char;
Function Term:Real;
Var
T : Real;
Function S_Fact:Real;
Function Fct:Real;
Var
Fn : String[20];
L, Start : Integer;
F : Real;
Procedure Process_As_Number;
Var
Code : Integer;
Begin
Start:=P;
Repeat NextP; Until Not(Ch In Numbers);
If Ch = '.' Then
Repeat
NextP
Until Not(Ch In Numbers);
If Ch = 'E' then
Begin
NextP;
Repeat
NextP;
UNtil Not(Ch In Numbers);
End;
Val(Copy(Formula, Start, P-Start),F,Code);
End;
Procedure Process_As_New_Expr;
Begin
NextP;
F:=Expr;
If Ch = ')' Then NextP
Else BreakPoint:=P;
End;
Procedure Process_As_Standard_Function;
Var
TempByte : Byte;
Begin
If Formula[P] = '@' then
Begin
NextP;
F:=Fct;
TempByte:= 0;
While (F >= 1) and (F <= 50) Do
Begin
Inc(TempByte);
F:= F-1;
End;
F:= IVar[TempByte];
End
Else If Copy(Formula,P,3) = 'ABS' Then
Begin
Inc(P,2);
NextP;
F:=Fct;
F:=Abs(F);
End
Else If Copy(Formula,P,4) = 'SQRT' Then
Begin
Inc(P,3);
NextP;
F:=Fct;
F:=Sqrt(F);
End
Else If Copy(Formula,P,3) = 'SQR' Then
Begin
Inc(P,2);
NextP;
F:=Fct;
F:=Sqr(F);
End
Else If Copy(Formula,P,4) = 'SINH' Then
Begin
Inc(P,3);
NextP;
F:=Fct;
F:=Sinh(F);
End
Else If Copy(Formula,P,4) = 'COSH' Then
Begin
Inc(P,3);
NextP;
F:=Fct;
F:=Cosh(F);
End
Else If Copy(Formula,P,4) = 'TANH' Then
Begin
Inc(P,3);
NextP;
F:=Fct;
F:=Tanh(F);
End
Else If Copy(Formula,P,3) = 'SIN' Then
Begin
Inc(P,2);
NextP;
F:=Fct;
F:=Sin(F);
End
Else If Copy(Formula,P,3) = 'COS' Then
Begin
Inc(P,2);
NextP;
F:=Fct;
F:=Cos(F);
End
Else If Copy(Formula,P,3) = 'TAN' Then
Begin
Inc(P,2);
NextP;
F:=Fct;
F:=Tan(F);
End
Else If Copy(Formula,P,6) = 'ARCSIN' Then
Begin
Inc(P,5);
NextP;
F:=Fct;
F:=ArcSin(F);
End
Else If Copy(Formula,P,6) = 'ARCCOS' Then
Begin
Inc(P,5);
NextP;
F:=Fct;
F:=ArcCos(F);
End
Else If Copy(Formula,P,6) = 'ARCTAN' Then
Begin
Inc(P,5);
NextP;
F:=Fct;
F:=ArcTan(F);
End
Else If Copy(Formula,P,2) = 'LN' Then
Begin
Inc(P);
NextP;
F:=Fct;
F:=Ln(F);
End
Else If Copy(Formula,P,3) = 'LOG' Then
Begin
Inc(P,2);
NextP;
F:=Fct;
F:=Log(F);
End
Else If Copy(Formula,P,3) = 'EXP' Then
Begin
Inc(P,2);
NextP;
F:=Fct;
F:=Exp(F);
End
Else If Copy(Formula,P,4) = 'FACT' Then
Begin
Inc(P,3);
NextP;
F:=Fct;
F:=Fact(Trunc(F));
End
Else If Copy(Formula,P,2) = '@@' Then
Begin
Inc(P,2);
F:=IVar[Byte(Formula[P])-64];
NextP;
End
Else BreakPoint:=P;
End;
Begin
If (Ch In Numbers) Then Process_As_Number
Else If (Ch = '(') Then Process_As_New_Expr
Else Process_As_Standard_Function;
Fct:=F;
End;
Begin
If Ch = '-' Then
Begin
NextP;
S_Fact:=-Fct;
End
Else S_Fact:=Fct;
End;
Begin
T:=S_Fact;
While Ch = '^' Do
Begin
NextP;
T:=XY(T,S_Fact);
End;
Term:=T;
End;
Begin
S:=Term;
While Ch In ['*','/'] Do
Begin
Operator:=Ch;
NextP;
Case Operator Of
'*' : S:=S*Term;
'/' : S:=S/Term;
End;
End;
SmplExpr:=S;
End;
Begin
E:=SmplExpr;
While Ch In ['+','-'] Do
Begin
Operator:=Ch;
NextP;
Case Operator Of
'+' : E:=E+SmplExpr;
'-' : E:=E-SmplExpr;
End;
End;
Expr:=E;
End;
Begin
Formula:= UpperCase(Formula);
If Formula[1] = '.' Then Formula:='0'+Formula;
If Formula[1] = '+' Then Delete(Formula,1,1);
P:=0;
NextP;
Value:=Expr;
If Ch = #13 Then Error:=False
Else Error:=True;
P:=BreakPoint;
End;
Begin
Eval(Strg,R,P);
Compute:=R;
End;
Function BoxIn(DataX,DataY,X1,Y1,X2,Y2:Integer):Boolean;
Begin
If ((DataX >= X1) and (DataX <= X2)) and
((DataY >= Y1) and (DataY <= Y2)) then BoxIn:= True
Else BoxIn:= False;
End;
End.
광주시델맨 wrote:
>
> 안녕하세요 .!
>
> 광주에서 델파이를 배우며 좀씩 프로그램 해보고 있습니다.
>
> 제겐 아주 중요한 건대요 .
>
> 에디트(Edit)버튼 하나에 다중산술식(예 100+200*2 등)을
>
> 입력된(문자형)경우 어떻게 처리를 해야 하나요..?
>
> 고수님께 한수 부탁드립니다
>
>
>
0
0
삭제
수정
댓글
최의종
•
2000.10.28 14:08
YACC 라는 공개 라이브러리가 있습니다.
잘 찾아보시면(하이텔 등) 올라와있을겁니다.
한방에 해결되지요.
0
0
삭제
수정
댓글
(NOTICE) You must be
logged in
to comment on this post.
김명일
•
2000.10.28 19:49
2
COMMENTS
/
0
LIKES
[급질문]소켓사용시 어느곳에서는 접속이 않됨
이경문
•
2000.10.29 03:02
델파이 버그라기 보다는 네트워크의 문제입니다. 특정 서버에 ping을 해 보세요. ping이 안되면 접속도 안...
김명일
•
2000.10.30 00:21
이경문 wrote: > 델파이 버그라기 보다는 네트워크의 문제입니다. > 특정 서버에 ping을 해 보세요. ping...
윤미영
•
2000.10.28 19:18
1
COMMENTS
/
0
LIKES
이미지와 이미지를 겹치고 난 후 겹친상태 그대로 저장하려면(위에이미지는투명)?
윤미영
•
2000.10.28 19:40
윤미영 wrote: > 이미지와 이미지를 겹쳤습니다. 위에 이미지는 배경이 투명하게 만든 bmp이미지 입니다. ...
cico
2000.10.28 18:54
0
COMMENTS
/
0
LIKES
궁금? 디비그리드 널 알고싶다.
델초보
•
2000.10.28 18:37
1
COMMENTS
/
0
LIKES
갑자기 툴바의 그림과 Qreport에서의 버튼그림이...!!!!
한하눌
•
2000.10.28 20:27
델초보 wrote: > 안녕하세요.. > 잘사용하던 프로그램에서 갑자기 툴바의 ToolButton의 그림이 않보여여....
초보 델피언
•
2000.10.28 15:36
1
COMMENTS
/
0
LIKES
프로그램의 아이콘을 영구적으로 바꾸는 방법은?
컴맹
•
2000.10.28 20:52
이런걸 물어 보시는 건가여...? procedure TForm1.FormCreate(Sender: TObject); begin Application...
김지엽
2000.10.28 15:04
0
COMMENTS
/
0
LIKES
DCOM 삭제법은??
박제범
•
2000.10.28 14:00
1
COMMENTS
/
0
LIKES
다른 APP들 메시지 훔치는 방법??
Black}{ole
•
2000.10.29 06:00
박제범 wrote: > 다른 app들이 다시 그려지거나 화면이 변하는 것을 알수 있는 방법이 있나요?? 후킹을...
이성민
2000.10.28 12:35
0
COMMENTS
/
0
LIKES
Access violation at address........--;
재영아빠
2000.10.28 11:32
0
COMMENTS
/
0
LIKES
메인에서 그래그를 하여 새로 만든 Modeless 폼으로 드롭할 경우
반정현
2000.10.28 11:15
0
COMMENTS
/
0
LIKES
텍스트 문서의 특정부분을 표시하고 찾는기능을 만들고 싶어요.
이리
2000.10.28 09:49
0
COMMENTS
/
0
LIKES
엔티서버가 엔티 클라이언트가 연결되었는지 알아보는법..
김경한
2000.10.30 03:06
0
COMMENTS
/
0
LIKES
[질문:급합니다] DbGrid 에서 값을 가져올려면?
손상수
•
2000.10.28 07:58
1
COMMENTS
/
0
LIKES
퀵리포트에서 업체별정리가 안되여~~~
최영근
•
2000.10.28 15:07
손상수 wrote: > 안녕하십니까? > 델파이 5.0을 사용하구 있구요.. > 지사별 영업실적 리포트 작성하고 ...
광주시델맨
•
2000.10.28 07:33
2
COMMENTS
/
0
LIKES
다중연산식(문자형)계산방법좀 도와주세요!
안녕하세요 .! 광주에서 델파이를 배우며 좀씩 프로그램 해보고 있습니다. 제겐 아주 중요한 건대요 . 에디트(Edit)버튼 하나에 다중산술식(예 100+200*2 등)을 입력된(문자형)경우 어떻게 처리를 해야 하나요..? 고수님께 한수 부탁드립니다
류종택
•
2000.10.28 08:27
터보파스칼 시절에 사용하던 것이라.. 코딩이 다소 매끄럽지 못합니다.. 정확한 원리를 아시려면.. 알...
최의종
•
2000.10.28 14:08
YACC 라는 공개 라이브러리가 있습니다. 잘 찾아보시면(하이텔 등) 올라와있을겁니다. 한방에 해결되...
김형중
•
2000.10.28 07:16
1
COMMENTS
/
0
LIKES
ApplyUpdate안됨(마이다스에서)
이성찬
•
2000.10.28 18:00
ChangeCount 가 0이 아니라는 얘기는 변경은 되는데 서버 적용은 안된다는 얘기죠... TClientDataSet ...
빈거울
2000.10.28 07:15
0
COMMENTS
/
0
LIKES
원도2000에서 메모리 반환 ?
volf
•
2000.10.28 06:41
2
COMMENTS
/
0
LIKES
2차원 배열의 값들을 텍스트로 출력을 하려면??
이선경
•
2000.10.28 18:03
richedit1.text:=inttostr(pan[i, j]); 위의것을 아래와 같이하면 되지 않을 랑가요... richedit1.text...
volf
•
2000.10.29 08:24
정말 감사합니다.
궁금맨
•
2000.10.28 05:29
1
COMMENTS
/
0
LIKES
초보가 드리는 하찮은 질문입니다..(폼)
parkisu
•
2000.10.28 10:12
궁금맨 wrote: > 폼위에 에디터박스하나 콤보박스하나 버튼하나가 있는데.. > 여기서 음... > 이중 하나...
neo
•
2000.10.28 05:04
1
COMMENTS
/
0
LIKES
db최적화?
한하눌
•
2000.10.28 05:31
neo wrote: > 안녕하세요. > 첫번째... > 데이터베이스를 연결후에 스키마를 읽을 수 없나요? 두...
깔삼이
•
2000.10.28 05:01
4
COMMENTS
/
0
LIKES
델파이에서 실수형을 정수형으로 바꾸는데 사용하는 함수를 가르쳐 주세요??? 급합니다.
한하눌
•
2000.10.28 05:24
깔삼이 wrote: > 예) 델파이에서 실수형을 정수형으로 바꾸는데 소숫점 첫째자리에서 > 0.5미만은...
깔삼이
•
2000.10.28 17:45
한하눌 wrote: > 깔삼이 wrote: > > 예) 델파이에서 실수형을 정수형으로 바꾸는데 소숫점 첫째자리에서...
강호규
•
2000.10.28 05:21
깔삼이 wrote: > 예) 델파이에서 실수형을 정수형으로 바꾸는데 소숫점 첫째자리에서 > 0.5미만은...
깔삼이
•
2000.10.28 17:48
강호규 wrote: > 깔삼이 wrote: > > 예) 델파이에서 실수형을 정수형으로 바꾸는데 소숫점 첫째자리에서...
광주시델맨
2000/10/28 07:33
Views
422
Likes
0
Comments
2
Reports
0
Tag List
수정
삭제
목록으로
한델 로그인 하기
로그인 상태 유지
아직 회원이 아니세요? 가입하세요!
암호를 잊어버리셨나요?
서버에 요청 중입니다. 잠시만 기다려 주십시오...
코딩이 다소 매끄럽지 못합니다..
정확한 원리를 아시려면..
알고리즘에 관한 서적을 보셔야할 것 입니다..
수식을 풀어내는 중위법/선위법 하는 놈들을 알아야 하니까요..
컴파일러에 관한 책에도 나옵니다..
참으로 오랫만에..
From 류..
* P.S. : Compute(P:에러났을 때 위치, Strg:수식, Error:에러났는지 여부):결과값;
Unit BMath;
Interface
Var
IVar : Packed Array [0..50] Of Real;
Function CReal(x:Real):Boolean;
Function Tan(x:Real):Real;
Function ArcCos(x:Real):Real;
Function ArcSin(x:Real):Real;
Function Fact(n:Integer):Real;
Function XY(x,y:Real):Real;
Function nPr(n,r:Integer):Real;
Function nCr(n,r:Integer):Real;
Function nHr(n,r:Integer):Real;
Function nTr(n,r:Integer):Real;
Function Sinh(x:Real):Real;
Function Cosh(x:Real):Real;
Function Tanh(x:Real):Real;
Function Pol(x,y:Real):Real;
Function Log(x:Real):Real;
Function Lg(x,y:Real):Real;
Function Max(x,b:Real):Real;
Function Min(x,b:Real):Real;
Procedure Bound(Var X:Integer; BS,BE:Integer);
Function MaxBound(x,b:Integer):Integer;
Function MinBound(x,b:Integer):Integer;
Function Compute(Var P:Integer; Strg:String; Var Error:Boolean):Real;
Function BoxIn(DataX,DataY,X1,Y1,X2,Y2:Integer):Boolean;
Implementation
Uses
SysUtils;
Function CReal;
var Logic:real;
begin
Logic:=x-round(x);
if Logic=0 then CReal:=False
else CReal:=True
end;
Function Tan;
begin
Tan:=sin(x)/cos(x)
end;
Function ArcCos;
begin
if x<>0 then ArcCos:=ArcTan(sqrt(1/sqr(x)-1))
else ArcCos:=pi/2;
end;
Function ArcSin;
begin
if x<>1 then ArcSin:=ArcTan(sqrt(1/(1-sqr(x))-1))
else ArcSin:=0;
end;
Function Fact;
var F1:Real;
begin
F1:=1;
for n:=1 to n do F1:=F1*n;
Fact:=F1
end;
Function XY;
var FA:real;
begin
if (CReal(y)) and (x<0) then XY:=0
else if x=1 then XY:=1
else if (x>0) and (x<>1) then XY:=Exp(y*Ln(x))
else if x=0 then XY:=0
else if (x=-1) and (odd(round(y))) then XY:=-1
else if (x=-1) and (odd(round(y+1))) then XY:=1
else if (x<0) and (x<>-1) then begin
XY:=1;
if odd(round(y)) then FA:=-1;
XY:=Exp(y*Ln(Abs(x)))*FA
end;
end;
Function nPr;
begin
nPr:=Fact(n)/Fact(n-r)
end;
Function nCr;
begin
nCr:=nPr(n,r)/Fact(r)
end;
Function nHr;
begin
nHr:=nCr(n+r-1,r)
end;
Function nTr;
begin
nTr:=XY(n,r)
end;
Function Sinh;
begin
sinh:=(Exp(x)-Exp(-x))/2
end;
Function Cosh;
begin
Cosh:=(Exp(x)+Exp(-x))/2
end;
Function Tanh;
begin
Tanh:=Sinh(x)/Cosh(x)
end;
Function Pol;
begin
Pol:=Sqrt(sqr(x)+sqr(y))
end;
Function Log;
begin
Log:=Ln(x)/Ln(10)
end;
Function Lg;
begin
Lg:=Ln(y)/ln(x)
end;
Function Max;
begin
if x>b then Max:=b
else Max:=x;
end;
Function Min;
begin
if x
else Min:=x;
end;
Procedure Bound(Var X:Integer; BS,BE:Integer);
Begin
If X > BE then X:= BE;
If X < BS then X:= BS;
End;
Function Maxbound;
begin
if x>b then Maxbound:=b
else Maxbound:=x;
end;
Function Minbound;
begin
if x
else Minbound:=x;
end;
Function Compute(Var P:Integer; Strg:String; Var Error:Boolean):Real;
Var
R : Real;
I, BreakPoint : Integer;
Ch : Char;
Procedure Eval(Var Formula:String; Var Value:Real; Var BreakPoint:Integer);
Const
Numbers : Set Of Char = ['0'..'9','.'];
Var
P, I : Integer;
Ch : Char;
Procedure NextP;
Begin
Repeat
Inc(P);
If P <= Length(Formula) Then Ch:=Formula[P]
Else Ch:=#13;
Until Ch <> ' ';
End;
Function Expr:Real;
Var
E : Real;
Operator : Char;
Function SmplExpr:real;
Var
S : Real;
Operator : Char;
Function Term:Real;
Var
T : Real;
Function S_Fact:Real;
Function Fct:Real;
Var
Fn : String[20];
L, Start : Integer;
F : Real;
Procedure Process_As_Number;
Var
Code : Integer;
Begin
Start:=P;
Repeat NextP; Until Not(Ch In Numbers);
If Ch = '.' Then
Repeat
NextP
Until Not(Ch In Numbers);
If Ch = 'E' then
Begin
NextP;
Repeat
NextP;
UNtil Not(Ch In Numbers);
End;
Val(Copy(Formula, Start, P-Start),F,Code);
End;
Procedure Process_As_New_Expr;
Begin
NextP;
F:=Expr;
If Ch = ')' Then NextP
Else BreakPoint:=P;
End;
Procedure Process_As_Standard_Function;
Var
TempByte : Byte;
Begin
If Formula[P] = '@' then
Begin
NextP;
F:=Fct;
TempByte:= 0;
While (F >= 1) and (F <= 50) Do
Begin
Inc(TempByte);
F:= F-1;
End;
F:= IVar[TempByte];
End
Else If Copy(Formula,P,3) = 'ABS' Then
Begin
Inc(P,2);
NextP;
F:=Fct;
F:=Abs(F);
End
Else If Copy(Formula,P,4) = 'SQRT' Then
Begin
Inc(P,3);
NextP;
F:=Fct;
F:=Sqrt(F);
End
Else If Copy(Formula,P,3) = 'SQR' Then
Begin
Inc(P,2);
NextP;
F:=Fct;
F:=Sqr(F);
End
Else If Copy(Formula,P,4) = 'SINH' Then
Begin
Inc(P,3);
NextP;
F:=Fct;
F:=Sinh(F);
End
Else If Copy(Formula,P,4) = 'COSH' Then
Begin
Inc(P,3);
NextP;
F:=Fct;
F:=Cosh(F);
End
Else If Copy(Formula,P,4) = 'TANH' Then
Begin
Inc(P,3);
NextP;
F:=Fct;
F:=Tanh(F);
End
Else If Copy(Formula,P,3) = 'SIN' Then
Begin
Inc(P,2);
NextP;
F:=Fct;
F:=Sin(F);
End
Else If Copy(Formula,P,3) = 'COS' Then
Begin
Inc(P,2);
NextP;
F:=Fct;
F:=Cos(F);
End
Else If Copy(Formula,P,3) = 'TAN' Then
Begin
Inc(P,2);
NextP;
F:=Fct;
F:=Tan(F);
End
Else If Copy(Formula,P,6) = 'ARCSIN' Then
Begin
Inc(P,5);
NextP;
F:=Fct;
F:=ArcSin(F);
End
Else If Copy(Formula,P,6) = 'ARCCOS' Then
Begin
Inc(P,5);
NextP;
F:=Fct;
F:=ArcCos(F);
End
Else If Copy(Formula,P,6) = 'ARCTAN' Then
Begin
Inc(P,5);
NextP;
F:=Fct;
F:=ArcTan(F);
End
Else If Copy(Formula,P,2) = 'LN' Then
Begin
Inc(P);
NextP;
F:=Fct;
F:=Ln(F);
End
Else If Copy(Formula,P,3) = 'LOG' Then
Begin
Inc(P,2);
NextP;
F:=Fct;
F:=Log(F);
End
Else If Copy(Formula,P,3) = 'EXP' Then
Begin
Inc(P,2);
NextP;
F:=Fct;
F:=Exp(F);
End
Else If Copy(Formula,P,4) = 'FACT' Then
Begin
Inc(P,3);
NextP;
F:=Fct;
F:=Fact(Trunc(F));
End
Else If Copy(Formula,P,2) = '@@' Then
Begin
Inc(P,2);
F:=IVar[Byte(Formula[P])-64];
NextP;
End
Else BreakPoint:=P;
End;
Begin
If (Ch In Numbers) Then Process_As_Number
Else If (Ch = '(') Then Process_As_New_Expr
Else Process_As_Standard_Function;
Fct:=F;
End;
Begin
If Ch = '-' Then
Begin
NextP;
S_Fact:=-Fct;
End
Else S_Fact:=Fct;
End;
Begin
T:=S_Fact;
While Ch = '^' Do
Begin
NextP;
T:=XY(T,S_Fact);
End;
Term:=T;
End;
Begin
S:=Term;
While Ch In ['*','/'] Do
Begin
Operator:=Ch;
NextP;
Case Operator Of
'*' : S:=S*Term;
'/' : S:=S/Term;
End;
End;
SmplExpr:=S;
End;
Begin
E:=SmplExpr;
While Ch In ['+','-'] Do
Begin
Operator:=Ch;
NextP;
Case Operator Of
'+' : E:=E+SmplExpr;
'-' : E:=E-SmplExpr;
End;
End;
Expr:=E;
End;
Begin
Formula:= UpperCase(Formula);
If Formula[1] = '.' Then Formula:='0'+Formula;
If Formula[1] = '+' Then Delete(Formula,1,1);
P:=0;
NextP;
Value:=Expr;
If Ch = #13 Then Error:=False
Else Error:=True;
P:=BreakPoint;
End;
Begin
Eval(Strg,R,P);
Compute:=R;
End;
Function BoxIn(DataX,DataY,X1,Y1,X2,Y2:Integer):Boolean;
Begin
If ((DataX >= X1) and (DataX <= X2)) and
((DataY >= Y1) and (DataY <= Y2)) then BoxIn:= True
Else BoxIn:= False;
End;
End.
광주시델맨 wrote:
>
> 안녕하세요 .!
>
> 광주에서 델파이를 배우며 좀씩 프로그램 해보고 있습니다.
>
> 제겐 아주 중요한 건대요 .
>
> 에디트(Edit)버튼 하나에 다중산술식(예 100+200*2 등)을
>
> 입력된(문자형)경우 어떻게 처리를 해야 하나요..?
>
> 고수님께 한수 부탁드립니다
>
>
>