- ベストアンサー
分数の足し算をさせるプログラムが分かりません。どなたか分かりませんか?
分数の足し算をさせるプログラムが分かりません。 C言語の問題で分数の足し算までは一応できるんですが、答えがでたときに整数で出すやり方と約分して表す方法が分かりません。 どなたか知恵を貸してくれませんか? ユーザから4つの整数を入力し、はじめに入力された2個の整数と後に入力された2個の整数を分数と考え、その分数の和を表示するプログラムを作成せよ。 例えば、「3」「4」「5」「6」と入力されたときは、3/4 + 5/6を計算する。 そのプログラム内では分数の和を計算する関数を作成する。 さらに、 約分を行う関数を 再帰呼び出しを利用して作成する。 void yakubun(int *a1, int *a2) 例えば、以下の場合1/2と表示される。 int i=10,j=20; yakubun(&i,&j); printf(“%d / %d”, i, j); ちなみにここまでできました↓ #include<stdio.h> void bunsu_tasizan(int a1,int a2,int b1,int b2, int *c1,int *c2 ) { *c1=(a1*b2)+(b1*a2); *c2=(a2*b2); } int main() { int x1,x2,y1,y2,z1,z2; printf("整数を入力してください"); scanf("%d",&x1); scanf("%d",&x2); scanf("%d",&y1); scanf("%d",&y2); if(x2==0||y2==0||x2==0&&y2==0) printf("0以外を入力してください"); else{ bunsu_tasizan(x1,x2,y1,y2,&z1,&z2); printf("%d/%d",z1,z2);} return (0); }
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
#4 です. > 再帰はどのように使えばいいのでしょうか? #4 に挙げた URL の英語版には,再帰版と非再帰 (繰り返し) 版の 擬似コードがあります. Euclidean algorithm (Wikipedia) http://en.wikipedia.org/wiki/Euclidean_algorithm → Using recursion (再帰版擬似コード) → Using iteration (繰り返し版擬似コード) Cで書けば, // mとnの最大公約数 (GCD) を求める. unsigned gcd(unsigned m, unsigned n) { return (n == 0) ? m : gcd(n, m % n); } たったこんだけ.
その他の回答 (4)
- noocyte
- ベストアンサー率58% (171/291)
> 約分を行う関数を 再帰呼び出しを利用して作成する。 #1 さんのおっしゃるように,最大公約数を再帰関数で求めるということじゃないのかなぁ. ユークリッドの互除法なら,再帰でも非再帰でも簡単に最大公約数が求められますが. ユークリッドの互除法 (Wikipedia) http://ja.wikipedia.org/wiki/%E3%83%A6%E3%83%BC%E3%82%AF%E3%83%AA%E3%83%83%E3%83%89%E3%81%AE%E4%BA%92%E9%99%A4%E6%B3%95
- redfox63
- ベストアンサー率71% (1325/1856)
再帰関数が分からないのでしょうか、それとも約分のロジックですか? 約分なら 分子・分母双方の共通因子で除算すれば良いですよね ということは 2以上で分母の1/2まで調べれば良いということになります これらの因数で除算した場合の剰余がともに0になればこの因数で約分できることになります 分母/2から2へ遷移していくか逆に 2から分母/2は趣味の問題でしょう 分母/2から2へ遷移したほうが再帰回数は少なくなるでしょうけど
- akiyousan
- ベストアンサー率29% (13/44)
>例えば、「3」「4」「5」「6」と入力されたときは、3/4 + 5/6を計算する。 で、その結果がどう出れば良いんでしょうか? >答えがでたときに整数で出すやり方と約分して表す方法が分かりません。 ↑とありますが、約分はわかりますが、整数で出すというのは?? 3/4 + 5/6 = (9+10)/12 = 19/12 19/12と出れば問題ないんでしょうか? >例えば、以下の場合1/2と表示される。 >int i=10,j=20; >yakubun(&i,&j); >printf(“%d / %d”, i, j); とあるので、見ればわかるでしょと言われてもしょうがないんですが、 整数で・・・というのがわからなかったので...
- asuncion
- ベストアンサー率33% (2127/6289)
> 約分を行う関数を 再帰呼び出しを利用して作成する。 この関数の中で、分母・分子の最大公約数を求めればよいと思います。 最大公約数を求める際、再帰呼び出しが使えます。
お礼
再帰はどのように使えばいいのでしょうか?