c++で申し訳ありません。クラスの定義はこのようになっているのですが
先がわかりません。どのようにしたらソートが動くプログラムができるでしょうか?
実行結果
1両面の乗客数を入力してください:10
2両面の乗客数を入力してください:5
3両面の乗客数を入力してください:15
4両面の乗客数を入力してください:8
5両面の乗客数を入力してください:3
5両目の乗客数は3人です。
2両目の乗客数は5人です。
4両目の乗客数は8人です。
1両目の乗客数は10人です。
3両目の乗客数は15人です。
#include <iostream.h>
class CCar
{
public:
CCar(short nCarNo,short nPassengerCount); //コンストラクタ
short GetCarNo(); //車両番号を取得する。
short GetPassengerCount(); //乗客数を取得する。
void SetCarNo(short nCarNo); //車両番号をセットする。
void SetPassengerCount(short nPassengerCount); //乗客数をセットする。
void DisplayPassengerCount(); //乗客数を表示する。
void EnterPassengerCount(); //乗客数を入力する。
~CCar(); //デストラクタ
private:
short m_nCarNo; //車両番号
short m_nPassengerCount; //乗客数
};
inline short CCar::GetCarNo()
{
return m_nCarNo;
}
inline short CCar::GetPassengerCount()
{
return m_nPassengerCount;
}
void CCar::SetCarNo(short nCarNo)
{
> c++で申し訳ありません。クラスの定義はこのようになっているのですが
> 先がわかりません。どのようにしたらソートが動くプログラムができるでしょうか?
ではまず、ソートをせずに単に表示するソースを載せてください。
#include <iostream>
#include <algorithm>
#include <iterator>
#include <set>
class CCar {
public:
CCar(short nCarNo,short nPassengerCount)
: m_nCarNo(nCarNo), m_nPassengerCount(nPassengerCount) {}
friend bool operator<(const CCar& x, const CCar& y)
{ return x.m_nPassengerCount < y.m_nPassengerCount; }
friend std::ostream& operator<<(std::ostream& stream, const CCar& c) {
return stream << "Car#" << c.m_nCarNo << " "
<< c.m_nPassengerCount << " passengers";
}
private:
short m_nCarNo; //車両番号
short m_nPassengerCount; //乗客数
};
int main() {
std::set<CCar> train;
train.insert(CCar(1,10));
train.insert(CCar(2, 5));
train.insert(CCar(3,15));
train.insert(CCar(4, 8));
train.insert(CCar(5, 3));
std::copy(train.begin(), train.end(),
std::ostream_iterator<CCar>(std::cout, "\n"));
}
そのものずばりのソースですけれど、
ちゃんと理解して使わないと突っ込まれた時に返答できなさそうですね。
> ちゃんと理解して使わないと突っ込まれた時に返答できなさそうですね。
勿論す。 ベタコピーで提出できるよなソースは出しませんって (^^
# 不等号の向きを裏返して priority_queue 使おうかとも思ったぞ(んふふ
#C言語関係質問掲示板とマルチですね(ハンドル/IPまで一致…)
解決しました!皆様ありがとうございました!
どう解決したのか、顛末を記すのが礼儀ってもんですぜ。
すみません!
色々調べてソートがちゃんと動くようになりました。
これからもっと勉強していきます
だから、
> 色々調べて
を載せてくれませんでしょうか?
質問するときだけ具体的なソースを載せて、解決するときは何もなし。
これだと、情報共有も兼ねている掲示板として成り立ちませんよ。
一応こういうのを作ってみました。
#include <iostream.h>
/**プロトタイプ宣言**/
int main(void);
void swap(short *x, short *y);
void sort(short nPassengerCount[], short nCarNo[]);
/**クラスCCarの定義**/
class CCar
{
private:
short m_nCarNo; //車両番号
short m_nPassengerCount; //乗客数
public:
CCar(){} //コンストラクタ
short GetCarNo(); //車両番号を取得する。
short GetPassengerCount(); //乗客数を取得する。
void SetCarNo(short nCarNo); //車両番号をセットする。
void SetPassengerCount(short nPassengerCount); //乗客数をセットする。
void DisplayPassengerCount(); //乗客数を表示する。
void EnterPassengerCount(); //乗客数を入力する。
~CCar(){}; //デストラクタ
};
/**車両番号を取得する**/
short CCar::GetCarNo()
{
return m_nCarNo;
}
/**乗客数を取得する**/
short CCar::GetPassengerCount()
{
return m_nPassengerCount;
}
/**車両番号をセットする**/
void CCar::SetCarNo(short nCarNo)
{
m_nCarNo=nCarNo;
}
/**乗客数をセットする**/
void CCar::SetPassengerCount(short nPassengerCount)
{
m_nPassengerCount=nPassengerCount;
}
/**乗客数を入力する**/
void CCar::EnterPassengerCount()
{
static int i=0;
short nPassengerCount;
if(i==5){
i=0;
}
cout<<++i<<"両目の乗客数を入力してください:";
cin>>nPassengerCount;
SetCarNo(i);
SetPassengerCount(nPassengerCount);
}
/**並び替えた車両番号、乗客数の表示**/
void CCar::DisplayPassengerCount()
{
cout<<m_nCarNo<<"両目の乗客数は"<<m_nPassengerCount<<"人です。\n";
}
/**main**/
int main(void)
{
int i;
char cont;
short nCarNo[5], nPassengerCount[5];
/**オブジェクト生成**/
CCar train[5];
/**乗客数の入力**/
do{
for(i=0; i<5; i++){
train[i].EnterPassengerCount();
}
cout<<"これでいいですか?[Y/N]::";
cin>>cont;
}while(cont=='n');
/**車両番号、乗客数を取得**/
for(i=0; i<5; i++){
nCarNo[i]=train[i].GetCarNo();
nPassengerCount[i]=train[i].GetPassengerCount();
}
sort(nPassengerCount, nCarNo);
/**結果表示**/
for(i=0; i<5; i++){
train[nCarNo[i]-1].DisplayPassengerCount();
}
return(0);
}
/**入れ替え**/
void swap(short *x, short *y)
{
short temp = *x;
*x = *y;
*y = temp;
}
/**車両番号と乗客数を昇順にソート**/
void sort(short nPassengerCount[], short nCarNo[])
{
int i, j;
for(i=0; i<4; i++){
for(j=i+1; j<5; j++){
if(nPassengerCount[i] > nPassengerCount[j]){
swap(&nPassengerCount[i], &nPassengerCount[j]);
swap(&nCarNo[i], &nCarNo[j]);
}
}
}
}
ツイート | ![]() |