プログラミングの宿題補足

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
td1223

プログラミングの宿題補足

#1

投稿記事 by td1223 » 6年前

前スライド記載の仕様により、ターミナルウィンドウ上で整数値の加減乗算が実行できるソフトウェア電卓のプログラムを作成せよ。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*/の行はコメントアウトしておくこと。

よもやま
記事: 68
登録日時: 8年前
連絡を取る:

Re: プログラミングの宿題補足

#2

投稿記事 by よもやま » 6年前

四則演算結果は、stackに格納するのでしょうか。
格納しないのであれば。。

コード:

int add()
{
    int a,b;
    a = pop();
    b = pop();
   return a+b;
}
てなコードが想像できると思うのですが。。。

td1223

Re: プログラミングの宿題補足

#3

投稿記事 by td1223 » 6年前

すみませんがint型じゃなくてvoid型の場合でお願いします。またstackが格納するあればのコードを教えてください。

よもやま
記事: 68
登録日時: 8年前
連絡を取る:

Re: プログラミングの宿題補足

#4

投稿記事 by よもやま » 6年前

もともとのトピックは、これでしたか見落としてました。
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のでいくと数値と判断できる文字はひたすらスタックに格納するような
コメントでしたけど。

コード:

void add_on_stack(void) {
  int a,b;
  a = pop();
  b = pop();
  push(a+b);
}
void sub_on_stack(void) {
  /*関数の処理を実装せよ*/
  int a,b;
  a = pop();
  b = pop();
  push(a-b);
}
void mul_on_stack(void) {
  /*関数の処理を実装せよ*/
  int a,b;
  a = pop();
  b = pop();
  push(a*b);
}


よもやま
記事: 68
登録日時: 8年前
連絡を取る:

Re: プログラミングの宿題補足

#5

投稿記事 by よもやま » 6年前

書き忘れていたので補足
intの正の数、負の数を超える四則演算は保証されていません。

td1223

Re: プログラミングの宿題補足

#6

投稿記事 by td1223 » 6年前

ありがとうございます。すみませんが次になにを打てばいいのかわからないので答え(コード)を教えてください。答えをみて理解するタイプなので。

コード:

void readEval(void) {
  char tkn[24];//64bit以内の10進整数の文字列が収容可能な桁数
  
//先行する連続空白類は読み飛ばし、その後最初の空白類
//までの文字列を読み込む; next_token()に相当
  while (1) {//repeat for ever; type ctrl-C to quit
    //数値はひたすらスタックにプッシュ
    //数値以外が来た、つまり演算子が来たら
      //演算子の解析と必要なstack上の処理を行う
    //次のtokenを読む
  }
  return;
}

コード:

void print_stack_top(void) {//stack topを表示してpopする
  /*関数の処理を実装せよ*/
  return;
}
void reset(void) {
  /*関数の処理を実装せよ*/
}

よもやま
記事: 68
登録日時: 8年前
連絡を取る:

Re: プログラミングの宿題補足

#7

投稿記事 by よもやま » 6年前

push関数、pop関数、isEmpty関数は実装できたのですか?

コード:

void push(int num) {
  /*関数の処理を実装せよ*/
}
int isEmpty(void) {
  /*関数の処理を実装せよ*/
}
int pop(void) {
  /*関数の処理を実装せよ*/
}

td1223

Re: プログラミングの宿題補足

#8

投稿記事 by td1223 » 6年前

まだそこもやっていませんので、ぜひ解答例を教えてください。お願いします。

td1223

Re: プログラミングの宿題補足

#9

投稿記事 by td1223 » 6年前

出来れば早めにお願いします。木曜日に提出するので。

td1223

Re: プログラミングの宿題補足

#10

投稿記事 by td1223 » 6年前

add sub関数はわかりましたので、void readEvalだけでも答えを教えてくれば助かります。

返信

“C言語何でも質問掲示板” へ戻る