본문내용
ack[top]+float(int(expr[i])-48)/pow(10,j);
else stack[top]=stack[top]-float(int(expr[i])-48)/pow(10,j);
j++;
}
while(expr[i+1]!=\',\');
if(expr[k-1]==\'0\' && expr[k-2]==\'-\') {stack[top]=-1*stack[top];}
top++;
}
else
{
if(isdigit(expr[i]))
{
stack[top]=0;
int sign=i-1;
for(int j=i;expr[j+1]!=\',\'&& expr[j+1]!=\'.\';j++);
for(;i<=j;i++)
{
stack[top]=stack[top]+(int(expr[i])-48)*pow(10,j-i);
}
if(expr[sign]==\'-\')
{
stack[top]=-1*stack[top];
}
i--;
top++;
}
else
{
if(expr[i]==\'?\')
{
stack[top]=mem; top++;
}
else //연산
{
switch(expr[i])
{
case \'+\': stack[top-2]=stack[top-2] + stack[top-1]; break;
case \'-\': if(expr[i+1]>=\'0\' && expr[i+1]<=\'9\')
{
top++;break;
}
stack[top-2]=stack[top-2] - stack[top-1]; break;
case \'*\': stack[top-2]=stack[top-2] * stack[top-1]; break;
case \'/\': if(stack[top-1]==0)
{
cout<<\"\\a Error:cannot divide by zero\"<
}
stack[top-2]=stack[top-2] / stack[top-1]; break;
case \'^\': stack[top-2]=pow(stack[top-2],stack[top-1]); break; // ^ denotes exponential
case \'%\': stack[top-2]=int(stack[top-2])%int(stack[top-1]); break;
case \'&\': stack[top-2]=int(stack[top-2])&int(stack[top-1]); break;
case \'|\': stack[top-2]=int(stack[top-2])|int(stack[top-1]); break;
case \'s\': if(mode==1) stack[top-1]=stack[top-1]*PI/180;
stack[top-1]=sin(stack[top-1]);
top++; break;
case \'c\': if(mode==1)
{
if(stack[top-1]==90)
{
stack[top-1]=0;top++;break;
}
stack[top-1]=stack[top-1]*PI/180;
}
stack[top-1]=cos(stack[top-1]);
top++; break;
case \'t\': if(mode==1) stack[top-1]=stack[top-1]*PI/180;
stack[top-1]=tan(stack[top-1]);
top++; break;
case \'l\': if(stack[top-1]<=0)
{
cout<<\"\\a Error:cannot obtain log of value<=0\"<
}
stack[top-1]=log10(stack[top-1]);
top++; break;
case \'n\': if(stack[top-1]<=0)
{
cout<<\"\\a Error:cannot obtain ln of value<=0\"<
}
stack[top-1]=log(stack[top-1]);
top++; break;
case \'i\' : if(stack[top-1]>1)
{
cout<<\"\\a Error:cannot obtain sin inverse of value>1\"<
return;
}
stack[top-1]=asin(stack[top-1]);
if(mode==1) stack[top-1]=stack[top-1]*180/PI;
top++;break;
case \'o\' : if(stack[top-1]>1)
{
cout<<\"\\a Error:cannot obtain cos inverse of value>1\"<
return;
}
stack[top-1]=acos(stack[top-1]);
if(mode==1) stack[top-1]=stack[top-1]*180/PI;
top++;break;
case \'a\' : stack[top-1]=atan(stack[top-1]);
if(mode==1) stack[top-1]=stack[top-1]*180/PI;
top++;break;
case \'h\' : stack[top-1]=sinh(stack[top-1]);
top++; break;
case \'j\' : stack[top-1]=cosh(stack[top-1]);
top++; break;
case \'k\' : stack[top-1]=tanh(stack[top-1]);
top++; break;
case \'e\' : stack[top-1]=exp(stack[top-1]);
top++; break;
}
top--;
}
}
}
}
if(error!=1) //error 가 0이면 결과값 출력
{
cout<<\"\\n The result is: \"<
mem=stack[top-1];
}
}
void main()
{
cout<<\" \\n\\n 공학용계산기\\n\"<
cout<<\" 종료는 \'quit\' or \'exit\' 를 치면 됨.\"<
while(1)
{
error=0;
INFIX_TO_POSTFIX in_to_post; //객체 생성
in_to_post.get_str(); //식 입력
in_to_post.conversion(); //식 후위 식으로 변환
POSTFIX post=in_to_post; //객체를 넘겨준다.
post.calculate(); //넘겨 받은 후위 식으로 계산한다.
}
}
결과
느낀점
else stack[top]=stack[top]-float(int(expr[i])-48)/pow(10,j);
j++;
}
while(expr[i+1]!=\',\');
if(expr[k-1]==\'0\' && expr[k-2]==\'-\') {stack[top]=-1*stack[top];}
top++;
}
else
{
if(isdigit(expr[i]))
{
stack[top]=0;
int sign=i-1;
for(int j=i;expr[j+1]!=\',\'&& expr[j+1]!=\'.\';j++);
for(;i<=j;i++)
{
stack[top]=stack[top]+(int(expr[i])-48)*pow(10,j-i);
}
if(expr[sign]==\'-\')
{
stack[top]=-1*stack[top];
}
i--;
top++;
}
else
{
if(expr[i]==\'?\')
{
stack[top]=mem; top++;
}
else //연산
{
switch(expr[i])
{
case \'+\': stack[top-2]=stack[top-2] + stack[top-1]; break;
case \'-\': if(expr[i+1]>=\'0\' && expr[i+1]<=\'9\')
{
top++;break;
}
stack[top-2]=stack[top-2] - stack[top-1]; break;
case \'*\': stack[top-2]=stack[top-2] * stack[top-1]; break;
case \'/\': if(stack[top-1]==0)
{
cout<<\"\\a Error:cannot divide by zero\"<
stack[top-2]=stack[top-2] / stack[top-1]; break;
case \'^\': stack[top-2]=pow(stack[top-2],stack[top-1]); break; // ^ denotes exponential
case \'%\': stack[top-2]=int(stack[top-2])%int(stack[top-1]); break;
case \'&\': stack[top-2]=int(stack[top-2])&int(stack[top-1]); break;
case \'|\': stack[top-2]=int(stack[top-2])|int(stack[top-1]); break;
case \'s\': if(mode==1) stack[top-1]=stack[top-1]*PI/180;
stack[top-1]=sin(stack[top-1]);
top++; break;
case \'c\': if(mode==1)
{
if(stack[top-1]==90)
{
stack[top-1]=0;top++;break;
}
stack[top-1]=stack[top-1]*PI/180;
}
stack[top-1]=cos(stack[top-1]);
top++; break;
case \'t\': if(mode==1) stack[top-1]=stack[top-1]*PI/180;
stack[top-1]=tan(stack[top-1]);
top++; break;
case \'l\': if(stack[top-1]<=0)
{
cout<<\"\\a Error:cannot obtain log of value<=0\"<
stack[top-1]=log10(stack[top-1]);
top++; break;
case \'n\': if(stack[top-1]<=0)
{
cout<<\"\\a Error:cannot obtain ln of value<=0\"<
stack[top-1]=log(stack[top-1]);
top++; break;
case \'i\' : if(stack[top-1]>1)
{
cout<<\"\\a Error:cannot obtain sin inverse of value>1\"<
}
stack[top-1]=asin(stack[top-1]);
if(mode==1) stack[top-1]=stack[top-1]*180/PI;
top++;break;
case \'o\' : if(stack[top-1]>1)
{
cout<<\"\\a Error:cannot obtain cos inverse of value>1\"<
}
stack[top-1]=acos(stack[top-1]);
if(mode==1) stack[top-1]=stack[top-1]*180/PI;
top++;break;
case \'a\' : stack[top-1]=atan(stack[top-1]);
if(mode==1) stack[top-1]=stack[top-1]*180/PI;
top++;break;
case \'h\' : stack[top-1]=sinh(stack[top-1]);
top++; break;
case \'j\' : stack[top-1]=cosh(stack[top-1]);
top++; break;
case \'k\' : stack[top-1]=tanh(stack[top-1]);
top++; break;
case \'e\' : stack[top-1]=exp(stack[top-1]);
top++; break;
}
top--;
}
}
}
}
if(error!=1) //error 가 0이면 결과값 출력
{
cout<<\"\\n The result is: \"<
}
}
void main()
{
cout<<\" \\n\\n 공학용계산기\\n\"<
{
error=0;
INFIX_TO_POSTFIX in_to_post; //객체 생성
in_to_post.get_str(); //식 입력
in_to_post.conversion(); //식 후위 식으로 변환
POSTFIX post=in_to_post; //객체를 넘겨준다.
post.calculate(); //넘겨 받은 후위 식으로 계산한다.
}
}
결과
느낀점
추천자료
[자료구조] max heap
[자료구조] BFS&DFS&BST
[자료구조] post&prefix
자바 자료구조 족보
(자료구조) 스레드 이진트리 중위운행 결과 소스
(자료구조) 트리를 이용한 비순환적 중위운행 결과 소스
[자료구조]Infix로 된 수식을 Prefix와 Postfix로 변환 시키는 프로그램입니다.(C언어)
알고리즘, 자료구조 중 '문자열매칭' ppt 개념설명 수업시연
SK텔레콤 자본구조발표자료
철근 콘크리트 구조.PPT자료
[자료구조] 피보나치수열 - int 데이타 사이즈를 넘어가는 결과값 계산 프로그램
C언어 자료구조 Binary Search Tree (이진 탐색 트리)
C언어 자료구조 HashTable 해시테이블
[자료구조] Linked List를 이용한 예약프로그램 - 버스예약 프로그램을 Linked_list로 구현한다
소개글