pascal ord 需要输入两个数字加+或-或*或/ 输出答案 如100 2-输出98.00

2025-04-30 14:04:33
推荐回答(1个)
回答1:

program d015;
var a,b,c:real;
sign:char;
begin
readln(a,b,sign,sign);
if sign='+'  then c:=a+b;
if sign='-'  then c:=a-b;
if sign='*'  then c:=a*b;
if sign='/'  then c:=a/b;
write(c:0:2);
end.
========================================================================
var
zhan:array[1..1000] of real;
zhantop:integer;
s,ss:string;
i,error:integer;
ch:string[1];
a,b,c:real;

procedure push(var t:integer;var x:real); {t为栈顶指针}
begin
if t<1000 then begin  inc(t); zhan[t]:=x; end;
end;

procedure pop(var t:integer;var x:real);
begin
if t>0 then begin x:=zhan[t]; dec(t);  end;
end;

begin
s:='100.2.-@';
zhantop:=0;
while length(s)>1 do begin
ch:=copy(s,1,1);
if (ch>='1')and(ch<='9') then begin
i:=pos('.',s);
ss:=copy(s,1,i-1);
val(ss,a,error);
push(zhantop,a);
s:=copy(s,i+1,length(s)-i);
end else begin
pop(zhantop,b); pop(zhantop,a); 
if copy(s,1,1)='+' then begin
c:=a+b; 
end;
if copy(s,1,1)='-' then begin
c:=a-b; 
end;
if copy(s,1,1)='*' then begin
c:=a*b; 
end;
if copy(s,1,1)='/' then begin
c:=a/b; 
end;

push(zhantop,c);  
s:=copy(s,2,length(s)-1);
end;
end;
pop(zhantop,c);
writeln(c:10:2);
end.

后缀式的运算规则为:•运算符出现的顺序即为表达式的运算顺序;•每个运算符和在它之前出现且紧靠它的两个操作数构成一个最小表达式;如:3.5.2.-*7.+@’@’为表达式的结束符号。‘.’为操作数的结束符号。运算符号:+、-、*、/ 
【输入:】后缀表达式(长度不超过100)。
【输出:】表达式的值。
【样例输入:】3.5.2.-*7.+@
【样例输出:】16