掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.27044

c++のソート
投稿者---samurai(2006/05/31 18:45:10)


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)
{




この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:c++のソート 27045 michi 2006/05/31 19:28:24
<子記事> Re:c++のソート 27048 Blue 2006/05/31 20:51:11
<子記事> Re:c++のソート 27049 YuO 2006/06/01 02:03:50


No.27045

Re:c++のソート
投稿者---michi(2006/05/31 19:28:24)


>c++で申し訳ありません。クラスの定義はこのようになっているのですが
>先がわかりません。どのようにしたらソートが動くプログラムができるでしょうか?

ではまず、ソートをせずに単に表示するソースを載せてください。


この投稿にコメントする

削除パスワード

No.27046

Re:c++のソート
投稿者---samurai(2006/05/31 19:37:33)


すみません。考えたのですがそれもわかりません。


この投稿にコメントする

削除パスワード

No.27047

Re:c++のソート
投稿者---michi(2006/05/31 20:19:05)


>すみません。考えたのですがそれもわかりません。

やる気はありますか?
「わかりません」っていうのは具体的にどこが分からないの?


この投稿にコメントする

削除パスワード

No.27057

Re:c++のソート
投稿者---samurai(2006/06/02 11:16:58)


>>c++で申し訳ありません。クラスの定義はこのようになっているのですが
>>先がわかりません。どのようにしたらソートが動くプログラムができるでしょうか?
>
>ではまず、ソートをせずに単に表示するソースを載せてください。

とりあえず表示させることはできました。
ここからがわかりません。どうしたらいいでしょうか?

#include <iostream.h>
/**クラス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(){};                      //デストラクタ
};
/**車両番号を取得する**/
inline short CCar::GetCarNo()
{
    return  m_nCarNo;
}
/**乗客数を取得する**/
inline 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=1;
    short nPassengerCount;
    cout<<i++<<"両目の乗客数を入力してください:";
    cin>>nPassengerCount;
    SetCarNo(i);
    SetPassengerCount(nPassengerCount);
}
/**並び替えた車両番号、乗客数の表示**/
void CCar::DisplayPassengerCount()
{
    cout<<m_nCarNo<<"両目の乗客数は"<<m_nPassengerCount<<"人です。\n";
}


/**main**/
int main(void)
{
    int syaryousu;
    CCar *train;
    cout<<"車両数を入力してください。\n";
    cin>>syaryousu;
    train=new CCar[syaryousu];
    
        for(int i=0; i<syaryousu; i++){
            train[i].EnterPassengerCount();
        }
        return(0);
}




この投稿にコメントする

削除パスワード

No.27058

Re:c++のソート
投稿者---YuO(2006/06/02 12:00:14)


>とりあえず表示させることはできました。

本当に出来ているか調べましたか?
そもそも,格納した値を表示していないので,バグに気づいていないのでしょう。


>ここからがわかりません。どうしたらいいでしょうか?

  1. iostream.hをiostreamに変更する
  2. algorithmをインクルードする
  3. 比較関数を書く
  4. sortを呼び出す




この投稿にコメントする

削除パスワード

No.27066

Re:c++のソート
投稿者---michi(2006/06/03 23:20:56)


>とりあえず表示させることはできました。
>ここからがわかりません。どうしたらいいでしょうか?

ソートする方法としては

1.C++のライブラリを利用する
2.Cのライブラリを利用する
3.全部自分で書く

の三つがパッと思いつきます。
自分でアルゴリズムを考えたければ3に、ライブラリの使い方を勉強したければ1か2を選ぶといいでしょう。

あとソースに、deleteが抜けてますよ。


この投稿にコメントする

削除パスワード

No.27071

Re:c++のソート
投稿者---samurai(2006/06/05 09:51:29)


なんとかソートさせることができました。これをヘッダーファイルとソースファイルに分割したいのですがやり方がわかりません。
どのようにしたらいいでしょうか?

#include <iostream.h>
/**プロトタイプ宣言**/
int main(void);
void sort(short nPassengerCount[], short nCarNo[]);
void swap(short *x, short *y);
/**クラス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 passenger;
    if(i==5){
        i=0;
    }
    cout<<++i<<"両目の乗客数を入力してください:";
    cin>>passenger;
    SetCarNo(i);
    SetPassengerCount(passenger);
}
/**並び替えた車両番号、乗客数の表示**/
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 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]);
            }
        }
    }
}
/**入れ替え**/
void swap(short *x, short *y)
{
    short temp = *x;
    *x = *y;
    *y = temp;
}














この投稿にコメントする

削除パスワード

No.27072

Re:c++のソート
投稿者---qwerty(2006/06/05 10:39:40)


頼むから、それくらい自分で考えてください。
「分割コンパイル」で調べれば幾らでも資料が出てきます。
ていうか、その程度自分で調べられないで、すぐにここで聞くようなら、
プログラミングの素質はありませんよ。



この投稿にコメントする

削除パスワード

No.27092

Re:c++のソート
投稿者---円零(2006/06/07 14:32:37)


掲示板で訊くよりもどこかちゃんとまとまったサイトを見たほうが良い、
という意見には賛成ですが、
分割コンパイルのやり方、っていうか考え方ってC言語の文法の延長上にあるのと違いますから、
他人に訊きたくなる気持ちもよくわかります。
「プログラミングの素質はありませんよ。」
は言い過ぎでしょう。


この投稿にコメントする

削除パスワード

No.27048

Re:c++のソート
投稿者---Blue(2006/05/31 20:51:11)


とりあえず、【掲示板利用宣言】は読んでください。

違反事項
  • 課題の丸投げはしません。
  • 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
  • マルチポスト(多重投稿)はしません。→ソートを実現するには?

その上で何をすべきか考えてください。


この投稿にコメントする

削除パスワード

No.27049

Re:c++のソート
投稿者---YuO(2006/06/01 02:03:50)


>c++で申し訳ありません。クラスの定義はこのようになっているのですが
>先がわかりません。どのようにしたらソートが動くプログラムができるでしょうか?

1. 比較関数を書く or 比較用の関数オブジェクトを書く
2. std::sortに放り込む


#include <iostream.h>

えーっと,いつの時代のプログラムでしょうか。



この投稿にコメントする

削除パスワード

No.27078

Re:c++のソート
投稿者---samurai(2006/06/06 09:20:59)


一応このように解決はしたのですが、この書き方はあまりよくないみたいです。ほかにどのような書き方があるのか教えて頂きたいです。

#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]);
            }
        }
    }
}




この投稿にコメントする

削除パスワード

No.27145

Re:c++のソート
投稿者---επιστημη(2006/06/10 07:36:07)


#include <iostream>
#include <algorithm>

class CCar {
private:
    short   m_nCarNo;        //車両番号
    short   m_nPassengerCount;  //乗客数
public:
    CCar(){}                                            //コンストラクタ
    short   GetCarNo() const;                                    //車両番号を取得する。
    short   GetPassengerCount() const;                  //乗客数を取得する。
    void    SetCarNo(short nCarNo);      //車両番号をセットする。
    void    SetPassengerCount(short nPassengerCount);   //乗客数をセットする。
    void    DisplayPassengerCount() const;                    //乗客数を表示する。
    ~CCar(){};                      //デストラクタ
};

short CCar::GetCarNo() const { return  m_nCarNo; }
short CCar::GetPassengerCount() const { return  m_nPassengerCount; }
void CCar::SetCarNo(short nCarNo) { m_nCarNo=nCarNo; }
void CCar::SetPassengerCount(short nPassengerCount) { _nPassengerCount=nPassengerCount; }

void CCar::DisplayPassengerCount() const {
    std::cout<<m_nCarNo<<"両目の乗客数は"<<m_nPassengerCount<<"人です。\n";
}

struct less_passenger {
  bool operator()(const CCar& x, const CCar& y) const {
    return x.GetPassengerCount() < y.GetPassengerCount();
  }
};

int main() {
    CCar train[5];
    train[0].SetCarNo(1); train[0].SetPassengerCount(10);
    train[1].SetCarNo(2); train[1].SetPassengerCount( 5);
    train[2].SetCarNo(3); train[2].SetPassengerCount(15);
    train[3].SetCarNo(4); train[3].SetPassengerCount( 8);
    train[4].SetCarNo(5); train[4].SetPassengerCount( 3);

    std::sort(train, train+5, less_passenger());

    /**結果表示**/
    for( int i=0; i<5; i++){
        train[i].DisplayPassengerCount();
    }
}



この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧