Задача 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
- 460 reads
vedro-compota
Fri, 07/14/2023 - 20:30
Permalink
1) Решить с помощью одного
_____________
матфак вгу и остальная классика =)
vedro-compota
Mon, 07/17/2023 - 19:41
Permalink
засчитано
засчитано
_____________
матфак вгу и остальная классика =)