Задача 10 Урок 18 Задана последовательность символов, имеющая следующий вид: p1q1p2q2p3...qn–1pn,
Primary tabs
Задана последовательность символов, имеющая следующий вид: p1q1p2q2p3...qn–1pn, где pi — цифра, а qi — знак арифметического действия из набора {+, –, *}. Вычислите значение выражения, предполагая, что действия выполняются согласно правилам арифметики в один проход цикла
Входные данные Результат 5+2 7 1-2*5+2 -7 5*6+7-3*2+11 42 5*6+7-3*2*3+11 30
// функция для подсчета результата
function plus_minus(sign:string;numb,r:integer):integer;
begin
if(sign='+') then
r+=numb
else
r-=numb;
result:= r;
end;
// функция принимающая на вход строку с арифметическим выражением
function string_expression(s:string): integer;
var acc,sign,sign_multi:string;
acc_multi,res,i,number,Code:integer;
begin
acc:='';
acc_multi:=0;
sign:='+';
res:=0;
sign_multi:='';
for i:=1 to length(s) do
begin
if(s[i] >= '0') and (s[i] <= '9') then
acc+=s[i];
// отсутствует else для избежания повторения кода
// при проверке последнего числа
if(i=length(s)) or (s[i]='*') or (s[i]='+') or (s[i]='-') then
begin
Val(acc, number, Code);
acc:='';
// если уже был знак умножения
if(sign_multi='*') then
begin
number*=acc_multi;
sign_multi:='';
end;
// знак умножения сейчас
if(s[i]='*') then
begin
sign_multi:='*';
acc_multi:=number;
end
// если сейчас не знак умножения
else
begin
res:=plus_minus(sign,number,res);
sign:=s[i]
end;
end;
end;
result:=res;
end;
// основная программа
var s:string;
begin
s:='-89-8*7-90+67*34-89*7+78';
writeln(string_expression(s));
end.
- Log in to post comments
- 721 reads