**Пример.** Написать программу, которая вычисляет как целое число значение выражений (без переменных), записаных (без ошибок) в постфиксной форме в текстовом файле. Каждая строка файла содержит ровно одно выражение. 

**Алгоритм решения.** Выражение просматривается слева направо. Если встречается число, то его значение (как целое) заносится в стек, а если встечается знак операции, то из стека извлекаются два последних элемента (это операнды данной операции), над ними выполняется операция и ее результат записывается в стек. В конце в стеке остается только одно число — значение всего выражения. 

{ Turbo Pascal, файл ST2.PAS }
 Program St2;
Uses Spisok, Stack;
Const Znak = ['+', '-', '*', '/'];
Var S, S1 : String;
   T : Text;
   I, N : Byte;
   X, Y : BT; Code : Integer;
   NS : U;
Begin
 Write('Введите имя файла: ');   ReadLn(S1);
 Assign(T, S1);   ReSet(T);
 NS := Nil;
 While Not Eof(T) Do
  Begin
    ReadLn(T, S);  I := 1;
    While I <= Length(S) Do
      Begin
        If S[I] In ['0'..'9']
        Then
        Begin
         N := I;
         While S[I] In ['0'..'9'] Do
          I := I + 1;
         Val(Copy(S, N, I - N), X, Code);
        V_Stack(NS, X);
        End
        Else
        If S[I] In Znak
        Then
         Begin
           Iz_Stack(NS, X);
           Iz_Stack(NS, Y);
           Case S[I] Of
           '+' : X := X + Y;
           '-' : X := Y - X;
           '*' : X := X * Y;
           '/' : X := Y Div X
           End;
           V_Stack(NS, X)
         End;
        I := I + 1
       End;
       Iz_Stack(NS, X);
       WriteLn(S, ' = ', X);
     End
 End.             /* C++, файл ST2.CPP */
 #include "STACK.CPP"
 #include < string.h >
 #include < stdio.h >
 void main(void)
{
 char S[255];
 FILE *T;
 int I; BT X, Y;
 Zveno *NS;
 clrscr();
 cout << "Введите имя файла: "; cin >> S;
 T=fopen(S, "r");
 NS = NULL;
 while (!feof(T))
{
    fgets(S, 255, T);
    I = 0;
    while (I <= strlen(S)-1)
{
  if (S[I]>='0'&&S[I]<='9')
  {
   X=0;
   while(S[I]>='0'&&S[I]<='9') {X=X*10+(S[I]-'0'); I++;}
   NS=V_Stack(NS, X);
  }
  else
  if (S[I]=='+'||S[I]=='-'||S[I]=='/'||S[I]=='*')
  {
     X=V_Vershine(NS);
     NS=Iz_Stack(NS);
     Y=V_Vershine(NS);
     NS=Iz_Stack(NS);
     switch (S[I]) {
     case '+' : X += Y; break;
     case '-' : X = Y - X; break;
     case '*' : X *= Y; break;
     case '/' : X = Y / X; break;}
     NS=V_Stack(NS, X);
  }
  I++;
 }
 X=V_Vershine(NS);
 NS=Iz_Stack(NS);
 cout << S << " => " << X << "\n";}
    }