задача 9 урок 18
Primary tabs
Задана последовательность символов, имеющая следующий вид: p1q1p2q2p3...qn–1pn , где pi — цифра, а qi — знак арифметического действия из набора {+, –, *}. Вычислите значение выражения, предполагая, что действия выполняются согласно правилам арифметики.
Входные данные: На вход программе подается строка указанного вида, состоящая не более чем из 9 чисел, разделенных символами арифметических операций.
Выходные данные: Выведите значение арифметического выражения.
Примеры:Входные данные Результат
5+2 7 1-2*5+2 -7 5*6+7-3*2+11 42 5*6+7-3*2*3+11 30Как решать: Выделите массив операций и массив значений, сначала посчитайте все умножения, а потом все остальное
Решение
program task_9_lesson18;
type chisla = array[1..18] of integer;
znaki = array[1..18] of string;
procedure sort(s: string; var z: znaki; var ch: chisla; var j: integer);
var i, code: integer;
c: string;
begin
j := 1; // каждому элементу выражения соответствует свой номер
c := '';
for i := 1 to length(s) do
begin
if ((s[i] >= '0') and (s[i] <= '9')) then
c := c + s[i] // записал массив знаков
else
begin
val(c, ch[j], code); // записал массив чисел
j := j + 1;
z[j] := s[i];
j := j + 1;
c := '';
end;
end;
val(c, ch[j], code); // последний элемент из массива чисел
end;
procedure umnojenie(j: integer; var ch: chisla; var z: znaki);
var i: integer;
begin
for i := 1 to j do
if z[i] = '*' then
begin
ch[i + 1] := ch[i - 1] * ch[i + 1];
ch[i - 1] := 0;
end;
end;
procedure minus(j: integer; var ch: chisla; var z: znaki);
var i: integer;
begin
for i := 1 to j do
if z[i] = '-' then
ch[i + 1] := ch[i + 1] * (-1);
end;
function plus(j: integer; ch: chisla; z: znaki): integer;
var i: integer;
otv: integer;
begin
for i :=1 to j do
otv := otv + ch[i];
result := otv;
end;
var z: znaki; // храню знаки
s: string;
ch: chisla;
j, otv: integer;
begin
readln(s);
sort(s, z, ch, j);
umnojenie(j, ch, z);
minus(j, ch, z);
otv := plus(j, ch, z);
write(s,' = ', otv);
readln
end. Консоль
-50+5*10+100-60 -50+5*10+100-60 = 40
- Log in to post comments
- 822 reads
vedro-compota
Sun, 11/07/2021 - 13:18
Permalink
засчитано
засчитано
_____________
матфак вгу и остальная классика =)