ページ 11

スタッククラスの動作について

Posted: 2013年11月17日(日) 15:31
by ドイ
いつもお世話になっております。ドイです。
クラスとスタックの勉強をしていて行き詰まってしまってしまいました。
学校の課題でプログラムの穴埋め課題が出たのですが

コード:

#include <iostream.h>

//課題範囲
//スタッククラスの定義
class Stack{
	private :
	int ryouiki[5];
	int pointa;
	
	public :
	void push(int);
	int pop();
	Stack();
	
};

// コンストラクタ
Stack::Stack()
{
	pointa = 0;
};

void Stack::push(int data){
	ryouiki[pointa] = data;
	pointa = pointa+1;
}

int Stack::pop(){
	pointa = pointa-1;
	return ryouiki[pointa];
}

//スタッククラスの定義を書く
//課題範囲終了



main()
{
	Stack st; ///スタック
	int data;
	
	cout <<"data = "; cin >> data; //キーボードから数値を読み取り
	st.push(data); //スタックに格納
	
	cout <<"data = "; cin >> data; //このプログラムでは同様のことを
	st.push(data); //2度行ってみた
	
	
	cout <<"データの取り出し"<<endl;
	data = st.pop(); cout << data <<endl; //スタックから読みだして表示
	data = st.pop(); cout << data <<endl; //スタックから読みだして表示
	
	data = st.pop(); //わざとエラー(アンダーフロー)を起こさせる
	
	return 0;
}
(穴埋めで自分が書いた部分は3行目~30行目)
これで提出したところ、
22行目と23行目でアンダーフロー起こらせるとバグってしまうので
直して来なさいと指示を受けました。
どのように直したらいいのか考えてみたもののわからなかったので、
トピックを建てさせてもらいました。
いったい何が原因なのか
出来ればどのように書きなおしたら良いのか
どうか教えていただけないでしょうか。
よろしくお願いします。

Re: スタッククラスの動作について

Posted: 2013年11月17日(日) 15:35
by みけCAT
まず、今入っている要素数と入れることができる最大の要素数(=配列の要素数)を見て、
push/popができる状況かチェックしましょう。
そして、できるようなら操作し、できないなら適当な値を返すようにしましょう。

Re: スタッククラスの動作について

Posted: 2013年11月30日(土) 16:46
by ドイ
遅くなりましたがありがとうございます!解決いたしました…