czslist(7)
czflist(6)
czflist(6)
解决方案 »
- [Delphi + MySQL] 通过参数Parameters将中文字写入MySQL时, 显示为乱码?
- easygrid 如何改变表列头名称 和 行列头名称呢 ?
- 讨论:用netmeeting的做服务的问题!!
- 调用DLL文件时,出现的问题!
- 如何导入导出dbisam数据库
- 这是个很简单的问题,有人愿意帮我?
- 关于listview的问题请教
- 盘点驱动精灵流氓捆绑金山毒霸六大阴招
- 我要崩溃了,怎么也弄不出来,很简单的问题,关于TStream的问题,快来抢分
- 窗体技术问题
- ***********DEIPHI新手向大家问好***********
- delphi连接sqlserver的两种安全认证方式探讨~
program Expression;
uses
SysUtils;var
Input: string;function Translate(s: string): string;
var
Stack: array of char;
i, Top: Integer;
temp: string;
begin
SetLength(Stack, Length(s));
i := 1;
Top := 0;
temp := '';
while i <= Length(s) do
begin
case s[i] of
'0'..'9':
begin
while (i <= Length(s)) and (s[i] in ['0'..'9', '.']) do
begin
temp := temp + s[i];
Inc(i);
end;
temp := temp + ' ';
Dec(i);
end;
'+', '-':
begin
while (Top > 0) and (Stack[Top - 1] <> '(') do
begin
temp := temp + Stack[Top - 1];
Dec(Top);
end;
Stack[Top] := s[i];
Inc(Top);
end;
'*', '/':
begin
if (Top > 0) and ((Stack[Top - 1] = '*') or (Stack[Top - 1] = '/'))
then
begin
temp := temp + Stack[Top - 1];
Dec(Top);
end;
Stack[Top] := s[i];
Inc(Top);
end;
'(':
begin
Stack[Top] := s[i];
Inc(Top);
end;
')':
begin
while (Stack[Top - 1] <> '(') and (Top > 0) do
begin
temp := temp + Stack[Top - 1];
Dec(Top);
end;
if Top = 0 then
begin
temp := '''('' expected!';
Top := 0;
Break;
end;
Dec(Top);
end;
end;
Inc(i);
end;
while (Top > 0) do
begin
if Stack[Top - 1] = '(' then
begin
temp := ''')'' expected1';
Break;
end;
Temp := Temp + Stack[Top - 1];
Dec(Top);
end;
Result := temp;
end;procedure Caculate(s: string);
var
Stack: array of real;
i, Top: Integer;
Info, temp: string;
HasDot: boolean;
begin
SetLength(stack, Length(s));
i := 1;
Top := -1;
Info := '';
while i <= Length(s) do
begin
case s[i] of
'+', '-', '/', '*':
begin
if Top = 0 then
begin
Info := 'Operant Expected!';
break;
end;
case s[i] of
'+': Stack[Top - 1] := Stack[Top - 1] + Stack[Top];
'-': Stack[Top - 1] := Stack[Top - 1] - Stack[Top];
'*': Stack[Top - 1] := Stack[Top - 1] * Stack[Top];
'/': Stack[Top - 1] := Stack[Top - 1] / Stack[Top];
end;
Dec(Top);
end;
'0'..'9':
begin
temp := '';
HasDot := False;
while (i <= Length(s)) and (s[i] in ['0'..'9', '.']) do
begin
temp := temp + s[i];
if s[i] = '.' then
if not HasDot then
HasDot := True
else
begin
Info := 'Number Invalidate!';
Break;
end;
Inc(i);
end;
Inc(Top);
if HasDot then
Stack[Top] := StrToFloat(temp)
else
Stack[Top] := StrToInt(temp);
Dec(i);
end;
end;
Inc(i);
end;
if Top > 0 then
Info := 'Opcode Expected!';
Writeln(Format('%f', [Stack[Top]]));
end;begin
writeln('Please input the expression:');
readln(Input);
Caculate(Translate(Input));
readln;
end.