やさしいC(アルゴリズム編)P.242〜244の逆ポーランドについて、いくつか質問です。
#include <stdio.h>
#include <ctype.h>
#define SIZE 50
void init (void) ;
void calc (void);
void push (int n);
int pop (void);
int isEmpty (void);
int isFull(void);
int stack[SIZE];
int sp;
int main (void)
{
init(); //質問①
calc();
return 0;
}
void calc (void)
{
int token;
int a,b,c;
printf ("式を入力してください。¥n");
while ((token = getchar()) != '¥n'){
if ( token == '¥n' || token == ' '){
; //質問②
}
else if ( isdigit(token)){
ungetc (token, stdin);
scanf ("%d", &token);
if (!isFull()) push (token);
}
else if (token == '+' || token == '-' || token == '*' || token == '/'){
if (!isEmpty()) b = pop());
if (!isEmpty()) a = pop());
switch (token){
case '+':
if (!isFull()) push (a+b);
break;
case '-':
if (!isFull()) push (a-b);
break;
case '*':
if (!isFull()) push (a*b);
break;
case '/':
if (!isFull()) push (a/b);
break;
}
}
}
if (!isEmpty()) c = pop();
printf ("計算結果は%dです。¥n",c);
}
void init (void)
{
sp = ;
}
void push (int n)
{
stack [sp++] = n;
}
int pop (void)
{
return stack [--sp];
}
int isFull(void)
{
if (sp >= SIZE){
printf("スタックが満杯です。¥n");
return 1;
}
return 0;
}
int isEmpty(void)
{
if (sp <= 0){
printf("スタックは空です。¥n");
return 1;
}
return 0;
}
init()についてですが、関数に何も記入されていない()があるということは何を意味すのでしょうか。
質問②
本来ならば文が入るところに";"のみ入ってるということは、省略か何かなのでしょうか。
質問③
このプログラム全体についての質問です。
式を入力するとき、逆ポーランド記法で入力して計算とのプログラムになっておりますが、
普通の計算式を入力して、その式を逆ポーランドにし、答えを出すプログラムはどのようなものでしょうか。
宜しくお願い致します。