Advertisement
MaksNew

saod

Nov 25th, 2021
255
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.73 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
  26. if (Stack.Count = 0) then
  27. begin
  28. Stack.Push(Op);
  29. end
  30. else
  31. begin
  32. if (Stack.Count <> 0) and (Stack.Peek.Priority >= Op.Priority) and
  33. (IString.Text[I] <> '^') and (Stack.Peek.Value <> '^') then
  34. begin
  35. while (Stack.Count <> 0) and (Stack.Peek.Priority >= Op.Priority) do
  36. begin
  37. Answer := Answer + Stack.Pop.Value;
  38. Dec(Rang);
  39. end;
  40. //////
  41. if (Stack.Count <> 0) and (Stack.Peek.Priority < Op.Priority) then
  42. begin
  43. Stack.Push(Op);
  44. end
  45. else if (Stack.Count = 0) then
  46. begin
  47. Stack.Push(Op);
  48. end;
  49. end;
  50. if (IString.Text[I] = '^') and (Stack.Peek.Value = '^') then
  51. Stack.Push(Op);
  52. end;
  53.  
  54. end;
  55. if (IString.Text[I] = '(') then
  56. Stack.Push(GetOperator(IString.Text[I]));
  57. if (IString.Text[I] = ')') then
  58. begin
  59. Op.Value := ' ';
  60. while (Stack.Count<>0) and (Op.Value <> '(') do
  61. begin
  62. Op := Stack.Pop;
  63. if(Op.Value <> '(') then
  64. begin
  65. Answer := Answer + Op.Value;
  66. Dec(Rang);
  67. end;
  68. end;
  69. end;
  70. end;
  71. while (Stack.Count<>0) do
  72. begin
  73. Answer := Answer + Stack.Pop.Value;
  74. Dec(Rang);
  75. end;
  76. Edit2.Text := Answer;
  77. Label3.Caption := 'Ранг: '+IntToStr(Rang);
  78. end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement