作业帮 > 综合 > 作业

编写程序实现将输入的数学表达式转换成后缀式(逆波兰式),并对后缀式进行计算,输出得到的值.测

来源:学生作业帮 编辑:搜搜考试网作业帮 分类:综合作业 时间:2024/04/27 19:44:03
编写程序实现将输入的数学表达式转换成后缀式(逆波兰式),并对后缀式进行计算,输出得到的值.测
这要写到综合性实验报告里面
编写程序实现将输入的数学表达式转换成后缀式(逆波兰式),并对后缀式进行计算,输出得到的值.测
这是数据结构中栈的一个应用实例:表达式的计算.
具体程序如下(PASCAL语言编写):
Program Houzhuishi;
Const smaxsise=100;
Type selement=char;
sposition=0..smaxsise;
stack=record
data:array[1..smaxsise] of selement;
top:sposition;
end;
stackerro=(noerro,empty,stackunderflow,stackoverflow);
Var
s:stack;
serro:stackerro;
strin,strout:string;
Function first(t:selement):integer;
Begin
case t of
'(':first:=0;
'+','-':first:=1;
'*','/':first:=2;
end;
End;
precedure change(strin,string;Var strout:string;Var s:stack);
Var t:selement;
md,me,mt:set of selement;
i,j:integer;
Begin
md:=['0'..'9','',';'];me:=['+','-','*','/','(',')'];
mt:=md+me;
strin:=strin+';';
strout;='';
for i:=1 to length(strin) do
if not(strin[i] in mt) then
begin
strout:='change erro!';exit;
end;
spush('(',s);
for i:=1 to length(strin) do
case strin[i] of
'':;
'0'..'9':strout:=strout:strin[i];
'(':spush(strin[i],s);
')',';':repeat
spop(t,s);
if t'(' then
strout:strout+t;
until (t='(')or(sempty(s));
'+','-','*','*':begin
stop(t,s);
while first(strin[i]