Урок 18. Задача 10.
Primary tabs
Задана последовательность символов, имеющая следующий вид: p1q1p2q2p3...qn–1pn , где pi — число, а qi — знак арифметического действия из набора {+, –, *}. Вычислите значение выражения, предполагая, что действия выполняются согласно правилам арифметики.
Входные данные: На вход программе подается строка указанного вида, состоящая не более чем из 9 чисел, разделенных символами арифметических операций.
Выходные данные: Выведите значение арифметического выражения.
type arrI = array[1..20] of integer; type arrC = array[1..10] of char; var s :string; n, c, ln, sum :integer; arI :arrI; arC :arrC; procedure make_arrays(s :string; var arI :arrI; var arC :arrC; var ln :integer); var i :integer; str :string; begin for i := 1 to high(arI) do begin val(s[i], n, c); if c = 0 then str := str + s[i] else begin ln := ln + 1; arC[ln] := s[i]; val(str, n); arI[ln] := n; str := ''; if arI[ln] = 0 then break; end; end; ln := ln - 1; end; procedure multiply(var arI :arrI; arC :arrC; ln :integer); var i :integer; begin for i := 1 to ln do if arC[i] = '-' then arI[i + 1] :=arI[i + 1] * (-1) else if arC[i] = '*' then begin arI[i + 1] := arI[i] * arI[i + 1]; arI[i] := 0; end; end; function results(arI :arrI; ln :integer) :integer; var i, sum :integer; begin for i := 1 to ln do sum := sum + arI[i]; results := sum; end; begin ln := 0; s := '5*6+7-3*2*3+11'; make_arrays(s, arI, arC, ln); multiply(arI, arC, ln); sum := results(arI, ln); writeln(sum); readln(); end.
- Log in to post comments
- 395 reads
vedro-compota
Wed, 09/21/2022 - 19:34
Permalink
засчитано
засчитано
_____________
матфак вгу и остальная классика =)