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

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

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

#1

投稿記事 by アマプログラム » 7年前

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

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

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

コード:

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

アバター
keito94
記事: 264
登録日時: 7年前
連絡を取る:

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

#2

投稿記事 by keito94 » 7年前

pirvateのところで、minを定義すればいいんじゃないのでしょうか?
デバッグは投げ捨てるものではない。
今までの質問でこれは学んだこと。
質問する時は、必ずちゃんと調べた上に問題をもとにした仕様書を作ってから質問すること。
仕様書の大切さを改めて思い知った…。

かずま

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

#3

投稿記事 by かずま » 7年前

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

アバター
purin52002
記事: 235
登録日時: 7年前
連絡を取る:

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

#4

投稿記事 by purin52002 » 7年前

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

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

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

かずま

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

#5

投稿記事 by かずま » 7年前

purin52002 さんが書きました:まあもしかしたらstd::minを使おうと思ってなかったんじゃないですかね?
どこのソースかはわかりませんが、自作のminを使ってたのかもしれませんし。
確かに、元の質問が
アマプログラム さんが書きました: minを定義していないので当たり前なので、それはわかるのですが、
minを定義してこのプログラムが完成するとしたら、どこで定義すればよいのですか?
ですから、ヘッダのせいにしてしまったのは申し訳ありません。

では、GCD のアルゴリズムを min を使わないものにしましょう。

コード:

    int GCD(int a, int b) {  // ユークリッドの互除法
        int r;
        while (b) r = a % b, a = b, b = r;
        return a;
    }
元のは、ひどすぎると思いませんか?

返信

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