MaksNew

polska_1

Nov 8th, 2021 (edited)
752
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 2.39 KB | None | 0 0
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3.     I: Integer;
  4.     Op: Operator;
  5. begin
  6.     ToDefault(Edit2, Label3);
  7.     for I := Low(IString.Text) to High(IString.Text) do
  8.     begin
  9.         if (Ord(IString.Text[I]) > 96) and (Ord(IString.Text[I]) < 123) then
  10.         begin
  11.             Op.Value := IString.Text[I];
  12.             Op.Priority := 0;
  13.             Stack.Push(Op);
  14.             Answer:= Answer + IString.Text[I];
  15.             Stack.Pop;////
  16.             Inc(Rang);
  17.         end;
  18.         if (IString.Text[I] = '+') or (IString.Text[I] = '-') or (IString.Text[I] = '*') or (IString.Text[I] = '/') or (IString.Text[I] = '^') then
  19.         begin
  20.             Op := GetOperator(IString.Text[I]);
  21.             if (Stack.Count <> 0) and (Stack.Peek.Priority < Op.Priority) then
  22.             begin
  23.                 Stack.Push(Op);
  24.             end
  25.             else if (Stack.Count = 0) then
  26.             begin
  27.                 Stack.Push(Op);
  28.             end
  29.             else
  30.                 if (Stack.Count <> 0) and (Stack.Peek.Priority >= Op.Priority) then
  31.                 begin
  32.                     while (Stack.Count <> 0) and (Stack.Peek.Priority >= Op.Priority) do
  33.                     begin
  34.                         Answer := Answer + Stack.Pop.Value;
  35.                         Dec(Rang);
  36.                     end;
  37.                     //////
  38.                     if (Stack.Count <> 0) and (Stack.Peek.Priority < Op.Priority) then
  39.                     begin
  40.                         Stack.Push(Op);
  41.                     end
  42.                     else if (Stack.Count = 0) then
  43.                     begin
  44.                         Stack.Push(Op);
  45.                     end;
  46.                 end;
  47.         end;
  48.         if (IString.Text[I] = '(') then
  49.             Stack.Push(GetOperator(IString.Text[I]));
  50.         if (IString.Text[I] = ')') then
  51.         begin
  52.             Op.Value := ' ';
  53.             while (Stack.Count<>0) and (Op.Value <> '(') do
  54.             begin
  55.                 Op := Stack.Pop;
  56.                 if(Op.Value <> '(') then
  57.                 begin
  58.                     Answer := Answer + Op.Value;
  59.                     Dec(Rang);
  60.                 end;
  61.             end;
  62.         end;
  63.     end;
  64.     while (Stack.Count<>0) do
  65.     begin
  66.         Answer := Answer + Stack.Pop.Value;
  67.         Dec(Rang);
  68.     end;
  69.     Edit2.Text := Answer;
  70.     Label3.Caption := 'Ранг: '+IntToStr(Rang);
  71. end;
Add Comment
Please, Sign In to add comment