PROGRAM6586.PAS

{* Перевод формулы в постфиксную запись *}

Unit PROGRAM6586;
Interface
Implementation
Begin
 writeln('Программа перевода формулы в постфиксную запись.');
End.

Program Stack;

Uses PROGRAM6586.pas; {* Эту строку можно удалить *}
Type {* Используемые типы *}
  TList = ^List;
  List = Record         inf : char;
  next : TList;
  End;
Procedure AddToList(
Var {* В работе нам потребуются переменные: *}
  L : TList;
  n : char);
Var {* В работе нам потребуются переменные: *}
  cur       : TList;
  Cur^.inf := n;
  Cur^.next := L;
  L := cur;
Var {* В работе нам потребуются переменные: *}
  L : TList;
Var {* Объявление переменных *}
  n : char);
Var {* Объявление переменных *}
  cur                       : TList;
  Begin
If L = Nil Then
  n := ' = '
Else Begin
  n;
Cur := L;
L := L^.next;
Var {* Необходимые переменные *}
  MainList : TList;
  c        : char;
  c2       : char;
  fIn      : text;
  fOut     : text;
Begin
  MainList := Nil;
  Assign(fIn, 'Data.txt'); {* Подключение к файлу 'Data.txt' через переменную fIn *}
  Assign(fOut, 'Rez.txt'); {* Привязка переменной fOut к файлу 'Rez.txt' *}
  Reset(fIn); {* Чтение из файла через переменную fIn *}
  Rewrite(fOut); {* Запись в файл через переменную fOut *}
  While Not eof(fIn) Do {* Проверяем, не достигнут ли конец файла *}
  Begin
    Read(fIn, c);
    Case c Of      '0'..'9' : Write(fOut, c);
      '(' :     AddToList(MainList, c);
    ')':
    Begin
      GetFromList(MainList, c2);
      While c2'(' Do
      Begin
        Write(fOut, c2);
        GetFromList(MainList, c2);
      End;
      
    End;
    ' + '' - ':
    Begin
      GetFromList(MainList, c2);
      If Not (c2 In [' * '' / '' + '' - ']) Then
        AddToList(MainList, c2)
      Else While c2 In [' * '' / '' + '' - 'Do
      Begin
        Write(fOut, c2);
        GetFromList(MainList, c2);
      End;
      AddToList(MainList, c);
    End;
    ' * '' / ':
    Begin
      GetFromList(MainList, c2);
      If Not (c2 In [' * '' / ']) Then
        AddToList(MainList, c2)
      Else While c2 In [' * '' / 'Do
      Begin
        Write(fOut, c2);
        GetFromList(MainList, c2);
      End;
      AddToList(MainList, c);
    End;
    
  End;
  
End;
  GetFromList(MainList, c);
While c' = ' Do
Begin
  write(fOut, c);
  GetFromList(MainList, c);
End;
Close(fIn); {* Закрыть файл fIn *}
Close(fOut); {* Закрытие файла *}
End......