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

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

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

#1

投稿記事 by ドイ » 12年前

いつもお世話になっております。ドイです。
クラスとスタックの勉強をしていて行き詰まってしまってしまいました。
学校の課題でプログラムの穴埋め課題が出たのですが

コード:

#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行目でアンダーフロー起こらせるとバグってしまうので
直して来なさいと指示を受けました。
どのように直したらいいのか考えてみたもののわからなかったので、
トピックを建てさせてもらいました。
いったい何が原因なのか
出来ればどのように書きなおしたら良いのか
どうか教えていただけないでしょうか。
よろしくお願いします。

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

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

#2

投稿記事 by みけCAT » 12年前

まず、今入っている要素数と入れることができる最大の要素数(=配列の要素数)を見て、
push/popができる状況かチェックしましょう。
そして、できるようなら操作し、できないなら適当な値を返すようにしましょう。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

ドイ

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

#3

投稿記事 by ドイ » 12年前

遅くなりましたがありがとうございます!解決いたしました…

閉鎖

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