Advertisement
Vladislav8653

polska kurwa pierdole andrzej duda

May 4th, 2023
165
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 3.82 KB | None | 0 0
  1. program poland;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. {$R *.res}
  6.  
  7. uses
  8.   System.SysUtils;
  9.  
  10. type
  11.     PStack =^ TStack;
  12.     TStack = record
  13.         Next : PStack;
  14.         Data : Char;
  15.     end;
  16. var
  17.     Stack : PStack;
  18.  
  19. procedure InitialiseStack ();
  20. begin
  21.     Stack := nil;
  22. end;
  23.  
  24. function Pop (): Char; // достать из стека
  25. Var
  26.     Temp : PStack;
  27. begin
  28.     Temp := Stack;
  29.     Stack := Stack^.Next;
  30.     Pop := Temp^.Data;
  31.     Dispose(Temp);
  32. end;
  33.  
  34. procedure Push (Data : Char); // добавить в стек
  35. Var
  36.     NewNode : PStack;
  37. begin
  38.     New(NewNode);
  39.     NewNode^.Next := Stack;
  40.     NewNode^.Data := Data;
  41.     Stack := NewNode;
  42. end;
  43.  
  44. function ShowTop () : Char;
  45. begin
  46.     ShowTop := Stack.Data;
  47. end;
  48.  
  49. function IsEmpty(): Boolean;
  50. begin
  51.   Result := (Stack = nil);
  52. end;
  53.  
  54. function Convert (Str : String) : String;
  55. Var
  56.     I : Integer;
  57. Const
  58.     Chars = ['+', '-','^', '*','/', '(', ')'];
  59. begin
  60.     I := 1;
  61.     While (I <> (Str.Length + 1)) Do
  62.     begin
  63.         if Str[I] in Chars then
  64.         begin
  65.             If IsEmpty() then
  66.                 Push(Str[I])
  67.             else
  68.             begin
  69.                 case Str[I] of
  70.                     '+':
  71.                         begin
  72.                             While (Stack <> nil) and (ShowTop <> '(') Do
  73.                             begin
  74.                                 Result := Result + Pop();
  75.                             end;
  76.                             Push(Str[I]);
  77.                         end;
  78.                     '-':
  79.                          begin
  80.                             While (Stack <> nil) and (ShowTop <> '(') Do
  81.                             begin
  82.                                 Result := Result + Pop();
  83.                             end;
  84.                             Push(Str[I]);
  85.                         end;
  86.                     '*':
  87.                         begin
  88.                             While (Stack <> nil) and (ShowTop() <> '+')  and (ShowTop() <> '-') and (ShowTop <> '(') Do
  89.                             begin
  90.                                 Result := Result + Pop();
  91.                             end;
  92.                             Push(Str[I]);
  93.                         end;
  94.                     '/':
  95.                         begin
  96.                             While (Stack <> nil) and (ShowTop() <> '+')  and (ShowTop() <> '-') and (ShowTop <> '(') Do
  97.                             begin
  98.                                 Result := Result + Pop();
  99.                             end;
  100.                             Push(Str[I]);
  101.                         end;
  102.                     '^':
  103.                         begin
  104.                             While (Stack <> nil) and (ShowTop() <> '+')  and (ShowTop() <> '-') and (ShowTop() <> '*')  and (ShowTop() <> '/') and (ShowTop <> '(') Do
  105.                             begin
  106.                                 Result := Result + Pop();
  107.                             end;
  108.                             Push(Str[I]);
  109.                         end;
  110.                     '(':
  111.                         begin
  112.                              Push(Str[I]);
  113.                         end;
  114.                     ')':
  115.                         begin
  116.                             While (Stack.Data <> '(') Do
  117.                                 Result := Result + Pop();
  118.                             Pop();
  119.                         end;
  120.                 end;
  121.             end;
  122.         end
  123.         else
  124.         begin
  125.             Result := Result + Str[I];
  126.         end;
  127.         Inc(I);
  128.     end;
  129.     While (Stack <> nil) Do
  130.     begin
  131.         Result := Result + Pop();
  132.     end;
  133.     Convert := Result;
  134. end;
  135.  
  136. Var
  137.     Str : String;
  138. begin
  139.     Writeln('Введите строку:');
  140.     Readln(Str);
  141.     Str := Convert(Str);
  142.     Writeln('Преобразованная строка:');
  143.     Writeln(Str);
  144.     Readln;
  145. end.
  146.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement