Урок 18 Задача 11
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
Как решать: Посчитайте результат за одно прочтение строки, без использования массивов (в нашем курсе решение в таком стиле для этой задачки было впервые добавлено участником slavina036).
var s: string; function getSumm(a, b: integer): integer; begin result := b + a; end; function getMult(var a: integer; b: integer; var mult: boolean): integer; begin result := a * b; mult := false; end; function TakeResult(var s: string): integer; var str: string; a, i, midres: integer; minus, mult: boolean; begin minus := false; mult := false; result := 0; for i:= 1 to length(s)+1 do begin if (s[i] >= '0') and (s[i] <= '9') then str := str + s[i] else begin val(str, a); if minus = true then begin a := a*(-1); minus := false; end; if mult = true then a := getMult(a, midres, mult); if s[i] = '*' then begin mult := true; midres := a; end else result := getSumm(a, result); if s[i] = '-' then minus := true; str := ''; end; end; end; begin s := '5*6-7-3*2*3+11'; writeln(s,' = ', TakeResult(s)); readln(); end.
- Log in to post comments
- 891 reads
vedro-compota
Mon, 07/17/2023 - 19:56
Permalink
function getMult(var a:
1)
-- разобраться с сигнатурой, есть незначащие передачи по ссылке
2) В данном случае создание подпрограммы не выглядят сильно обоснованно
3)
-- можно записать короче
_____________
матфак вгу и остальная классика =)
piliugin
Wed, 07/19/2023 - 17:05
Permalink
Исправил