{Cчитывает из файла строку в постфиксальной форме и считает ее значение}
{Обработка строки в постфиксальной форме}
program pr1;
uses crt;
type  stek = array[1..100] of real;
var
  b : stek;
  size,x,y: integer;
  f: text;
  s,c:char;


procedure read_space(var f:text;var c:char);     {считывание символов с пробелами}
begin
     read(f,c);
     while c= ' ' do
           read(f,c);
end;

procedure number;        {преобразование из строки в вещественное число}
 var s,k : real;
 begin
         s := 0;
         while c in ['0'..'9'] do
               begin
                   s := 10 * s + ord(c) - ord('0');
                   read(f, c);
               end;
         if c=',' then
            begin
                 read(f,c);
                 k:=0.1;
                 while c in ['0'..'9'] do
                       begin
                            s:=s+(ord(c)-ord(0))*k;
                            k:=k/10;
                            read(f,c);
                       end;
            end;
         size:=size+1;
         b[size]:=s;
end;

procedure push(x:real);
begin
     size:=size+1;
     b[size]:=x;
end;

procedure abs_1;
begin
     b[size]:=abs(b[size]);
     read(f,c);
     read_space(f,c);
end;

procedure tg_1;
begin
     b[size]:=pi*b[size]/180;
     b[size]:=sin(b[size])/cos(b[size]);
     read_space(f,c);
end;

procedure exp_1;
begin
     b[size]:=exp(b[size]);
     read(f,c);
     read_space(f,c);
end;

procedure log;
begin
     b[size]:=ln(b[size]);
     b[size-1]:=ln(b[size-1]);
     b[size-1]:=b[size]/b[size-1];
     size:=size-1;
     read(f,c);
     read_space(f,c);
end;

procedure delenie;
begin
     b[size-1]:=b[size-1]/b[size];
     size:=size-1;
end;

procedure proizvedenie;
begin
     b[size-1]:=b[size]*b[size-1];
     size:=size-1;
end;

procedure summa;
begin
     b[size-1]:=b[size]+b[size-1];
     size:=size-1;
end;

procedure raznost;
begin
     b[size-1]:=b[size-1]-b[size];
     size:=size-1;
end;

procedure sqr_1;
begin
     b[size]:=b[size]*b[size];
end;

procedure sqrt_1;
begin
     b[size]:=sqrt(b[size]);
end;

procedure sin_1;
begin
      b[size]:=pi*b[size]/180;
      b[size]:=sin(b[size]);
end;

procedure cos_1;
begin
     b[size]:=pi*b[size]/180;
     b[size]:=cos(b[size]);
end;

procedure ctg_1;
begin
     b[size]:=pi*b[size]/180;
     b[size]:=cos(b[size])/sin(b[size]);
end;

procedure c_v;
begin
     read(f,c);
     read(f,c);
     case c of
          's':cos_1;
          'g':ctg_1;
     end;
end;

procedure s_v;
begin
     read(f,c);
     case c of
          'i':sin_1;
          'q':begin
                   read(f,c);
                   read(f,c);
                   case c of
                        't':sqrt_1;
                        ' ':sqr_1;
                   end;
              end;
     end;
end;

procedure stepen;
begin
     b[size-1]:=exp(b[size]*ln(b[size-1]));
     size:=size-1;
end;

procedure podschet;
begin
     repeat
     read_space(f,c);
     case c of
          '0'..'9':number;
          'x':push(x);
          'y':push(y);
          '^':stepen;
          'a':abs_1;
          'c':c_v;
          's':s_v;
          't':tg_1;
          'e':exp_1;
          'l':log;
          '/':delenie;
          '*':proizvedenie;
          '+':summa;
          '-':raznost;
     end;
     until EoLn(f);
end;
     
     
procedure znachenie(f:text);
begin
     writeln('Вычислить значение выражения? (д/н)');
     readln(s);
     case s of
          'н':exit;
          'д':begin
                    writeln('Введите значение для х:');
                    readln(x);
                    writeln('Введите значение для y:');
                    readln(y);
                    writeln('Значение выражения:');
                    podschet;
                    writeln(b[size]);
               end;
          else writeln('Некорректный ввод');
     end;
end;

begin
     size:=0;
     assign(f,'F:\Информатика\Калькулятор\123.txt');
     reset(f);
     znachenie(f);
     close(f);
end.