Задача 8 Урок 22
Primary tabs
"Калькулятор":
Напишите функцию, которая получает на вход произвольную строку вида:5*(3+4)-7*9+3*(2+(2-7))
(арифметическое выражение со скобками любого уровня вложенности и операциями умножения, вычитания и сложения)
и в качестве ответа возвращает результат этого выражения.
var x1:string; i1:integer; function culc(x,z:string; a,sk:integer; var i:integer):integer; var b,{i,}l:integer; c:string; begin b:=0; i+=1; while i<=length(x) do begin if (x[i]>='0') and (x[i]<='9') then begin while (x[i]>='0') and (x[i]<='9') do begin c+=x[i]; i+=1; end; if a<>0 then val(c,b,l) else val(c,a,l); c:='0'; if b<>0 then begin if (x[i]='*') or (x[i+1]='*') then begin case z of '*':a*=culc(x,x[i],b,1,i); '+':a+=culc(x,x[i],b,1,i); '-':a:=a-culc(x,x[i],b,1,i); end; end else begin case z of '+':a+=b; '-':a-=b; else begin a*=b; break; end; end; end; if (i=length(x)) or (x[i]=')') then break; end else begin z:=x[i]; i+=1; end; end else if x[i]='(' then begin case z of '*':a*=culc(x,'#',0,1,i); '+':a+=culc(x,'#',0,1,i); '-':a-=culc(x,'#',0,1,i); '#':a:=culc(x,'#',0,1,i); end; if i<length(x) then i+=1; if i=length(x) then break; end else begin z:=x[i]; i+=1; end; end; result:=a; end; begin x1:='5*(3+4)-7*9+3*(2+(2-7))'; i1:=0; write(culc(x1,'#',0,0,i1)); readln(); end.
- Log in to post comments
- 65 reads