Урок 18. Задача 10.

Урок 18. Задача 10.

Задана последовательность символов, имеющая следующий вид: p1q1p2q2p3...qn–1pn , где pi — число, а qi — знак арифметического действия из набора {+, –, *}. Вычислите значение выражения, предполагая, что действия выполняются согласно правилам арифметики.
Входные данные: На вход программе подается строка указанного вида, состоящая не более чем из 9 чисел, разделенных символами арифметических операций.
Выходные данные: Выведите значение арифметического выражения.

type arrI = array[1..20] of integer;
type arrC = array[1..10] of char;
var  s :string;
     n, c, ln, sum :integer;
     arI :arrI;
     arC :arrC;

procedure make_arrays(s :string; var arI :arrI; var arC :arrC; var ln :integer);
var i :integer;
    str :string;
begin
  for i := 1 to high(arI) do
  begin
    val(s[i], n, c);
    if c = 0 then
      str := str + s[i]
    else
    begin
      ln := ln + 1;
      arC[ln] := s[i];
      val(str, n);
      arI[ln] := n;
      str := '';
      if arI[ln] = 0 then
        break;
    end;
  end;
  ln := ln - 1;
end;

procedure multiply(var arI :arrI; arC :arrC; ln :integer);
var i :integer;
begin
  for i := 1 to ln do
    if arC[i] = '-' then
      arI[i + 1] :=arI[i + 1] * (-1)
    else
      if arC[i] = '*' then
      begin
        arI[i + 1] := arI[i] * arI[i + 1];
        arI[i] := 0;
      end;
end;

function results(arI :arrI; ln :integer) :integer;
var i, sum :integer;
begin
  for i := 1 to ln do
    sum := sum + arI[i];
  results := sum;
end;

begin
  ln := 0;
  s := '5*6+7-3*2*3+11';
  make_arrays(s, arI, arC, ln);
  multiply(arI, arC, ln);
  sum := results(arI, ln);
  writeln(sum);
  readln();
end. 
vedro-compota's picture

засчитано

_____________
матфак вгу и остальная классика =)