free pascal 帮忙啊!! 后缀表达式计算 急啊!!

programtrack;vart1:array[1..10000]oflongint;top,n,i:integer;rd:char;f:boolean;beginrd... program track;
var t1:array[1..10000] of longint;
top,n,i:integer;
rd:char;
f:boolean;
begin
rd:=' ';
top:=0;
f:=false;
while rd<>'@' do
begin
read(rd);
n:=0;
while (rd in ['0'..'9']) do
begin
f:=true;
n:=n*10+ord(rd)-ord('0'); //这句话什么意思?为什么ord(rd)-ord('0')?
read(rd);
end;
if f then begin
inc(top);
t1[top]:=n;
f:=false;end;
if rd in ['+','-','*','/'] then
begin
case rd of
'+':t1[top-1]:=t1[top-1]+t1[top];
'-':t1[top-1]:=t1[top-1]-t1[top];
'*':t1[top-1]:=t1[top-1]*t1[top];
'/':t1[top-1]:=t1[top-1] div t1[top]; //这一大段case语句:=后面的什么意思?
end;
dec(top);
end;
end;
write(t1[1]);
end.
帮个忙吧!谢谢!!最好8月6日好
展开
 我来答
景茹炜L8
2012-08-06 · TA获得超过481个赞
知道小有建树答主
回答量:617
采纳率:0%
帮助的人:425万
展开全部
n:=n*10+ord(rd)-ord('0');
ord(rd)为取字符的序数。char为有序类型。如字符b在a的后面,内码大1。
如果rd为'0'时,ord(rd)-ord('0')的值为0,为'1'是,则是1。
n的初值为零。第一个读进来的数字作个位。
第二个读进来的数字(如果有的话),就把前面读进来的第一个数字作10位(乘10),本位作个位。以此类推。n:=n*10+ord(rd)-ord('0');

case后的赋值:=后面表示数组。
t1[top-1]加上数组的下一个元素t1[top]。以下类推。
更多追问追答
追问
但是ord好像是求ascll码的  0的ascll码是48呀,就这里我不太懂  谢谢
追答
无论0的ascii码是多少,ord(rd)-ord('0')求出了字符rd与'0'的差值,所以也就与内码值无关了。
比如:rd为'3',内码为48+3,减去48(即'0'的内码),结果还是3。
Storm代理
2023-07-25 广告
StormProxies是一家提供动态代理服务器服务的企业,旨在帮助用户更好地管理网络访问和安全。以下是一些关于StormProxies的IP动态代理服务的特点:1. 高匿名性:StormProxies的动态代理服务器具有高匿名性,可以有效... 点击进入详情页
本回答由Storm代理提供
feixiang6822
2012-08-08
知道答主
回答量:42
采纳率:0%
帮助的人:12.9万
展开全部
好难……我才到 clrscr
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式