Задание 10 Урок 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
type digArr = array[1..9] of string; symbArr = array[1..8] of char; var s, temp, tempArrStr: string; digitArr: digArr; symbolArr: symbArr; i, j, k, result, intChislo, intChislo1, intChislo2, Code, numIter, sum: integer; Function IntToStr(I : Longint) : String; Var S : String [11]; begin Str(I, S); IntToStr:=S; end; begin writeln('vvedite vyrajenie'); readln(s); j := 1; k := 1; tempArrStr := ''; for i:=1 to length(s) do begin Val(s[i], intChislo, Code); if (Code = 0) then begin tempArrStr := tempArrStr + s[i]; //накапливаем число end else begin symbolArr[k] := s[i]; //символ k := k + 1; digitArr[j] := tempArrStr; // вносим в массив чисел накомпленное число tempArrStr := ''; // и сбрасываем накопитель j := j + 1; end; end; digitArr[j] := tempArrStr; for i:=low(symbolArr) to high(symbolArr) do // итерируем по массивам begin if (symbolArr[i] = '*') then // если знак умножения то перемножаем соответствующий числа из массива чисел begin if (i = 1) then // умножение в начале begin Val(digitArr[i], intChislo1, Code); Val(digitArr[i+1], intChislo2, Code); digitArr[i] := '0'; // один множитель обнуляем, второй делаем равным результату умножения digitArr[i+1] := IntToStr(intChislo1 * intChislo2); symbolArr[i] := '+'; end else // все оставшиеся умножения begin Val(digitArr[i], intChislo1, Code); Val(digitArr[i+1], intChislo2, Code); digitArr[i] := '0'; // один множитель обнуляем, второй делаем равным результату умножения с соответствующим знаком digitArr[i+1] := IntToStr(intChislo1 * intChislo2); symbolArr[i] := symbolArr[i-1]; end; end; end; Val(digitArr[1], intChislo, Code); sum := intChislo; for i:=(low(digitArr)+1) to high(digitArr) do begin temp := symbolArr[i-1] + digitArr[i]; Val(temp, intChislo, Code); sum := sum + intChislo; end; writeln('resultat = ',sum); readln(); end.
консоль:
vvedite vyrajenie 10*9-9+4-10*10 resultat = -15
- Log in to post comments
- 388 reads