合計 昨日 今日

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

フォーラムルール
フォーラムルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Name: td1223
[URL]
Date: 2017年11月14日(火) 13:47
No: 1
(OFFLINE)

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

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

Name: よもやま
[URL]
ぴよぴよ(292 ポイント)
Date: 2017年11月14日(火) 19:07
No: 2
(OFFLINE)

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

四則演算結果は、stackに格納するのでしょうか。
格納しないのであれば。。
コード[C++]: 全て選択
1
2
3
4
5
6
7
int add()
{
    int a,b;
    a = pop();
    b = pop();
   return a+b;
}

てなコードが想像できると思うのですが。。。

Name: td1223
[URL]
Date: 2017年11月14日(火) 19:23
No: 3
(OFFLINE)

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

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

Name: よもやま
[URL]
ぴよぴよ(292 ポイント)
Date: 2017年11月14日(火) 20:52
No: 4
(OFFLINE)

 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のでいくと数値と判断できる文字はひたすらスタックに格納するような
コメントでしたけど。
コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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);
}

Name: よもやま
[URL]
ぴよぴよ(292 ポイント)
Date: 2017年11月14日(火) 20:58
No: 5
(OFFLINE)

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

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

Name: td1223
[URL]
Date: 2017年11月14日(火) 21:09
No: 6
(OFFLINE)

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

ありがとうございます。すみませんが次になにを打てばいいのかわからないので答え(コード)を教えてください。答えをみて理解するタイプなので。
コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
void readEval(void) {
  char tkn[24];//64bit以内の10進整数の文字列が収容可能な桁数
 
//先行する連続空白類は読み飛ばし、その後最初の空白類
//までの文字列を読み込む; next_token()に相当
  while (1) {//repeat for ever; type ctrl-C to quit
    //数値はひたすらスタックにプッシュ
    //数値以外が来た、つまり演算子が来たら
      //演算子の解析と必要なstack上の処理を行う
    //次のtokenを読む
  }
  return;
}

コード[C++]: 全て選択
1
2
3
4
5
6
7
void print_stack_top(void) {//stack topを表示してpopする
  /*関数の処理を実装せよ*/
  return;
}
void reset(void) {
  /*関数の処理を実装せよ*/
}

Name: よもやま
[URL]
ぴよぴよ(292 ポイント)
Date: 2017年11月14日(火) 22:11
No: 7
(OFFLINE)

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

push関数、pop関数、isEmpty関数は実装できたのですか?
コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
void push(int num) {
  /*関数の処理を実装せよ*/
}
int isEmpty(void) {
  /*関数の処理を実装せよ*/
}
int pop(void) {
  /*関数の処理を実装せよ*/
}

Name: td1223
[URL]
Date: 2017年11月14日(火) 22:14
No: 8
(OFFLINE)

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

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

Name: td1223
[URL]
Date: 2017年11月15日(水) 06:28
No: 9
(OFFLINE)

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

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

Name: td1223
[URL]
Date: 2017年11月15日(水) 11:42
No: 10
(OFFLINE)

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

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


Return to C言語何でも質問掲示板

オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[15人]