Задача 10 Урок 18
Primary tabs
Задана последовательность символов, имеющая следующий вид: , где — цифра, а — знак арифметического действия из набора {+, –, *}. Вычислите значение выражения, предполагая, что действия выполняются согласно правилам арифметики.
- Входные данные: На вход программе подается строка указанного вида, состоящая не более чем из 9 чисел, разделенных символами арифметических операций.
- Выходные данные: Выведите значение арифметического выражения.
Примеры:
123456Входные данные Результат5+271-2*5+2-75*6+7-3*2+11425*6+7-3*2*3+1130Как решать: Посчитайте результат за одно прочтение строки, без использования массивов (в нашем курсе решение в таком стиле для этой задачки было впервые добавлено участником slavina036).
(условие задачи взято из книги Е. В. Андреевой)
var i, int, acc_sum, acc_mul, o, l: integer;
s, prev, num: string;
z: boolean;
begin
s := '5*6+7-33*2*3-11*2';
l := length(s);
for i := 1 to l + 1 do
begin
val(s[i], int, o);
if o = 0 then num += s[i]
else
begin
val(num, int);
if z then
begin
int := -int;
z := false;
end;
if prev = '*' then acc_mul *= int
else
if s[i] = '*' then acc_mul := int
else acc_sum += int;
if s[i] = '*' then prev := '*'
else
begin
if s[i] = '-' then z := true;
acc_sum += acc_mul;
acc_mul := 0;
prev := '';
end;
num := '';
end;
end;
writeln('Ожидается: ', 5*6+7-33*2*3-11*2);
writeln('Ответ: ', acc_sum);
readln();
end.- Log in to post comments
- 1405 reads
vedro-compota
Sun, 11/28/2021 - 13:48
Permalink
засчитано
засчитано
_____________
матфак вгу и остальная классика =)