문제

방법은 없을 해석하는 역 폴란드 표기법으로"정상"수학적 표기 때 중 하나를 사용하여 C++또는 C#?내가 작업한 엔지니어링 회사는,그래서 그들은 사용 RPN 때때로 우리는 방법이 필요를 변환 할 수 있습니다.어떤 방법이 있나요?

도움이 되었습니까?

해결책

그렇습니다.의 생각이 어떻게 RPN 계산기 작동합니다.지금 대신 값을 계산하는 대신,당신은 추가 운영하는 나무입니다.그래서 예를 들어, 2 3 4 + *, 을 때,당신+,그 보다는 오히려 넣어 7 스택에 당신을 넣 (+ 3 4) 에 스택입니다.와 마찬가지로 얻을 때*(스택처럼 보이는 것입 2 (+ 3 4) * 에서는 단계),그것은 (* 2 (+ 3 4)).

이것은 접두사를 표기할 수 있는 변환해야를 중위.트래버스 트리의 왼쪽에서 오른쪽으로,깊이 처음이다.각"내면의 수준을"경우,우선 순위의 운영자는 낮은,당신은 장소 작업에서 부류입니다.여기에,그 후,당신은 말할 것이다, 2 * (3 + 4), 기 때문에,+우선순위가 더 낮*.

희망이 도움이 됩니다!

편집:이 미묘(외에도 고려하지 않고 단항에서 작업을 위):나는 가정 왼쪽 연산자입니다.오른 연관(예를 들어, **다),당신은 다른 결과를 얻을 위한 2 3 4 ** **(** 2 (** 3 4))2 3 ** 4 **(** (** 2 3) 4).

재구성 할 때 중위에서 나무,두 경우에는 우선 순위가 필요하지 않 브라켓,하지만 현실에서 후자의 경우 필요하다 괄호((2 ** 3) ** 4).그래서 오른 연산자,왼쪽 지점될 필요가 우선 순위가 높은(대신의 높이 또는 동등한)을 피하는 브라켓.

또한,더 생각해야 하는 괄호를 위해 오른쪽 지점 -/ 사업자 너무입니다.

다른 팁

이 Shunting Yard 알고리즘을 사용하여 변위(i.e대수적)에 RPN.이것은 당신이 원하는 것을 반대.

너는 나에게 예의 RPN 입력?나는 베테랑 HP 계산기의 사용자/프로그래머입니다.나는 당신이 스택을 모두 포함하는 입력 및 연산자입니다.나는 생각해야 하는 재구성 식 트리를 통과 한 후 트리를 생성하는 중위 form.

C#없원에 대한 기본 분석 역 폴란드 표기법(RPN).해야 합하여 자신의 파서 또는 하나의 온라인.

수십 개의 튜토리얼에 대한 후 변환 양식(RPN)를 중위(대수방정식).살펴보 , 어쩌면 당신은 유용하고 당신이 시도할 수 있는'리버스 엔지니어링'그것을 변환하는 접미사 표현을 중위,형태를 유지 하는 마음에 여러 개 있을 수 있습 중위 표기 위해 주어진 후 하나입니다.거기에 매우 몇 가지 유용한 예제는 실제로 논의한 변환 후위를 중위.여기에는 2 개의 부분으로 진입하는 내가 발견 매우 유용합니다.그것은 또한 일부 의사 코드:

읽을 수 있는 루비,당신은 몇 가지 좋은 해결책이

방법 중 하나는 예를 들어서 두 번째 장의 드래곤 예약 는 설명을 작성하는 방법을 파서를 변환에서 중위를 postfix 표기법의 역습니다.

이 있는 경우 원본 텍스트(string/s)는 당신이 찾고있는에서 변환하 RPN(postfix 표기법)"정상적인 표기"(중위),이것은 확실히 가능한(그리고 가능성이 너무 어렵지 않).

RPN 위해 설계되었 스택 기반기계,방식으로 작업 표시("2 + 3" -> "2 3 +") 맞는 방법이었고 실제로 실행에 하드웨어(밀"2"에 스택,밀"3"에 스택 pop 최고 인수 두 개 off 스택을 추가,푸에 다시 쌓).

기본적으로,당신은 당신을 만들려는 구문 밖으로 나무의 RPN 여 2 표현을 작동하려면서"리프 노드의"과 작업을 자체는 그 이후에는"부모 노드에".이것은 아마에 의해 수행을 재귀적으로 보고 당신의 입력 문자열은(당신은 아마 확인하고 싶다는 부분식을 올바르게 내 여분의 명확성,그렇지 않은 경우미).

일단 당신이 이 구문은 나무,출력할 수 있습 접두어,중위 또는 접미사 표기 단순히 수행하여 사전 주문 후 주문 또는 주문을 통과하는 나무(시 parenthesizing 의 출력은 명확성을 위해 원하는 경우).

좀 더 많은 정보를 찾을 수 있습니다 .

나는 단지를 썼 버전에서 Java,그것의 과에서 하나 Objective-C,상 .

가능한 알고리즘:어 있 스택에서 입력 rpn 으로 사용자 입력,예:8,9,*.당신은 반복을 통해 배열 처음부터 마지막 그리고 당신은 항상 제거한 현재의 요소입니다.이 요소를 평가합니다.는 경우 그것은 피연산자,당신은 그것을 추가 결과에 스택입니다.할 때 그것은 운영자는 당신이 결과를 스택에 두 번(binary 작업)을 피연산자와 쓰기 결과 문자열은 결과에 스택입니다.

예를 입력"8, 9, +, 2, *"당신은 이러한 값 resultstack (대괄호를 나타내는 단일 요소):

1 단계: [8]

2 단계: [8], [9]

3 단계: [(8 + 9)]

4 단계: [(8 + 9)], [2]

5 단계: [(8 + 9) * 2]

입력 스택은 빈,당신은 완성과 resultStack 만 요소가의 결과입니다.(그러나 입력할 수 있는 여러 항목이 포함될 또는 이러한 의미 없는,다음과 같은 주요 작업:"+2 3/".)

이 구현에서는 의도적으로 링크를 사용하지 않는 어떤 자체 제작 유형에 대한 예사업자 또는 피연산자나 그것은 예를 들어 적용종합 패턴이다.그냥 깨끗하고 간단한 그래서 그것을 쉽게 이해할 수 있습과 이식을 다른 언어입니다.

포팅하는 C#은 바로 사용할 수 있도록되어있다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top