用pascal做一个计算器 输入一串字符串,内容为数字,运算符(+ - * ⼀)以及括号(不分大中

2025-03-13 14:28:28
推荐回答(1个)
回答1:

program jisuanqi;
var nextch:char;
result:real;
procedure readnextch;
{读下一个字符的过程}
begin
repeat
if eoln then nextch:=';'
else begin
read(nextch);
write(nextch);
end;
until nextch<>'';
end;
procedure readnumber(var number:real);
{读数的过程}
var scale:real;
begin
{处理整数部分}
number:=0;
while nextch in['0'..'9'] do
begin
number:=number*10+ord(nextch)-ord('0');
readnextch;
end;
if nextch='.' then begin
{处理小数部分}
scale:=1;
readnextch;
while nextch in['0'..'9'] do
begin
number:=number*10+ord(nextch)-ord('0');
scale:=scale*10;
readnextch;
end;
number:=number/scale;
end;
end;
procedure readexpression(var exprvalue:real);
{读表达式的过程}
var addop:char;
     nexttermval:real;
procedure readterm(var termvalue:real);
{读项的过程}
var mulop:char;
     nextfacval:real;
procedure readfactor(var factorvalue:real);
{读因子的过程}
begin
if nextch in['0'..'9'] then readnumber(factorvalue)  {读数}
                        else if nextch='(' then begin
 readnextch;{读表达式}
 readexpression(factorvalue);
                        if nextch=')' then readnextch
                        else writeln('error');
                        end
                        else begin
                        writeln('error');
                        factorvalue:=1;
                        end;
end;
begin
{读因子}
readfactor(termvalue);
while nextch in ['*','/'] do
begin
mulop:=nextch;
readnextch;
{读下一个因子}
readfactor(nextfacval);
{因子与因子乘除}
case mulop of
'*':termvalue:=termvalue*nextfacval;
'/':termvalue:=termvalue/nextfacval;
end;
end;
end;
begin
{读项}
readterm(exprvalue);
while nextch in ['+','-'] do
begin
addop:=nextch;
readnextch;
{读下一项}
readterm(nexttermval);
{项与项加减}
case addop of
'+':exprvalue:=exprvalue+nexttermval;
'-':exprvalue:=exprvalue-nexttermval;
end;
end;
end;
begin
readnextch;
{读表达式}
readexpression(result);
{输出结果}
writeln('=',result:20:6);
end.

这个是我初中那会整的代码,参考一下这个,回答下面附了一张图: