合計 昨日 今日

C++言語の分数を扱うプログラム

フォーラムルール
フォーラムルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Name: アマプログラム
[URL]
Date: 2017年5月15日(月) 13:58
No: 1
(OFFLINE)

 C++言語の分数を扱うプログラム

• 分数を扱うクラスを作成したいのですが、
正の分数だけを扱うとする
分数同士の計算をした結果も正になる値でしか計算しないと仮定する
main関数はこのままとする

しかし、このまま実行すると、minが定義されていませんというエラーが出ます。
minを定義していないので当たり前なので、それはわかるのですが、
minを定義してこのプログラムが完成するとしたら、どこで定義すればよいのですか?

また、このエラーがminの問題だけではないならば、どこをどういうふうに変更する必要がありますか?


コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include <iostream>
using namespace std;
class Frac {
private:
    int bunshi;
    int bunbo;
    int GCD(int n1, int n2) {
        for (int i = min(n1, n2); i >= 1; i--) {
            if (n1 % i == 0 && n2 % i == 0) return i; }
        return 1;
    }
public:
    Frac(int n) {
        bunshi = n; bunbo = 1;
    }
    Frac(int shi, int bo) {
        int n = GCD(shi, bo); bunshi = shi / n; bunbo = bo / n;
    }
    Frac mul(Frac a) {
        int shi = bunshi * a.bunshi;
        int bo = bunbo * a.bunbo;
        return Frac(shi, bo);
    }
    Frac div(Frac a) {
        int shi = bunshi * a.bunbo;
        int bo = bunbo * a.bunshi;
        return Frac(shi, bo);
    }
    Frac add(Frac a) {
        int shi = bunshi * a.bunbo + a.bunshi * bunbo;
        int bo = bunbo * a.bunbo;
        return Frac(shi, bo);
    } Frac sub(Frac a) {
        int shi = bunshi * a.bunbo - a.bunshi * bunbo;
        int bo = bunbo * a.bunbo;
        return Frac(shi, bo);
    }
    void print() {
        if (bunbo == 1) {
            cout << bunshi << endl;
        } else {
            cout << bunshi << " / " << bunbo << endl;
        }
    }
};
int main()
{ int seisuu;
cin >> seisuu;
Frac a(seisuu);
a.print();
int bunshi, bunbo;
cin >> bunshi >> bunbo;
Frac b(bunshi, bunbo);
b.print();
a.mul(b).print();
a.add(b).print();
a.sub(b).print();
a.div(b).print();
a.add(b).mul(b).print();
return 0;
}

Name: keito94
[URL]
上級者(22,912 ポイント)
Date: 2017年5月15日(月) 17:07
No: 2
(OFFLINE)

 Re: C++言語の分数を扱うプログラム

pirvateのところで、minを定義すればいいんじゃないのでしょうか?
知識&説明不足注意。
只今デバッグトレーニング中。
目の前の問題に夢中でアドバイスを聞かないのかもしれません。
時折問題を投げ捨てて勝手に解決させてしまうかもしれませんが、予めご了承ください。
(僕自身は至って真剣です。)

Name: かずま
[URL]
Date: 2017年5月15日(月) 17:40
No: 3
(OFFLINE)

 Re: C++言語の分数を扱うプログラム

「C++ min」でググって、出てきたページを見れば、
#include <algorithm> が必要だと分かるはずですが、
ググっていないのですか?
この質問に答えてから、解決にチェックを入れて返信してください。

Name: purin52002
[URL]
上級者(23,856 ポイント)
Date: 2017年5月15日(月) 21:57
No: 4
(OFFLINE)

 Re: C++言語の分数を扱うプログラム

かずまさん
まあもしかしたらstd::minを使おうと思ってなかったんじゃないですかね?
どこのソースかはわかりませんが、自作のminを使ってたのかもしれませんし。

minの定義ですがkeito94さんの言う通りクラス内でしてもいいと思います。
ただ、汎用性の高そうな関数なのであえてクラス内で定義する必要もないんじゃないかな、と思います。

まあ一番はかずまさんの言うstd::minが手っ取り早いと思いますけどね^^
c++初心者を自負しています。
質問者さんには今後私にプログラミングを教えてくれるようにやさしく丁寧に教えるつもりです。ぎぶあんどていく^p^
回答者さんには精一杯感謝します。ぎぶおんりー^p^

Name: かずま
[URL]
Date: 2017年5月15日(月) 23:07
No: 5
(OFFLINE)

 Re: C++言語の分数を扱うプログラム

purin52002 さんが書きました:まあもしかしたらstd::minを使おうと思ってなかったんじゃないですかね?
どこのソースかはわかりませんが、自作のminを使ってたのかもしれませんし。

確かに、元の質問が
アマプログラム さんが書きました:minを定義していないので当たり前なので、それはわかるのですが、
minを定義してこのプログラムが完成するとしたら、どこで定義すればよいのですか?

ですから、ヘッダのせいにしてしまったのは申し訳ありません。

では、GCD のアルゴリズムを min を使わないものにしましょう。
コード[C++]: 全て選択
1
2
3
4
5
    int GCD(int a, int b) {  // ユークリッドの互除法
        int r;
        while (b) r = a % b, a = b, b = r;
        return a;
    }

元のは、ひどすぎると思いませんか?


Return to C言語何でも質問掲示板

オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[18人]