C언어를 사용,스택을 이용한 계산기 구현(부동소수및음수가능)
본 자료는 3페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
해당 자료는 3페이지 까지만 미리보기를 제공합니다.
3페이지 이후부터 다운로드 후 확인할 수 있습니다.

소개글

C언어를 사용,스택을 이용한 계산기 구현(부동소수및음수가능)에 대한 보고서 자료입니다.

목차

1. 계산기 알고리즘

2. 함수 소개

본문내용

if (*src == \'(\')
{
push(*src);
src++;
if(*src == \'-\')
{
src++;
state2=ON; // \'(\'가 나오구 다음에 \'-\'가 나오면 그다음숫자는 음수라는걸 알려줌//
}
}
else if (*src == \')\')
{
while (get_stack_top() != \'(\') //\')\' 가나오면 \'(\'가 나올때까지 팝해서 후위형수식 스택에 넣음//
{
*dst++ = pop();
*dst++ = \' \'; //공백은 두자리 이상의 수를 받을때 분리하기위한방법//
}
pop();
src++;
}
else if (is_operator(*src))
{
while (!is_stack_empty() &&
precedence(get_stack_top()) >= precedence(*src))
{
*dst++ = pop();
*dst++ = \' \';
}
push(*src);
src++;
}
else if (*src >= \'0\' && *src <= \'9\')
{
if(state2==ON)
{
minus[x++]=ON; //괄호를 기준으로 음수냐 아니냐를 판별및 배열의 저장//
state2=OFF;
}else minus[x++]=OFF;
do
{
*dst++ = *src++;
} while (*src >= \'0\' && *src <= \'9\' || *src==\'.\');
*dst++ = \' \';
}
else
src++;
}
while (!is_stack_empty())
{
*dst++ = pop();
*dst++ = \' \';
}
dst--;
*dst = 0;
minus[x]=\'x\';
x=0;
while(minus[x]!=\'x\')
{
printf(\"\\nThe minus State %d\",minus[x]);
x++;
}
}
double calc(char *p)
{
int i,cnt=0,x=0;
char *s;
double c;
init_stack();
while (*p)
{
if (*p >= \'0\' && *p <= \'9\')
{
i = 0;
do
{
if(*p == \'.\')
{
s=p;
while(*s++!=\' \') //공백을 만나면 카운트의 종료//
{
cnt++;
}
++p; //소수점을 만나면 건너뜀//
}
i = i * 10 + *p - \'0\';
p++;
} while (*p >= \'0\' && *p <= \'9\' || *p == \'.\');
state2=minus[x++]; //배열의 저장된 마이너스부호정보를 수를 입력받을때마다 하나씩 상태체크변수에 넣음//
c=(double)i;
printf(\"\\nstate = %d\",state);
//printf(\"\\n%f\",c); // 첫번째 입력받은 수 출력
if(cnt==0) //정수처리부// 분기점: 소수점이 없으면 cnt=false 소수점 있으면cnt=true
{
if(state==ON && state2 !=ON)
{ //음수 처리부//
push_s(c);
}
else if(state==ON)
{
state=OFF;
push_s(c*-1);
}
else if(state!=ON && state2==ON)
{
state=OFF;
push_s(c*-1);
}
else if(state==ON && state2==ON)
{
push_s(c*-1);
}
else push_s(c);
}
else{
cnt=cnt-1;
//printf(\"\\nThe count:%d\",cnt); //부동소수처리부//
while(cnt !=0)
{
c=c/10;
cnt--;
}
//printf(\"\\nThe float:%f\",c);
}
}
else if (*p == \'+\')
{
push_s(pop_s() + pop_s());
p++;
}
else if (*p == \'*\') //곱셈과 나눗셈 나머지(modulus)연산자는 교환법칙이 성립 안하기때문에 변수에 할당후 연산//
{
push_s(pop_s() * pop_s());
p++;
}
else if (*p == \'-\')
{
c = pop_s();
push_s(pop_s() - c);
p++;
}
else if (*p == \'%\')
{
c = pop_s();
push_s((double)((int)pop_s() % (int)c)); //modulus 연산자는 정수연산밖에 안되기때문에 형변환 하여 수식//
p++;
}
else if (*p == \'/\')
{
c = pop_s();
push_s(pop_s() / c);
p++;
}
else
p++;
}
return pop_s();
}

키워드

  • 가격1,000
  • 페이지수9페이지
  • 등록일2010.04.07
  • 저작시기2010.1
  • 파일형식한글(hwp)
  • 자료번호#243847
본 자료는 최근 2주간 다운받은 회원이 없습니다.
  • 편집
  • 내용
  • 가격
다운로드 장바구니