Задача 10 Урок 18
Primary tabs
Задана последовательность символов, имеющая следующий вид:
, где — цифра, а — знак арифметического действия из набора {+, –, *}. Вычислите значение выражения, предполагая, что действия выполняются согласно правилам арифметики.
- Входные данные: На вход программе подается строка указанного вида, состоящая не более чем из 9 чисел, разделенных символами арифметических операций.
- Выходные данные: Выведите значение арифметического выражения.
Примеры:
123456Входные данные Результат
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 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
- 1143 reads
vedro-compota
Sun, 11/28/2021 - 13:48
Permalink
засчитано
засчитано
_____________
матфак вгу и остальная классика =)