задача 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
- 655 reads
vedro-compota
Sun, 11/07/2021 - 13:18
Permalink
засчитано
засчитано
_____________
матфак вгу и остальная классика =)