Задание 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
- 503 reads