Views 28083 Votes 0 Comment 0
Atachment
Attachment '2'
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print
(20061116 에 업데이트 한 내용)
calc_linux_tree.c 를 make 버전으로 수정했음
출력 시 줄바꿈 되는 부분 수정(입력 값에서 줄바꿈 부분 없앰)

업로드 파일 설명..

[calc_console.zip]
이진 트리를 사용한 계산기(링스리스트)
사칙연산과 괄호에 대한 우선순위 적용
리눅스 콘솔 환경

[calc_web.zip]
위의 콘솔 환경을 웹 버전으로 바꾼것..
기능은 같음 ㅋㅋ
old/new 두 가지가 있음

new - 우선 순위 연산계산기..
https://www.hooni.net/app/calc/new/index.cgi

old - 웹 프로그래밍 테스트로 만든 간단한.. ㅋㅋ
https://www.hooni.net/app/calc/old/index.html


링크리스트(Linked List)로 구현한 스택(Stack)과 2진 트리(Tree) 자료구조를 이용한 계산기
2진 트리 자료구조로 구현되어 전위, 중위, 후외  표기법 모두 표현할 수 있음!! ㅋㅋ
웹버전과 일반 콘솔 버전이 포함됨..


(2*(3+6/2)+2)/4+3

위와 같은 수식을 해석해서 계산해주는 스택을 이용한 계산기 입니다.

연산자의 우선순위를 고려한 수식표현방법에 대해 알아봅니다.
수식을 표현할때 흔히 사용되는 방법은 중위표기법 입니다.
하지만 컴퓨터는 이를 이해하기 힘듭니다.
컴퓨터가 이해하기 쉬운 구조로 바꾸기 위해 중위표기법을
후위표기법으로 바꿔야 합니다.
※C로배우는 알고리즘(세화 - 이재규)에 잘 소개되어 있습니다.

일단 구현범위를 잡습니다.
연자자는 4칙연산만 정의되도록합니다.( +, -, *, / )
연산자 마다 우선순위를 부여하자
우선순위가 높을수록 큰수를 부여
예) +, - 는 1 을 부여하고 *, /는 2를 부여, 괄호 ( 는 0을 부여

알고리즘
1. '('를 만나면 스택에 푸시
2. ')'를 만나면 스택에서 '('가 나올때까지 팝하여 출력하고 '('는 버림
3. 연산자를 만나면 스택에서 그 연산자보다 낮은 우선순위의 연산자를
   만날 때까지 팝하여 출력한 후 자신을 푸시
4. 피연산자는 그냥 출력
5. 모든 입력이 끝나면 스택에 있는 연산자들을 모두 팝하여 출력.

아래의 예를 보겠습니다.

(2*(3+6/2)+2)/4+3
문자출력스택(상->하)설명
(('('는 푸시
22(피연산자 출력
*2* ('*'가 '('보다 우선순위 높음
(2( * ('('는 푸시
32 3( * (피연산자는 출력
+2 3+ ( * ('+'가 '('보다 우선순위 높음
62 3 6+ ( * (피연산자는 출력
/2 3 6/ + ( * ('/'가 '+'보다 우선순위 높음
22 3 6 2/ + ( * (피연산자는 출력
)2 3 6 2 / +* ('('까지 팝하여 출력, ')'는 무시
+2 3 6 2 / + *+ ('*'는 '+'보다 높으므로 팝
22 3 6 2 / + * 2+ (피연산자는 출력
)2 3 6 2 / + * 2 ++ ('('까지 팝하여 출력
/2 3 6 2 / + * 2 +/연산자 푸시
42 3 6 2 / + * 2 + 4/피연산자 출력
+2 3 6 2 / + * 2 + 4 /+'/'는 '+'보다 높으므로 팝
32 3 6 2 / + * 2 + 4 / 3+피연산자는 출력
2 3 6 2 / + * 2 + 4 / 3 +끝이므로 모두 팝
?

  1. [c] 시간 관련 함수 설명과 예제..

    Date2003.04.23 CategoryDevelop Byhooni Views11523
    Read More
  2. [c] 스토리지 클래스(변수)

    Date2003.04.23 CategoryDevelop Byhooni Views8197
    Read More
  3. [c] 포인터와 함수포인터에 대해..

    Date2003.04.23 CategoryDevelop Byhooni Views8019
    Read More
  4. [c] 구조체의 설명과 예제..

    Date2003.04.23 CategoryDevelop Byhooni Views8373
    Read More
  5. [c] 프로세스간의 통신(파이프)

    Date2003.04.23 CategoryDevelop Byhooni Views6891
    Read More
  6. [jsp] 정적/동적(차트생성) 이미지 전달

    Date2003.04.23 CategoryDevelop Byhooni Views7307
    Read More
  7. [c] OpenGL 직사각형(2D) 크기 확대/축소

    Date2003.04.23 CategoryDevelop Byhooni Views9069
    Read More
  8. [c++] 더블 링크리스트(linked list) 학습용 초간단 단어장

    Date2003.04.23 CategoryDevelop Byhooni Views9323
    Read More
  9. [c] 구조체/파일 입출력 프로그램

    Date2003.04.23 CategoryDevelop Byhooni Views7063
    Read More
  10. [c] 컴파일러 선행처리기 따라하기..

    Date2003.04.23 CategoryDevelop Byhooni Views6681
    Read More
  11. [c] 싱글, 더블 링크리스트(linked list)로 만든 예제..

    Date2003.04.23 CategoryDevelop Byhooni Views6737
    Read More
  12. [c] fgets() 함수 사용하기..

    Date2003.04.23 CategoryDevelop Byhooni Views7818
    Read More
  13. [c] 간단한 순위 루틴.. (정보처리기사)

    Date2003.04.23 CategoryDevelop Byhooni Views6874
    Read More
  14. [c] 간단한 순위 루틴.. (질문에 대한 답변)

    Date2003.04.23 CategoryDevelop Byhooni Views7469
    Read More
  15. [c++] 링크리스트(linked list) 클래스(스택,큐)

    Date2003.04.23 CategoryDevelop Byhooni Views9553
    Read More
  16. [c] 문자열 처리(문자열 자르기)

    Date2003.04.23 CategoryDevelop Byhooni Views8637
    Read More
Board Pagination Prev 1 5 6 7 8 9 ... 53 Next
/ 53