Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- procedure TForm1.Button1Click(Sender: TObject);
- var
- I: Integer;
- Op: Operator;
- begin
- ToDefault(Edit2, Label3);
- for I := Low(IString.Text) to High(IString.Text) do
- begin
- if (Ord(IString.Text[I]) > 96) and (Ord(IString.Text[I]) < 123) then
- begin
- Op.Value := IString.Text[I];
- Op.Priority := 0;
- Stack.Push(Op);
- Answer:= Answer + IString.Text[I];
- Stack.Pop;////
- Inc(Rang);
- end;
- if (IString.Text[I] = '+') or (IString.Text[I] = '-') or (IString.Text[I] = '*') or (IString.Text[I] = '/') or (IString.Text[I] = '^') then
- begin
- Op := GetOperator(IString.Text[I]);
- if (Stack.Count <> 0) and (Stack.Peek.Priority < Op.Priority) then
- begin
- Stack.Push(Op);
- end
- else
- if (Stack.Count = 0) then
- begin
- Stack.Push(Op);
- end
- else
- begin
- if (Stack.Count <> 0) and (Stack.Peek.Priority >= Op.Priority) and
- (IString.Text[I] <> '^') and (Stack.Peek.Value <> '^') then
- begin
- while (Stack.Count <> 0) and (Stack.Peek.Priority >= Op.Priority) do
- begin
- Answer := Answer + Stack.Pop.Value;
- Dec(Rang);
- end;
- //////
- if (Stack.Count <> 0) and (Stack.Peek.Priority < Op.Priority) then
- begin
- Stack.Push(Op);
- end
- else if (Stack.Count = 0) then
- begin
- Stack.Push(Op);
- end;
- end;
- if (IString.Text[I] = '^') and (Stack.Peek.Value = '^') then
- Stack.Push(Op);
- end;
- end;
- if (IString.Text[I] = '(') then
- Stack.Push(GetOperator(IString.Text[I]));
- if (IString.Text[I] = ')') then
- begin
- Op.Value := ' ';
- while (Stack.Count<>0) and (Op.Value <> '(') do
- begin
- Op := Stack.Pop;
- if(Op.Value <> '(') then
- begin
- Answer := Answer + Op.Value;
- Dec(Rang);
- end;
- end;
- end;
- end;
- while (Stack.Count<>0) do
- begin
- Answer := Answer + Stack.Pop.Value;
- Dec(Rang);
- end;
- Edit2.Text := Answer;
- Label3.Caption := 'Ранг: '+IntToStr(Rang);
- end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement