목차
#include<stdio.h>
#include<stdlib.h>
#include<conio.h> //getch() 함수를 위해 설정하였다.
#include<malloc.h>
#include<math.h> //pow(double,double) 함수를 위해 설정하였다.
#define MAX_SIZE 100
#define IS_FULL(ptr) (!(ptr))
#define IS_EMPTY(ptr) (!(ptr))
enum precedence {lparen, rparen, plus, minus, times, divide, mod, square, eos, operand, error};
// ( , ) , + , - , *, /, %, ^, 0, 숫자, 에러 를 포함한다.
//스택에 입력이 되는 기호, 연산자 들의 열거체. '^' 계산을 위한 square를 첨가했다.
typedef struct stack *stack_ptr; // 링크를 위한 포인터 변수 선언
typedef struct stack { // 스택 구조체 선언
precedence item; // 데이타 부분
stack_ptr link; // 리스트의 다음을 지정한다.
};
char expr[MAX_SIZE]; // 입력받을 문자열
int multi[MAX_SIZE]; // multi-digit을 위한 배열
char str[10]; // 임시 배열
static int isp[] = {0, 19, 12, 12, 13, 13, 13, 14, 0};
// 스택내 우선순위[( , ) , + , - , *, /, %, ^, 0)]
static int icp[] = {20, 19, 12, 12, 13, 13, 13, 14, 0}; //
// 입력토큰 우선순위[( , ) , + , - , *, /, %, ^, 0)]
void Add(stack_ptr *top, int item); // 스택의 top과 데이터를 전한다. addition
precedence Delete(stack_ptr *top); // 스택의 top을 전한다. delete
int eval(void); // 계산결과를 출력
void error_check(); // 문자열의 에러를 체크한다.
precedence get_token(char *symbol, int *n); // 문자열에서 토큰을 추출한다.
void postfix(void); // infix->postfix로 바꾼다.
void print_token (precedence key, int *i); // 토큰을 출력
int tomulti(char*,int*); // multi-digit으로 바꾸는 함수
본문내용
이 소스는 기본적으로 계산기프로그램입니다.
단, 특징적인 것은 스택을 리스트로 구현했다는
점이고, 또한 한자리 수만의 계산이 아니라
두자리 이상의 수의 계산이 가능하고 즉, 35 + 42
이런식의..... 또한 에러체크 기능이 있습니다.
참고 자료
없음