前スライド記載の仕様により、ターミナルウィンドウ上で整数値の加減乗算が実行できるソフトウェア電卓のプログラムを作成せよ。pコマンド、.コマンドも実装のこと。次スライドの「実装に関する詳細な指示」に従うこと。[実装に関するヒント]
・stackを実装しそれを使用すること。
すなわち、stackに関する基本操作 reset, push, pop, isEmpty の最低4つの関数を実装し、それらを呼び出して使うこと。stackポインタはこれらの関数以外では直接操作してはならない。各関数の仕様はつぎのとおり。
基本的には各自stackについて調査した知識を活用すること。
reset: stackの初期化
push: stackにデータを積む。
pop: stack トップの値を取り出す(関数値とし、stack pointerを1つ下げる)
isEmpty: stackが空の場合 1(真)を返す。さもなくば、0(偽)を返す。
・stack上のその他の演算(加算、減算、乗算)についても同様で、必ず関数を作成してそれらを使用すること。それらの関数以外ではstackポインタの操作をしてはならない。
・rpcalcShow.cを参考に作成すると良い。(すべて自力で作成しても勿論かまわない。)ただし、提出の際には、/*debug*/の行はコメントアウトしておくこと。
プログラミングの宿題補足
Re: プログラミングの宿題補足
もともとのトピックは、これでしたか見落としてました。
http://dixq.net/forum/viewtopic.php?f=3&t=19728
add_on_stack関数、sub_on_stack関数、mul_on_stack関数は
前提としてスタックに演算すべき対象が2つ格納されていること。
演算すべき対象となる値がスタックに格納されているかチェックはしていません。
逆ポーランド記法ですし
入力される文字(及び文字列)をどのように処理されるかによって
下記関数コードが使える/使えないが変わるわけですが。。
元http://dixq.net/forum/viewtopic.php?f=3&t=19728のでいくと数値と判断できる文字はひたすらスタックに格納するような
コメントでしたけど。
http://dixq.net/forum/viewtopic.php?f=3&t=19728
add_on_stack関数、sub_on_stack関数、mul_on_stack関数は
前提としてスタックに演算すべき対象が2つ格納されていること。
演算すべき対象となる値がスタックに格納されているかチェックはしていません。
逆ポーランド記法ですし
入力される文字(及び文字列)をどのように処理されるかによって
下記関数コードが使える/使えないが変わるわけですが。。
元http://dixq.net/forum/viewtopic.php?f=3&t=19728のでいくと数値と判断できる文字はひたすらスタックに格納するような
コメントでしたけど。
Re: プログラミングの宿題補足
書き忘れていたので補足
intの正の数、負の数を超える四則演算は保証されていません。
intの正の数、負の数を超える四則演算は保証されていません。
Re: プログラミングの宿題補足
ありがとうございます。すみませんが次になにを打てばいいのかわからないので答え(コード)を教えてください。答えをみて理解するタイプなので。
void readEval(void) {
char tkn[24];//64bit以内の10進整数の文字列が収容可能な桁数
//先行する連続空白類は読み飛ばし、その後最初の空白類
//までの文字列を読み込む; next_token()に相当
while (1) {//repeat for ever; type ctrl-C to quit
//数値はひたすらスタックにプッシュ
//数値以外が来た、つまり演算子が来たら
//演算子の解析と必要なstack上の処理を行う
//次のtokenを読む
}
return;
}