HW03

// OperandStack.h : 피연산자 스택의 클래스

하나
2
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
31
32
33
34
35
#포함하다 &&>
#포함하다 &&>
#포함하다&&>
사용 네임스페이스 기본;
줄을 서서 비어 있는 실수(끊임없는 *str) {
쿠우트 &<&< 거리 &<&< ;
출구(하나);
}
끊임없는 내부 MAX_STACK_SIZE = 20;
수업 피연산자 스택 {
내부 맨 위 = 0;
더블 데이터(MAX_STACK_SIZE); // 요소 배열
공공의:
OperandStack() { 상단 = 하나; }
부울 비었다() { 돌려 주다 맨 위 == 하나; }
부울 가득() { 돌려 주다 맨 위 == MAX_STACK_SIZE 하나; }
비어 있는 누르다(더블 e) {
만약에 (isFull()) 오류(“스택 포화 오류”);
데이터(++맨 위) = 이자형;
}
더블 () {
만약에 (isEmpty()) 오류(“스택 오류”);
돌려 주다 데이터(위);
}
};
CS

// EvalPostfixMain.cpp

하나
2
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#포함하다 “OperandStack.h”
더블 calPostfixExpr(파일 *fp = 시간) {
씨;
OperandStack st;
~하는 동안 ( (씨 = getc(fp)) != ‘\N’) {
만약에 (씨 == ‘+’ ||== ‘-‘ ||== ‘*’ ||== ‘/’) {
더블 값2 = 성.();
더블 가치 1 = 성.();
스위치 (씨) {
사례 ‘+’: 성. 푸시(val1 + 값2); 부서지다;
사례 ‘-‘: 성. 푸시(val1 값2); 부서지다;
사례 ‘*’: 성. 푸시(val1 * 값2); 부서지다;
사례 ‘/’: 성. 푸시(val1 / 값2); 부서지다;
}
}
다른 만약에 (씨 >= ‘0’ &&<= ‘9’) {
ungetc(c,fp);
더블 값;
fscanf_s(fp, “%lf”, &값);
성. 누르기(val);
}
}
돌려 주다 (성.());
}
내부 주로() {
쿠우트<< “수식 입력(접미사)= “;
더블 입술 = calPostfixExpr();
쿠우트 << “계산 결과” << 입술 << ;
OperandStack st = OperandStack();
~하는 동안 (!세인트 isEmpty()) {
더블= 성.();
쿠우트 <<<< 마지막으로;
쿠우트 << “—–“ << ;
}
돌려 주다 0;
}
CS