欢迎来到天天文库
浏览记录
ID:40754221
大小:34.50 KB
页数:5页
时间:2019-08-07
《Pascal表达式求值》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Pascal表达式求值:负数能够参与运算。其中负数(-m)的解决办法是通过在数字栈中构建0-m方式,把单目的负数符号变成减法运算(负数主要出现在表达式的开头以及“(”后面,程序默认输入的表达式格式正确。programexpress;vars:string;//输入字符串fuhao:array[1..100]ofchar;//符号栈shuzi:array[1..100]oflongint;//数字栈fh_top,sz_top:integer;//栈指针i,j,len,k:longint;c:char;functionjibie(c:char):integer;//定义运算符的优先级begin
2、casecof'(':exit(0);'+','-':exit(1);'*','/':exit(2);'^':exit(3);end;end;functionjisuan(x,y:longint;c:char):longint;//计算函数varr,t:longint;begincasecof'+':exit(x+y);'-':exit(x-y);'*':exit(x*y);'/':exit(xdivy);'^':begint:=1;forr:=1toydot:=t*x;end;end;jisuan:=t;end;beginreadln(s);fh_top:=0;sz_top:=0;len
3、:=length(s);i:=1;ifs[i]='-'then//判断表达式第一个数是否是负数begininc(sz_top);shuzi[sz_top]:=0;end;whilei<=lendobeginifs[i]in['+','-','*','/','^']thenbeginwhile((fh_top<>0)and(jibie(s[i])<=jibie(fuhao[fh_top])))dobegink:=jisuan(shuzi[sz_top-1],shuzi[sz_top],fuhao[fh_top]);dec(fh_top);dec(sz_top);shuzi[sz_top]:=
4、k;end;inc(fh_top);fuhao[fh_top]:=s[i];end;ifs[i]='('thenbegininc(fh_top);fuhao[fh_top]:=s[i];ifs[i+1]='-'thenbegininc(sz_top);shuzi[sz_top]:=0;end;end;ifs[i]=')'thenbeginwhilefuhao[fh_top]<>'('dobegink:=jisuan(shuzi[sz_top-1],shuzi[sz_top],fuhao[fh_top]);dec(fh_top);dec(sz_top);shuzi[sz_top]:=k;en
5、d;dec(fh_top);end;ifs[i]in['0'..'9']thenbegink:=ord(s[i])-48;inc(i);whiles[i]in['0'..'9']dobegink:=k*10+ord(s[i])-48;inc(i);end;inc(sz_top);shuzi[sz_top]:=k;dec(i);end;inc(i);end;whilefh_top>0do//符号栈中的元素全部运算,并弹栈begink:=jisuan(shuzi[sz_top-1],shuzi[sz_top],fuhao[fh_top]);dec(fh_top);dec(sz_top);shu
6、zi[sz_top]:=k;end;writeln(shuzi[sz_top]);//数字栈底元素为结果end.
此文档下载收益归作者所有