ページ 11

(C++)queの事についてです。

Posted: 2017年4月25日(火) 17:48
by ドドド素人
queをクラスとして実現したいのですが、
このmain関数を変えずに作るには
emptyやpushやpopなどはどうしらた良いのでしょうか...

コード:

#include <iostream>

using namespace std;



int main()
{
que a,b;

int n,v;

cin>>n;
a.empty();
b.empty();
for(int i=0;i<n;i++){
cin>>v;a.push(v);
cin>>v;b.push(v);
}
for(int i=0;i<n;i++){
cout<<a.pop()<<endl;
cout<<b.pop()<<endl;
}
return 0;
}

Re: (C++)queの事についてです。

Posted: 2017年4月25日(火) 22:42
by みけCAT
まず、ここで作りたい「que」に求められる仕様を日本語で説明してください。

Re: (C++)queの事についてです。

Posted: 2017年4月25日(火) 22:54
by かずま
que とは何ですか?
何をするものですか?
empty, push, pos は、どういう動作をすればいいのですか?
詳しく説明してください。

試しに、que をクラスとして実現してみました。
empty, push, pos をメソッドとして実装してみました。
main は、インデントだけを変えました。

コード:

#include <iostream>
 
using namespace std;
 
class que {
public:
    void empty() {}
    void push(int v) {}
    int pop() const { static int v; return ++v; }
};

int main()
{
    que a, b;
    int n, v;

    cin >> n;
    a.empty();
    b.empty();
    for (int i = 0; i < n; i++) {
        cin >> v;
        a.push(v);
        cin >> v;
        b.push(v);
    }
    for (int i = 0; i < n; i++) {
        cout << a.pop() << endl;
        cout << b.pop() << endl;
    }
    return 0;
}
実行結果

コード:

2  (入力)
1  (入力)
2  (入力)
3  (入力)
4  (入力)
1
2
3
4
どういう入力に対して、どういう出力を期待していますか?

Re: (C++)queの事についてです。

Posted: 2017年4月25日(火) 23:01
by ドドド素人
返信ありがとうございます。

4↓
1 2 3 4 5 6 7 8
と入力したら、
1
2
3
4
5
6
7
8
と出力するようにしたいです。

Re: (C++)queの事についてです。

Posted: 2017年4月25日(火) 23:10
by ドドド素人4
4↓
10 20 30 40 50 60 70 80
と入力したら、
10
20
30
40
50
60
70
80
というふうに、入力した数値通りのものを表示させたいです。

Re: (C++)queの事についてです。

Posted: 2017年4月25日(火) 23:14
by かずま
ドドド素人 さんが書きました:4↓
1 2 3 4 5 6 7 8
と入力したら、
1
2
3
4
5
6
7
8
と出力するようにしたいです。
ということは、私の解答でいいということですか?
そのプログラムを実行してみましたか?

Re: (C++)queの事についてです。

Posted: 2017年4月25日(火) 23:16
by ドドド素人
実行してみたのですが、
10 20 30 40 50 60 70 80
と入力しても

2
3
4
5
6
7
8
となってしまいます...

Re: (C++)queの事についてです。

Posted: 2017年4月25日(火) 23:24
by かずま
これでどうでしょうか?

コード:

#include <iostream>
 
using namespace std;
 
class que {
    int b[100];
    int i, o;
public:
    void empty() { i = o = 0; }
    void push(int v) { b[i++] = v; }
    int pop() { return b[o++]; }
};
 
int main()
{
    que a, b;
    int n, v;
 
    cin >> n;
    a.empty();
    b.empty();
    for (int i = 0; i < n; i++) {
        cin >> v;
        a.push(v);
        cin >> v;
        b.push(v);
    }
    for (int i = 0; i < n; i++) {
        cout << a.pop() << endl;
        cout << b.pop() << endl;
    }
    return 0;
}
これはだめなんです。
何が問題だと思いますか?

Re: (C++)queの事についてです。

Posted: 2017年4月25日(火) 23:30
by ドドド素人
何故ダメなのですか?!?!

Re: (C++)queの事についてです。

Posted: 2017年4月26日(水) 04:28
by かずま
ドドド素人 さんが書きました:何故ダメなのですか?!?!
配列の範囲外参照の可能性が気になりませんか?
push の回数より、pop の回数が多い場合の対応は?