回 帖 发 新 帖 刷新版面

主题:编程就+分(4期)!

代数表达式的定义如下
代数表达式:         
项:        
因子:        
字母:         
例如,下面式子是合法的代数表达式:
a;
a+b*(a+c);
a*a/(b+c);

下列式子是不合法的代数表达式:
ab;
a+b*(c+d); {因子中无字母d}
程序要求:
输入:输入一个字符串,以";"结束,(";"本身不是代数表达式中字符,仅作为结束符号)
输出:若表达式正确,则输出:"OK";
     若表达式不正确,则输出"ERROR",及错误类型
错误类型约定:
1.式子中出现不允许的字符;
2.括号不配对;
3.其他错误
例如:输入a+(b);
     输出:OK
例如:输入a+(b+c*a;
     输出 error 2

回复列表 (共1个回复)

沙发

var
  s:char;
  t:string;
  i,j,k,l,top:integer;
begin
  read(s);
  if s=';' then exit;
  while s<>';' do
    begin
      t:=t+s;
      if s='(' then inc(top);
      if s=')' then dec(top);
      if top<0 then
        begin
          writeln('error 2');
          exit;
        end;
      if (s<>'a') and (s<>'b') and (s<>'c') and (s<>'(') and (s<>')') and (s<>'+') and (s<>'-') and (s<>'*') and (s<>'/') then
        begin
          writeln('error 1');
          exit;
        end;
      read(s);
      if (t[length(t)]=')') and ((s='a') or (s='b') or (s='c')) then
        begin
          writeln('error 3');
          exit;
        end;
      if ((t[length(t)]='a') or (t[length(t)]='b') or (t[length(t)]='c')) and ((s='a') or (s='b') or (s='c')) then
        begin
          writeln('error 3');
          exit;
        end;
    end;
  if top=0 then writeln('OK') else writeln('error 2');
end.

我来回复

您尚未登录,请登录后再回复。点此登录或注册