Урок 18. Задача 11.
Primary tabs
Задана последовательность символов, имеющая следующий вид: p1q1p2q2p3...qn–1pn , где pi — число, а qi — знак арифметического действия из набора {+, –, *}. Вычислите значение выражения, предполагая, что действия выполняются согласно правилам арифметики.
Входные данные: На вход программе подается строка указанного вида, состоящая не более чем из 9 чисел, разделенных символами арифметических операций.
Выходные данные: Выведите значение арифметического выражения.
Как решать: Посчитайте результат за одно прочтение строки, без использования массивов (в нашем курсе решение в таком стиле для этой задачки было впервые добавлено участником slavina036).
(условие задачи взято из книги Е. В. Андреевой)
Var i, result, num_mul, vl_I, vl_C :integer; s, str, chr :string; fl_mul, fl_minus :boolean; begin s := '2*2*1-4-4+4+2*4'; chr := ''; // знак result := 0; // ответ num_mul := 0; // число из предыдущей итерации fl_mul := false; // флаг умножения fl_minus := false; // флаг для получения отрицательного числа str := ''; // строка с актуальным числом for i := 1 to length(s) + 1 do begin if i = length(s) + 1 then s[i] := '+'; val(s[i], vl_I, vl_C); if vl_C = 0 then // ищет число str := str + s[i] else begin chr := s[i]; // находит знак val(str, vl_I); str := ''; if fl_mul then // умножает begin fl_mul := false; vl_I := num_mul * vl_I; end else if fl_minus then // делает число отрицательным begin fl_minus := false; vl_I := vl_I * (-1); end; if chr = '*' then begin fl_mul := true; num_mul := vl_I; end else begin if chr = '-' then fl_minus := true; result := result + vl_I; end; end; end; write(s, ' = ', result); readln(); end.
- Log in to post comments
- 6046 reads
vedro-compota
Wed, 09/28/2022 - 19:31
Permalink
Переписать так, чтоб val(s[i]
Переписать так, чтоб val(s[i], vl_I, vl_C); вызовалось только когда действительно ожидается что там число, и когда уже сформировано, т.е. напр. если выражение:
-- для '444' операция val() должна быть вызвана 1 раз
_____________
матфак вгу и остальная классика =)
Dennis80
Sun, 10/09/2022 - 12:12
Permalink
Var i, result, num_mul, vl_I,
vedro-compota
Sun, 10/09/2022 - 14:05
Permalink
добавить
_____________
матфак вгу и остальная классика =)
Dennis80
Wed, 10/26/2022 - 18:06
Permalink
Var i, result, remember,
vedro-compota
Wed, 10/26/2022 - 19:20
Permalink
Функция должна принимать на
_____________
матфак вгу и остальная классика =)
Dennis80
Wed, 11/02/2022 - 18:44
Permalink
Var i, result, remember,
vedro-compota
Wed, 11/02/2022 - 19:21
Permalink
0+ 1+2-2
- обрабатываем умножение
_____________
матфак вгу и остальная классика =)
Dennis80
Wed, 11/09/2022 - 18:35
Permalink
Var i, j, result, remember,
vedro-compota
Wed, 11/09/2022 - 18:54
Permalink
нельзя уходить от
нельзя уходить от декомпозиции в пользу более длинного блока
_____________
матфак вгу и остальная классика =)
Dennis80
Wed, 11/16/2022 - 17:47
Permalink
Var i, j, result, remember,
vedro-compota
Sun, 12/04/2022 - 14:46
Permalink
1) Вынести получение
1) Вынести получение очередного числа в процедуру
2) Завести единственную переменную для знака операции и проверять в цикле только ее
3)
-- исправить
4) Убрать лишние переменные и уточнить назначение имеющихся в комментариях
_____________
матфак вгу и остальная классика =)
Dennis80
Sun, 12/11/2022 - 13:17
Permalink
Var i, j, c, n, result,
vedro-compota
Sun, 12/11/2022 - 15:12
Permalink
1)
1)
-- не усложняем, сигнатуру, если надо вынести умножение, то используем обертку, для тренировки решить отдельно задачу 3 урока 16 http://fkn.ktu10.com/?q=node/13330
2)
1.1) лучше перейти на while
1,2) конвертировать число после окончания цикла
_____________
матфак вгу и остальная классика =)
Dennis80
Thu, 12/15/2022 - 18:42
Permalink
Var i, c, n, result, multy:
vedro-compota
Sun, 12/18/2022 - 16:09
Permalink
записать алгоритм решения
1) записать алгоритм решения задачи текстом
Начать можно так:
2) изменить работу с счетчиками:
-- i должно стоять на первом элементе предполагаемого числа
3) Добавить процедуру для получения очередного знака операции
_____________
матфак вгу и остальная классика =)
Dennis80
Sun, 12/25/2022 - 08:16
Permalink
Алгоритм программы
vedro-compota
Sun, 12/25/2022 - 13:08
Permalink
засчитано
засчитано, можно переходить к рекурсивному варианту
_____________
матфак вгу и остальная классика =)