- ベストアンサー
分数計算
質問させて頂きます。 Visual++C 2005で分数計算をする簡単なフォームアプリケーションを作りたいと思っています。 普通の計算なら□+□=■の□を入力させ、■に答えを出力する形ですが、 分数は □ □ --- + --- = ■ □ □ と、分母と分子を別々に入力させて計算させたいのです。 また、計算方法は「+」だけではなくlistboxを作って「+ - * /」から選ばせ、かつ答えだけはLabelを用いて1つのものとして出力したいんです。(既に @ == @ の形になっている) 説明不足で申しわけありません。どうぞよろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
#2 Cupperです プログラムで通分するのは難しいですよ でも、理屈が分かっていれば対処はできます 前の方も仰っているように因数分解すれば良いのですが 因数分解のアルゴリズムを質問者が正しく理解しているのか と言った問題もあるので、簡単な方法を説明します 4620を因数分解するときを考えてみてください 始めに2で割りますよね そして見事に割り切れる 4620÷2=2310 もう一度2で割ってみると、これも割り切れます 2310÷2=1155 さらに2で割ってみる…までもなく割れないことは分かりますがやってみます 1155÷2=577・・・1 割り切れなかったので、割る数を一つ増やして3で割ってみます 1155÷3=385 割り切れましたので、もう一度3で割ってみます 385÷3=128…1 割り切れませんでした 次に割る数を一つ増やして4で割ってみます…(割り切れないのは分かっていますが) 385÷4=96…1 割り切れませんので、割る数を一つ増やして5で割ってみます 385÷5=77 割り切れましたので、ひきつづき5で割ってみます ・ ・ ・ 最終的に、2×2×3×5×7 が答えになります このようにして、割る数字を大きくしていくことで因数を見つけることができます 初めから素数で割れば良いのですが、面倒ですから割る数を1ずつ増やして行ってOK 当面はこれで十分でしょう あとは割り切れた数字を配列に並べると良いでしょう そしてその配列を比較して同じ数字があれば取り除いて 残った数字を掛け合わせると通分の完成 です あとは工夫してください ※ ここで説明したポイント 割る数を一つずつ増やして繰り返す(どこまで増やすかは明らかですよね。割られる数までです。例の場合4620) 割り切れた数字を配列に追加する がんばってください
その他の回答 (4)
- Lchan0211
- ベストアンサー率64% (239/371)
分子と分母の最大公約数を求めて、それを割ればよいです。 最大公約数の求め方は、ユークリッド互助法を使います。 ユークリッド互助法のアルゴリズムは http://mail2.nara-edu.ac.jp/~asait/c_program/sample/euclid.htm とかが参考になるでしょう。
- arain
- ベストアンサー率27% (292/1049)
No.1です。 >問題は約分なんです。 >例えば答えが4分の2なら2分の1にして表示したく、6分の24なら4と表示したいのです。 > 手順はいろいろとありますので、方法の一例だけ。 単純に分母÷分子では約分はできない場合もある(6/10、9/24等)ので 分子を素因数分解し、その求められた値を利用し分母が割り切れるかどうかを判断します。
- Cupper
- ベストアンサー率32% (2123/6444)
分数の四則演算の方法が分からないのでしょうか? 理解しているならば、どのような手順で 計算を行なっているのかを論理的に考えてください (通分するとか約分するとか) あとは工夫するだけです。
- arain
- ベストアンサー率27% (292/1049)
それで、何がわからなくて何を教えてほしいのでしょうか? ・分母と分子を別に入力する方法 ・リストから四則演算を選択する方法 ・分数の計算方法 ・etc... 上記のプログラムを「一から全部」なら、それは丸投げですから禁止行為です。
補足
あ、すいません。 計算して出力するところまでは出来ました。 問題は約分なんです。 例えば答えが4分の2なら2分の1にして表示したく、6分の24なら4と表示したいのです。 よろしくお願いします。
補足
説明不足ですいません。 No.1の方にも補足つけさせて頂きましたが約分でつまづいています・・・