수식해석기(및 실행기) 제작시 데이터 타입에 따른 연산자 처리.
글쓴이: raivalor / 작성시간: 월, 2005/12/19 - 4:12오후
C언어를 이용해 커맨드라인상에서 사용자로 부터 간단한 수식을 입력받고 이를 실행하는 코드를 작성중입니다.(using C. c++아님!!)
고민되는것이 하나 있는데.. 예를 들어 '+' 연산의 경우 피연산자의 데이터 타입별로 크게 4가지(int와 float만 있다고 가정) 연산 형태가 가능합니다.
가장 단순한 방법으로 각 경우의 수 별로(case by case) 코드들을 다 만들어 주면 되겠지요.
int addii(int op1, int op2);
float addff(float op1, float op2);
float addif(int op1, float op2);
float addfi(float op1, int op2);
그러나 위와 같이 단순한 방법은 데이터 타입이 추가될때마다 그 경우의 수가 엄청나게 늘어나게 되니까... 그리 좋은 방법이 아닌것 같아요.
뭔가 세련된 방법이 있지 않을까.. 생각이 듭니다. (저는 모르겠지만.)
비슷한 경험 하신분들.. 어떤 솔루션이 있을까요?
Forums:
Re: 수식해석기(및 실행기) 제작시 데이터 타입에 따른 연산자 처리.
만드려는 프로그램의 용도가 어느정도냐에 달린 문제입니다. 제대로 수치 해석을 하기 위한 프로그램이라면 구조체를 사용해서 직접 정확도와 한계를 제어할 수 있습니다. 대강 계산하기 위한 용도라면 입력되는 숫자를 전부 double로 간주하시면 됩니다. 제 짐작으로는 첫번째 방법까진 사용하지 않아도 될 것 같습니다. 혹시 높은 정확도가 필요한 프로그램을 만들고 계시다면 Numerical Recipes in C 책을 꼭 보세요. :)
학습이 목적이라면, 아래 링크된 컴파일러책의 앞부분을 보시는 것도 좋을것
학습이 목적이라면, 아래 링크된 컴파일러책의 앞부분을 보시는 것도 좋을것같습니다만, 실무에 적용하실것이라면 다른 유용한 소스가 많을것입니다.
http://kangcom.com/common/bookinfo/bookinfo.asp?sku=199709080001
-----
오늘 나의 취미는 끝없는, 끝없는 인내다. 1973 法頂
C++에서 하는 것처럼 하면 됩니다. 다만, 연산자 오버로딩은 프로그래머
C++에서 하는 것처럼 하면 됩니다. 다만, 연산자 오버로딩은 프로그래머가 직접 처리해 주어야 겠지요.
struct Operand { int type; int i; float f; ... };
void add(Operand * sum, Operand *a, Operand * b)
{
if ( a->type == INT && b->type == INT ) { addii(sum, a, b); }
if ( a->type == INT && b->type == FLOAT ) { addif(sum, a, b); }
if ( a->type == FLOAT && b->type == INT ) { addif(sum, b, a); }
if ( a->type == FLOAT && b->type == FLOAT ) { addff(sum, a, b); }
}
struct Operand { int type; int i; float
struct Operand { int type; int i; float f; ... };
틀렸군요.
typedef struct Operand__ { int type; int i; float f; ... } Operand;
[code:1]struct Operand { int t
가 더 낫겠지요. :)
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
댓글 달기