作业帮 > 综合 > 作业

pascal语言,表达式求值问题!

来源:学生作业帮 编辑:搜搜考试网作业帮 分类:综合作业 时间:2024/04/27 14:23:50
pascal语言,表达式求值问题!
表达式计算
express.pas
Time Limit:1000MS
Memory Limit:2048KB
给定一个表达式串,计算其最后结果
输入:
一个表达式串(只包函+-*/()等运算符,且是整除;表达式长度小于255个字符)
输出:
最后结果
输入:express.in
3+2*1
输出:express.out
5
提示(存在括号,还有负数的情况!);
叙述请详细一点……
有源代码更好!
pascal语言,表达式求值问题!
不知道对不对 错了请告诉我 谢谢
具体表达式计算的方法我就不说了 网上也可以找到 就是栈的操作而已
程序如下:
var n,i,CSignA,CNumbA:longint;
SignA:array[1..200] of char;
NumbA:array[1..200] of longint;
s,s0,s1:string;
b:array[1..300] of boolean;
function GetLevel(Sign:char):integer;//获取运算符优先等级
begin
if Sign='+' then exit(1)
else if Sign='-' then exit(1)
else if Sign='*' then exit(2)
else if Sign='/' then exit(2)
else if Sign='^' then exit(3)
else exit(0);
end;
function GetResult(Num1,Num2:longint;Sign:char):longint;//用于进行计算
var i:longint; j:longint;
begin
if Sign='+' then exit((num1+num2))
else if Sign='-' then exit((num1-num2))
else if Sign='*' then exit((num1*num2))
else if Sign='/' then exit((num1 div num2))
else if Sign='^' then begin
j:=num1;
for i:=2 to num2 do begin
j:=j*num1;
end;
exit(j);
end;
end;

function IsNumberic(Ch:char):boolean;//判断是否数字
begin
if (ch>='0')and(ch0 then begin skip:=skip-1; continue; end;

if s[i]='(' then push(s[i])
else if b[i] then begin//处理负数
push(0);
push('-');
end else if IsNumberic(s[i]) then begin//处理数字
j:=i;
num:=0;
while IsNumberic(s[j]) do begin num:=num*10+ChangeIntoNum(s[j]); inc(j); end;
skip:=j-1-i;
push(num);
end else if GetLevel(s[i])0 then begin
if CSignA=0 then push(s[i])
else begin
while GetLevel(s[i])