목차
$1 풀이 및 알고리즘
$2 소스&주석
$3 결과물
$2 소스&주석
$3 결과물
본문내용
Top1++;
Empty1[Top1] = Data;
return 1;
}
// 문자형 데이터 값을 출력할 때 사용할 함수
char Stack::Pop(){
if(Top<0){ //Top이 0보다 작으면 스택에 저장한 데이터가 없는 상태이다.
cout<<"Stack Underflow!"<
cout<<"illegal input"<
exit(0);
}
return Empty[Top--];
//Empty의 최상위 데이터를 리턴하고 Top은 1을 빼줌으로서 다음 값을 지정한다.
}
// 정수형 데이터 값을 출력할 때 사용할 함수
int Stack::Pop(int Data){
if(Top1<0){
cout<<"Stack Underflow!"<
cout<<"illegal input"<
exit(0);
}
return Empty1[Top1--];
}
/* 스택에 저장되어 있는 상태의 연산자를
인자로 받아서 그에 해당하는 값을 리턴 해준다. */
int Stack::Isp(char Operator)
{
//스위치문을 사용하여 각각의 경우에 해당하는 값을 리턴 해준다.
switch(Operator)
{
case '(':
return 0;
case '+':
return 12;
case '-':
return 12;
case '*':
return 13;
case '/':
return 13;
default:
return 0;
}
}
/* 스택에 입력될 연산자를 인자로 받아서
그에 해당하는 값을 리턴 해준다. */
int Stack::Icp(char Operator)
{
switch(Operator)
{
case '(':
return 20;
case '+':
return 12;
case '-':
return 12;
case '*':
return 13;
case '/':
return 13;
default:
return 0;
}
}
/* 메인 함수에서 입력받은 수식을 하나씩 인자로 받아서 이를
피연산자와 연산자로 구분하여 저장하고 입력받은 식을
후위 연산 식으로 변환하여 출력 및 결과를 출력하는 기능을 수행한다. */
void Stack::Postorder(char Token)
{
char *p;//문자형 포인터 선언
int Intchange; //정수형 변수 선언
char Temp;//문자형 변수 선언 임시로 연산자를 저장할 변수
char Temp1;//문자형 변수 선언
p=&Token;//넘겨받은 Token을 포인터로 가리킨다.
/*atoi함수는 문자형 자료 값을 받아서 숫자형 값으로 리턴해주는 함수이다.
리턴 받은 값이 1~9사이의 값일 경우 다음 수행 */
if(atoi(p)>0 && atoi(p)<10){ //문자 값은 포인터 형으로 참조해야 한다.
cout<
Intchange=atoi(p); //atoi함수로 변환된 값을 임시로 저장하고
Push(Intchange); //이를 스택에 저장한다.
}
else if(Token==')'){ //Token이 ')'일 경우 아래문 수행
for(int i=0;i
Temp=Pop();
//Pop()함수를 호출 연산자 스택에 저장되어 있는 값을 불러 임시로 저장한다.
cout<
Push(Operation(Temp));
/*Operation함수에 연산자를 넘기고 이를 이용해 계산한 값을 리턴 받아 정수형 스택에 저장*/
if(Pop()=='('){ //왼쪽 괄호를 만나면
break; //반복문을 빠져나간다.
}
}
}
else{
if(Top==-1)//Top이 -1일 경우 즉 처음 스택에 아무 값도 없을 때
Push(Token); //Token을 연산자 스택에 저장
else{ //값이 들어 있을 경우
while(Isp(Empty[Top])>=Icp(Token)){
/*스택에 저장된 인자의 isp값과 들어갈 인자의 icp값을 비교
스택의 인자의 isp값이 더 크거나 같을 경우 다음 실행 */
Temp1=Pop(); //스택의 값을 임시저장
cout<
Push(Operation(Temp1));
/*Operation함수에 연산자를 넘기고 이를 이용해 계산한 값을 리턴 받아 정수형 스택에 저장*/
}
Push(Token);
//들어갈 인자의 값이 더 작을 경우 연산자를 스택에 저장
}
}
}
/* 더 이상 받을 인자가 없어서 Postorder함수가 종료 되면 연산자 스택에
남은 연산자를 Another함수를 사용하여 출력하고 계산한다. */
void Stack::Another()
{
char Temp1; //문자형 변수 선언
for(int i=Top; i>-1; i--){
//현재 연산자 스택의 최상위를 가리키는 Top부터 0까지 반복
Temp1=Pop(); /*스택에 저장된 값을 임시 저장(한번 호출해서 출력과 Operation함수에 인자로 넘기는 것을 같이하기 위해)*/
cout<
Push(Operation(Temp1));
//Operation함수에 연산자를 넘기고 이를 이용해 계산한 값을 리턴 받아 정수형 스택에 저장
}
cout<
cout<<"계산 결과는: "<
}
// 연산자를 인자로 넘겨받고 그것을 판별하여 계산하고 이 값을 리턴 하는 함수
int Stack::Operation(char oper)
{
int First;//정수형 변수 선언
int Second;
First=Pop(1); //처음으로 부른 값을 저장한다.
Second=Pop(1); //두 번째로 부른 값을 저장한다.
switch(oper) //각각의 경우에 해당하는 결과 값을 리턴 해준다.
{
case '*':
return Second * First;
case '/':
return Second / First;
case '-':
return Second - First;
case '+':
return Second + First;
default:
return 0;
}
}
$3 결과물
Empty1[Top1] = Data;
return 1;
}
// 문자형 데이터 값을 출력할 때 사용할 함수
char Stack::Pop(){
if(Top<0){ //Top이 0보다 작으면 스택에 저장한 데이터가 없는 상태이다.
cout<<"Stack Underflow!"<
}
return Empty[Top--];
//Empty의 최상위 데이터를 리턴하고 Top은 1을 빼줌으로서 다음 값을 지정한다.
}
// 정수형 데이터 값을 출력할 때 사용할 함수
int Stack::Pop(int Data){
if(Top1<0){
cout<<"Stack Underflow!"<
}
return Empty1[Top1--];
}
/* 스택에 저장되어 있는 상태의 연산자를
인자로 받아서 그에 해당하는 값을 리턴 해준다. */
int Stack::Isp(char Operator)
{
//스위치문을 사용하여 각각의 경우에 해당하는 값을 리턴 해준다.
switch(Operator)
{
case '(':
return 0;
case '+':
return 12;
case '-':
return 12;
case '*':
return 13;
case '/':
return 13;
default:
return 0;
}
}
/* 스택에 입력될 연산자를 인자로 받아서
그에 해당하는 값을 리턴 해준다. */
int Stack::Icp(char Operator)
{
switch(Operator)
{
case '(':
return 20;
case '+':
return 12;
case '-':
return 12;
case '*':
return 13;
case '/':
return 13;
default:
return 0;
}
}
/* 메인 함수에서 입력받은 수식을 하나씩 인자로 받아서 이를
피연산자와 연산자로 구분하여 저장하고 입력받은 식을
후위 연산 식으로 변환하여 출력 및 결과를 출력하는 기능을 수행한다. */
void Stack::Postorder(char Token)
{
char *p;//문자형 포인터 선언
int Intchange; //정수형 변수 선언
char Temp;//문자형 변수 선언 임시로 연산자를 저장할 변수
char Temp1;//문자형 변수 선언
p=&Token;//넘겨받은 Token을 포인터로 가리킨다.
/*atoi함수는 문자형 자료 값을 받아서 숫자형 값으로 리턴해주는 함수이다.
리턴 받은 값이 1~9사이의 값일 경우 다음 수행 */
if(atoi(p)>0 && atoi(p)<10){ //문자 값은 포인터 형으로 참조해야 한다.
cout<
Push(Intchange); //이를 스택에 저장한다.
}
else if(Token==')'){ //Token이 ')'일 경우 아래문 수행
for(int i=0;i
//Pop()함수를 호출 연산자 스택에 저장되어 있는 값을 불러 임시로 저장한다.
cout<
/*Operation함수에 연산자를 넘기고 이를 이용해 계산한 값을 리턴 받아 정수형 스택에 저장*/
if(Pop()=='('){ //왼쪽 괄호를 만나면
break; //반복문을 빠져나간다.
}
}
}
else{
if(Top==-1)//Top이 -1일 경우 즉 처음 스택에 아무 값도 없을 때
Push(Token); //Token을 연산자 스택에 저장
else{ //값이 들어 있을 경우
while(Isp(Empty[Top])>=Icp(Token)){
/*스택에 저장된 인자의 isp값과 들어갈 인자의 icp값을 비교
스택의 인자의 isp값이 더 크거나 같을 경우 다음 실행 */
Temp1=Pop(); //스택의 값을 임시저장
cout<
/*Operation함수에 연산자를 넘기고 이를 이용해 계산한 값을 리턴 받아 정수형 스택에 저장*/
}
Push(Token);
//들어갈 인자의 값이 더 작을 경우 연산자를 스택에 저장
}
}
}
/* 더 이상 받을 인자가 없어서 Postorder함수가 종료 되면 연산자 스택에
남은 연산자를 Another함수를 사용하여 출력하고 계산한다. */
void Stack::Another()
{
char Temp1; //문자형 변수 선언
for(int i=Top; i>-1; i--){
//현재 연산자 스택의 최상위를 가리키는 Top부터 0까지 반복
Temp1=Pop(); /*스택에 저장된 값을 임시 저장(한번 호출해서 출력과 Operation함수에 인자로 넘기는 것을 같이하기 위해)*/
cout<
//Operation함수에 연산자를 넘기고 이를 이용해 계산한 값을 리턴 받아 정수형 스택에 저장
}
cout<
// 연산자를 인자로 넘겨받고 그것을 판별하여 계산하고 이 값을 리턴 하는 함수
int Stack::Operation(char oper)
{
int First;//정수형 변수 선언
int Second;
First=Pop(1); //처음으로 부른 값을 저장한다.
Second=Pop(1); //두 번째로 부른 값을 저장한다.
switch(oper) //각각의 경우에 해당하는 결과 값을 리턴 해준다.
{
case '*':
return Second * First;
case '/':
return Second / First;
case '-':
return Second - First;
case '+':
return Second + First;
default:
return 0;
}
}
$3 결과물
소개글