Урок 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
- 718 reads
vedro-compota
Wed, 09/21/2022 - 19:34
Permalink
засчитано
засчитано
_____________
матфак вгу и остальная классика =)