第11講 ユークリッド互除法
第7話 ユークリッド互除法を利用して分数の足し算を実行するマクロ例
6
5
を実現するプログラム例
Private Sub CommandButton1_Click()
  
  Rows("6:2000").Select
  Selection.ClearContents
  Cells(1, 1).Select
  Dim a(10) As Integer
  a(0) = f  'a
  a(1) = f  'b
  a(4) = a(0) 'aのバックアップ
  a(5) = a(1) 'bのバックアップ
tobi:
  a(2) = f  'c
  a(3) = f  'd
  a(6) = a(2) 'cのバックアップ
  a(7) = a(3) 'dのバックアップ
  If a(3) > a(2) Then Call g(a(2), a(3))
  a(8) = h(a(2), a(3)) 'cとdの最大公約数
  If a(8) = 1 Then GoTo tobi

  Cells(4, 2) = a(4)
  Cells(4, 4) = a(5)
  Cells(5, 2) = a(6)
  Cells(5, 4) = a(7)
  
  a(9) = Int((a(6) / a(8)) * a(7)) 'cとdの最小公倍数
  Cells(4, 6) = a(4) * Int(a(9) / a(6)) + a(5) * Int(a(9) / a(7))
  Cells(5, 6) = a(9)
End Sub
Function f()
  
tobi:
  f = Int(100 * Rnd)
  If f = 0 Then GoTo tobi
  
End Function
Sub g(a As Integer, b As Integer)

  Dim w As Integer
  w = a
  a = b
  b = w
  
End Sub
Function h(a As Integer, b As Integer)
  
  a = a Mod b
  If a = 0 Then
    h = b
    Exit Function
  End If
  h = h(b, a)
    
End Function
Private Sub CommandButton2_Click()
  
  Range("B4,B5,D4,D5,F4,F5").Select
  Selection.ClearContents
  Cells(1, 1).Select
  
End Sub

参考ダウンロード添付ファイル

変数が多くなりましたので、
今回は配列を利用してみました。
配列だと、役割がわかりにくいですから、
注釈文を入れてあります。
注釈文を入れれば、
変数を意味ありげな長い英単語にする必要は全くありませんね。
意味ありげな英単語で変数名を付けていて、初心者を惑わせている
入門書籍や入門サイトの諸先生方に是非とも考えて頂きたいと思います。

確かに、分母は互いに素でなく(最大公約数が1より大きく)、
通分しての足し算は実現できていますが、
89のように、
まだ計算が終わっていない例も出来てしまいます。
約分されていませんね。
そこで、約分できる場合に約分も実行するプログラム
32
05
58
に変更して下さい。




第6話へ 第8話へ
004

eclipse c++ 入門
魔方陣 数独で学ぶ VBA 入門
数独のシンプルな解き方・簡単な解法の研究
vc++講義へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
専門用語なしの C言語 C++ 入門(Visual C++ 2010で学ぶ C言語 C++ 入門)
専門用語なしの excel vba マクロ 入門 2013 2010 2007 対応講義 第1部
eclipse java 入門へ
本サイトトップへ