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