第11講 ユークリッド互除法
第4話 ユークリッド互除法マクロ解説
サブプロシージャf
Sub f(a As Integer, b As Integer)
  
  Dim w As Integer
  w = a
  a = b
  b = w
    
End Sub
の任務は、お分かりですよね。
どのようなときにコールされるかと申しますと、
  If b > a Then Call f(a, b)
ですから、bの方が大きいときです。
2

この例の場合が相当します。
1008<1512ですから。
ファンクションプロシージャg
Function g(a As Integer, b As Integer)
  
  a = a Mod b
  If a = 0 Then
    g = b
    Exit Function
  End If
  g = g(b, a)
    
End Function
の1行目を見ればお分かりのように、
aをbで割ったときの余りを求めていますから、
bの方が大きくては困るわけです。
o
小さい方で大きい方を割るのでしたね。
ですから、bの方が大きい場合には、
aとbを交換させるのが、サブプロシージャfの任務であるわけです。
  If a = 0 Then
    g = b
    Exit Function
  End If
の中身はaをbで割ったときの余りが0の場合すなわちaをbで割り切れてしまった場合に、
実行されます。
o
の例では割り切った6が答え=最大公約数でしたよね。
余りがある場合ファンクションプロシージャgは、
さらに、自分の分身gを作り出して、
同じことを繰り返させます。
ただし、
  g = g(b, a)
の引数を見ればお分かりのように、
bが今度は割られる対象になっています。
上の例では、48が割る方だったのに、
48が割られる対象になっています。
そして、
  a = a Mod b
ですから、
割る方は66(a)を48(b)で割ったときの余り18になっています。

  g = g(b, a)
が、このプログラムの神髄であるといえるでしょう。

第5話の課題は、ランダムに0より大きい整数aとbを発生させ、分数a/bをつくり、
その整数がユークリッド互除法を使い、
約分できるかを判定し、約分できる場合には約分し、
約分できない場合は、約分できないと表示するプログラムを考えて下さい。
1
2
3
4
ヒント:約分できるかどうかは、最大公約数が1より大きいかどうかで判定できます。
     0より大きい整数を発生させるためには、If文を使って下さい。
※ aとbの最大公約数が1のとき、aとbは互いに素といいます。



第3話へ 第5話へ
004

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