Задача 9 Урок 17

Задча 1
Задача 9 урок 17

Задана последовательность символов, имеющая следующий вид: 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 U17Z9;
var s,str: string;
    i,a,b,d,code: integer;
    f,h:boolean;
begin
  writeln('vvedite posledovatelnost');
  readln(s);
  str:='';
  a:=1;
  b:=1;
  d:=0;
  h:=false;
  f:=false;
  for i:=1 to length(s)+1 do
  begin
    if (s[i]>='0') and (s[i]<='9') then
      str:=str+s[i]
    else
    begin
      val(str,a,code);
      str:='';
      if (f) then
      begin
        a:=a*(-1);
        f:=false;
      end;
      if (h) then
      begin
        a:=a*b;
        b:=1;
        h:=false;
      end;
      if (s[i]='*') then
      begin
        b:=a;
        h:=true;
      end
      else
      begin
        if (s[i]='-') then
          f:=true;
        d:=d+a;
      end;
    end;
  end;
  writeln(d);
  readln();
end. 
vedro-compota's picture

разбить на процедуры и функции

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

vedro-compota's picture

сделать решение на процедурах с двумя массивами

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

program U17Z9;
var znaki: array [1..50] of string;
    number: array [1..50] of integer;
    s,n: string;
    i,code,d,j,sum: integer;
begin
  writeln('vvedite posledovatelnost');
  readln(s);
  n:='';
  j:=1;
  for i:=1 to length(s) do
  begin
    if (s[i]>='0') and (s[i]<='9') then
      n:=n+s[i]
    else
    begin
      val(n,number[j],code);
      j:=j+1;
      znaki[j]:=s[i];
      j:=j+1;
      n:='';
    end;
  end;
  val(n,number[j],code);
  for i:=1 to j do
  begin
    if (znaki[i]='-') then
      number[i+1]:=number[i+1]*(-1);
    if (znaki[i]='*') then
    begin
      number[i+1]:=number[i-1]*number[i+1];
      number[i-1]:=0;
    end;
  end;
  sum:=0;
  for i:=1 to j do
    sum:=sum+number[i];
  write('result = ',sum);
  readln();
end. 

program U17Z9;
type myarr = array [1..50] of string;
  youarr = array [1..50] of integer;
var znaki: myarr;
    number: youarr;
    s: string;
    i,j: integer;

procedure getData(str: string; var numb:youarr; var znak:myarr; var q:integer);
var n: string;
    code: integer;
begin
  n:='';
  q:=1;
  for i:=1 to length(str) do
  begin
    if (str[i]>='0') and (str[i]<='9') then
      n:=n+str[i]
    else
    begin
      val(n,numb[j],code);
      q:=q+1;
      znak[q]:=str[i];
      q:=q+1;
      n:='';
    end;
  end;
  val(n,numb[q],code);
end;

procedure umnozhenie(var num:youarr; var zna:myarr; var p:integer);
begin
    for i:=1 to p do
  begin
    if (zna[i]='-') then
      num[i+1]:=num[i+1]*(-1);
    if (zna[i]='*') then
    begin
      num[i+1]:=num[i-1]*num[i+1];
      num[i-1]:=0;
    end;
  end;
end;

procedure summa(num:youarr; o:integer);
var sum: integer;
begin
  sum:=0;
  for i:=1 to o do
    sum:=sum+number[i];
  write('result = ',sum);
end;

begin
  writeln('vvedite posledovatelnost');
  readln(s);
  getData(s,number,znaki,j);
  umnozhenie(number,znaki,j);
  summa(number,j);
  readln();
end. 
vedro-compota's picture

решение засчитано

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