pascal语言,表达式求值问题!表达式计算express.pasTime Limit:1000MSMemory Limit:2048KB给定一个表达式串,计算其最后结果输入:一个表达式串(只包函+-*/()等运算符,且是整除;表达式长度小于255个字符)

来源:学生作业帮助网 编辑:作业帮 时间:2024/11/17 01:43:22
pascal语言,表达式求值问题!表达式计算express.pasTime Limit:1000MSMemory Limit:2048KB给定一个表达式串,计算其最后结果输入:一个表达式串(只包函+-*/()等运算符,且是整除;表达式长度小于255个字符)
xU[sF+'sLgR?t2M-^R,1Hqc`;8f8) n\h%Е00n_RfG{;ߞ+b9R)4VkK6q;xs1x_3ũ|>M$!/::na>z׹䳡|7_ɝ#|VlIl}t6S*qaW_ugoSnYw2er6\)!?V(/g ],-J\S7ݜ?I"6PCND;] q˶ 5{@p)A[X^+rUMJ闤rN<{o(Rȝ-"yWBa9];KǗ7}Njyׯ7`Hlo-+{@i't)$Qkrx%~@)KBޞz%^|]KkmQC}U^YIg$Tq;+bk۫Y6IRZy"=jz7α > ȣzdc‚an N&xg($b##{h8 q\YbX5 ay ^&%ɒr4 O@kZfy<)ln <A\wCVg*hhƮIY|*.H%X)*= ۆ$R|ԦFbCCfقyB.lC!h[cNnQdhm8ݒ?2IƜEq8N#F u8nƹ x8ց>ذZ?kM2\nOMMɼɖSA`f9 g|".?

pascal语言,表达式求值问题!表达式计算express.pasTime Limit:1000MSMemory Limit:2048KB给定一个表达式串,计算其最后结果输入:一个表达式串(只包函+-*/()等运算符,且是整除;表达式长度小于255个字符)
pascal语言,表达式求值问题!
表达式计算
express.pas
Time Limit:1000MS
Memory Limit:2048KB
给定一个表达式串,计算其最后结果
输入:
一个表达式串(只包函+-*/()等运算符,且是整除;表达式长度小于255个字符)
输出:
最后结果
输入:express.in
3+2*1
输出:express.out
5
提示(存在括号,还有负数的情况!);
叙述请详细一点……
有源代码更好!

pascal语言,表达式求值问题!表达式计算express.pasTime Limit:1000MSMemory Limit:2048KB给定一个表达式串,计算其最后结果输入:一个表达式串(只包函+-*/()等运算符,且是整除;表达式长度小于255个字符)
不知道对不对 错了请告诉我 谢谢
具体表达式计算的方法我就不说了 网上也可以找到 就是栈的操作而已
程序如下:
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])