Задача 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
- 383 reads