Задача 10 Урок 17
Primary tabs
Задана последовательность символов, имеющая следующий вид: p1q1p2q2p3...qn–1pn , где pi — число, а qi — знак арифметического действия из набора {+, –, *}. Вычислите значение выражения, предполагая, что действия выполняются согласно правилам арифметики.
Входные данные: На вход программе подается строка указанного вида, состоящая не более чем из 9 чисел, разделенных символами арифметических операций.
Выходные данные: Выведите значение арифметического выражения.
Примеры:Входные данные Результат 5+2 7 1-2*5+2 -7 5*6+7-3*2+11 42 5*6+7-3*2*3+11 30
var
s: string;
function calculator(s: string): integer;
var
strx: string;
pred_x, pendent_x, len, j: integer;
pred_op, op, pendent_op: char;
begin
len:=length(s);
result:=-1;
pendent_x:=-1;
op:='0';
pendent_op:='0';
strx:='';
for j:=1 to len do
begin
if (s[j] in ['0'..'9']) then
begin
strx:=strx+s[j];
if (j<len) then
begin
continue;
end;
end ;
pred_op:=op;
pred_x:=result;
val(strx, result);
strx:='';
op:=s[j];
if (pred_op='*') then result:=pred_x*result;
if (op in ['+', '-']) or (j=len) then
begin
case pred_op of
'+': result:=pred_x+result;
'-': result:=pred_x-result;
end;
case pendent_op of
'+': result:=pendent_x+result;
'-': result:=pendent_x-result;
end;
pendent_op:='0';
end;
if (op = '*') and (pred_op in ['+', '-']) then
begin
pendent_op:=pred_op;
pendent_x:=pred_x;
end;
end;
end;
begin
writeln('Введите выражение.');
readln(s);
writeln('Результат: ', calculator(s));
readln();
end. Консоль:
Введите исходное выражение 5*6+7-3*2*3+11 Результат: 30
- Log in to post comments
- 1192 reads
vedro-compota
Fri, 07/14/2023 - 20:30
Permalink
1) Решить с помощью одного
_____________
матфак вгу и остальная классика =)
vedro-compota
Mon, 07/17/2023 - 19:41
Permalink
засчитано
засчитано
_____________
матфак вгу и остальная классика =)