Задание 11 урок 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
var s, temp1, temp2, temp3, znak: string; flag1, flag2, flagZnak1: boolean; i, intChislo, intChislo1, intChislo2, intChislo3, Code, sum, sumTemp: integer; begin writeln('vvedite vyrajenie'); readln(s); sum := 0; sumTemp := 0; temp1 := ''; temp2 := ''; temp3 := ''; flag1 := true; flag2 := true; flagZnak1 := false; znak := ''; i := 1; while (i < (length(s)+1)) do // итерируем по выражению begin if (i > 1) and (flagZnak1) then begin znak := s[i-1]; flagZnak1 := false; end; if (flag1) then begin temp1 := temp1 + s[i]; Val(s[i+1], intChislo, Code); if (Code = 0) then // если число то добавляем в temp1 и переходим к следующему begin i := i + 1; continue; end else begin if (s[i+1] <> '*') then begin Val(znak + temp1, intChislo1, Code); sum := sum + intChislo1; end else begin flag1 := false; i := i + 2; continue; end end end else begin if (flag2) then begin temp2 := temp2 + s[i]; Val(s[i+1], intChislo, Code); if (Code = 0) then // если число то добавляем в temp2 и переходим к следующему begin i := i + 1; continue; end else begin if (s[i+1] <> '*') then begin Val(znak + temp1, intChislo1, Code); Val(temp2, intChislo2, Code); sum := sum + intChislo1 * intChislo2; end else begin Val(znak + temp1, intChislo1, Code); Val(temp2, intChislo2, Code); sumTemp := intChislo2; flag2 := false; i := i + 2; continue; end end end else begin temp3 := temp3 + s[i]; Val(s[i+1], intChislo, Code); if (Code = 0) then // если число то добавляем в temp3 и переходим к следующему begin i := i + 1; continue; end else begin if (s[i+1] = '*') then begin Val(temp3, intChislo3, Code); sumTemp := sumTemp * intChislo3; temp3 := ''; i := i + 2; continue; end else begin Val(temp3, intChislo3, Code); Val(znak+temp1, intChislo1, Code); sumTemp := sumTemp * intChislo3; sum := sum + sumTemp * intChislo1; end end end end; temp1 := ''; temp2 := ''; temp3 := ''; flag1 := true; flag2 := true; flagZnak1 := true; znak := ''; i := i + 2; end; writeln(s, ' = ', sum); readln(); end.
консоль:
vvedite vyrajenie 5*6+7-3*2*3+11 5*6+7-3*2*3+11 = 30 vvedite vyrajenie 10*10*10-10*10 10*10*10-10*10 = 900
- Log in to post comments
- 93 reads