Stack을 이용하여 infix 수식을 posfix 로 바꾸는 프로그램. 많이들 하는 것이고...  소스도 엄청 많고 공개된 알고리즘들도 많이 있음. 교과서에도 실려있으니...   그럼에도 불구하고... 많은 학생들이 애를 먹는 문제. 


 내 경우에는 어떠한 알고리즘을 구현하기 전에 손으로 충분한 문제를 풀어봅니다. 어떤 공통된 패턴 내지는 사고의 흐름만 찾아내면 프로그램으로 구현하는 것은 그리 어렵지 않기 때문이죠. 이번 프로그램 같은 경우, 조건의 제한이 ( ) * / - + 로 단순했기 대문에 다른 알고리즘 들보다 훨씬 단순한 알고리즘을 만들어 사용했습니다.


 우선 입력과 출력 부터 봅시다. 입력과 출력은 모두 파일로 합니다.

입력 : infix

A+B
C-D
E*F
G/H
(A*B*C/D)+(E*F+(G*H/I)-J)
(A*B*C/D)
(A + B * C) / (D -E )


출력 : postfix + simple assembly code


--------------------------------------------------
A+B => AB+
--------------------------------------------------
 MOVE R1, B
 MOVE R2, A
 ADD R2, R1
 MOVE TEMP1, R2
 RETURN TEMP1
--------------------------------------------------
--------------------------------------------------
C-D => CD-
--------------------------------------------------
 MOVE R1, D
 MOVE R2, C
 SUB R2, R1
 MOVE TEMP1, R2
 RETURN TEMP1
--------------------------------------------------
--------------------------------------------------
E*F => EF*
--------------------------------------------------
 MOVE R1, F
 MOVE R2, E
 MUL R2, R1
 MOVE TEMP1, R2
 RETURN TEMP1
--------------------------------------------------
--------------------------------------------------
G/H => GH/
--------------------------------------------------
 MOVE R1, H
 MOVE R2, G
 DIV R2, R1
 MOVE TEMP1, R2
 RETURN TEMP1
--------------------------------------------------
--------------------------------------------------
(A*B*C/D)+(E*F+(G*H/I)-J) => ABCD/**EF*GHI/*+J-+
--------------------------------------------------
 MOVE R1, D
 MOVE R2, C
 DIV R2, R1
 MOVE TEMP1, R2
 MOVE R1, TEMP1
 MOVE R2, B
 MUL R2, R1
 MOVE TEMP2, R2
 MOVE R1, TEMP2
 MOVE R2, A
 MUL R2, R1
 MOVE TEMP3, R2
 MOVE R1, F
 MOVE R2, E
 MUL R2, R1
 MOVE TEMP4, R2
 MOVE R1, I
 MOVE R2, H
 DIV R2, R1
 MOVE TEMP5, R2
 MOVE R1, TEMP5
 MOVE R2, G
 MUL R2, R1
 MOVE TEMP6, R2
 MOVE R1, TEMP6
 MOVE R2, TEMP4
 ADD R2, R1
 MOVE TEMP7, R2
 MOVE R1, J
 MOVE R2, TEMP7
 SUB R2, R1
 MOVE TEMP8, R2
 MOVE R1, TEMP8
 MOVE R2, TEMP3
 ADD R2, R1
 MOVE TEMP9, R2
 RETURN TEMP9
--------------------------------------------------
--------------------------------------------------
(A*B*C/D) => ABCD/**
--------------------------------------------------
 MOVE R1, D
 MOVE R2, C
 DIV R2, R1
 MOVE TEMP1, R2
 MOVE R1, TEMP1
 MOVE R2, B
 MUL R2, R1
 MOVE TEMP2, R2
 MOVE R1, TEMP2
 MOVE R2, A
 MUL R2, R1
 MOVE TEMP3, R2
 RETURN TEMP3
--------------------------------------------------
--------------------------------------------------
(A+B*C)/(D-E) => ABC*+DE-/
--------------------------------------------------
 MOVE R1, C
 MOVE R2, B
 MUL R2, R1
 MOVE TEMP1, R2
 MOVE R1, TEMP1
 MOVE R2, A
 ADD R2, R1
 MOVE TEMP2, R2
 MOVE R1, E
 MOVE R2, D
 SUB R2, R1
 MOVE TEMP3, R2
 MOVE R1, TEMP3
 MOVE R2, TEMP2
 DIV R2, R1
 MOVE TEMP4, R2
 RETURN TEMP4
--------------------------------------------------


 대략 이해가 되시는지. 문제는 간단 명료 합니다.


Posted by 지그프리드 지그프리드

댓글을 달아주세요:: 네티켓은 기본, 스팸은 사절

◀ PREV : [1] : [2] : [3] : [4] : [5] : [6] : [7] : [8] : NEXT ▶

BLOG main image
일상, 프로그래밍, IT 그리고 직장생활, Dive, 여행 by 지그프리드

카테고리

Class List (402)
Studies (30)
Exercise & Quizz (10)
Term Project (0)
ECIM list (Help!) (10)
Issues & News (0)
Gossip about IT & Job (22)
Tools (2)
Think about the Justice (23)
Book Review (170)
조엘 온 소프트웨어(번역) (28)
Diary (87)
Vacations (9)
Clash of clans 클래시 오브.. (11)

글 보관함

달력

«   2019/11   »
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Total : 315,135
Today : 24 Yesterday : 27