• ベストアンサー

分数の計算のプログラミングです。

 2つの分数 U/SとV/tの足し算は、Sとtの最小公倍数を l とするとき、 u×l/S+u×l/t 分のlによっておこなわれるんですが、最小公倍数を ユークリッドの互除法で求め、分数の足し算を分数のまま実行するには どうプログラムすればよいのでしょうか?教えてください。 宜しくお願いいたします。   

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

まず、ユークリッドの互除法で求められるのは、最大公約数ですよね。 これは、 int Euclid(int S, int T){ int x,y,z; x=S;y=T; for(;;){ z=x%y; if(z==0){break;} x=y;y=z; } return y; } で、求まります。 最小公倍数は、 S*T/Euclid( S, T); で求まります。 あとは、 l=S*T/Euclid( S, T); ((u*l/S)+(v*l/T))/l; これで、U/S+V/Tが求められます。 部分部分細切れになっているので、つなげればできますよね。

goosasuke
質問者

お礼

勉強させられます。ありがとうございました。

その他の回答 (1)

  • Hk2001
  • ベストアンサー率48% (24/49)
回答No.1

ユークリッドの互除法って最大公約数を求める理論ですよね? 何回も最大公約数を求めるのは面倒なので 足し算自体は 簡単に (分子1 * 分母2) + (分子2 * 分母1)で 分子 分母1 * 分母2 で 分母 を計算して 求めた分子と分母を最大公約数を使い約分しました。 なお参考ソースは 数値チェックや0除算などのチェックを行っていません。 コマンドボタンとテキストボックスを使用しました。 参考ソース ↓↓↓↓↓↓↓↓↓↓↓↓↓ Private Sub Command1_Click() Dim la As Long Dim lb As Long Dim lm As Long Dim ln As Long Dim li As Long Dim ltxtU1 As Long '分子入力1 Dim ltxtD1 As Long '分母入力1 Dim ltxtU2 As Long '分子入力1 Dim ltxtD2 As Long '分母入力1 Dim ltxtU3 As Long '分子答え Dim ltxtD3 As Long '分母答え ltxtU1 = Text1(0).Text ltxtD1 = Text1(1).Text ltxtU2 = Text1(2).Text ltxtD2 = Text1(3).Text la = (ltxtU1 * ltxtD2) + (ltxtU2 * ltxtD1) '分子 lb = (ltxtD1 * ltxtD2) '分母 lm = la ln = lb Do Until lm Mod ln = 0 li = lm Mod ln lm = ln ln = li Loop '最大公約数 = ln ltxtU3 = la / ln ltxtD3 = lb / ln Text1(4).Text = ltxtU3 Text1(5).Text = ltxtD3 End Sub

goosasuke
質問者

お礼

これをもとに勉強したいと思います。ありがとうございました。

関連するQ&A