ここから本文です

VisualBasicの問題なのですが解説お願いします。

ysk********さん

2018/1/910:21:31

VisualBasicの問題なのですが解説お願いします。

問24です。お願いします。

Function gcd,Visual Basic,abc&quot,A Mod B,Sub Mondai24,Dim c As Long,解説

閲覧数:
39
回答数:
2

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

lin********さん

2018/1/1010:43:03

Sub Mondai24
MsgBox("最大公約数は" & gcd(11511017,151426599))
End Sub

Function gcd(A As Long, B As Long) As Long
Dim C As Long
C = A Mod B
If C = 0 Then
gcd = B
Else
gcd = gcd(B, C)
End If
End Function

「Function」というのは、「関数」です。

たとえば、「Len("ABC")」は、文字列の長さ(=文字数)を返す関数です。

もちろん、この場合でしたら、「ABC」の文字数である、「3」が返ってきます。

そのとき「x = Len("ABC")」としておけば、「x」に「3」が入るわけです。

このように、「Visual Basic」には、たくさんの関数が用意されていますが、それぞれのプログラムで、何度も行うような計算があった場合、それを、あたかも「関数」として利用できると便利です。

そこで「Function」プロシージャの出番です。

今回の場合、「Function gcd()」ですから、「gcd()」という名前の「関数」を作ったわけで、「Len()」と同じように使うことができます。

したがって、「gcd(11511017,151426599)」は、「Function gcd()」を呼び出して、計算した結果が返ってきます。

そのとき、「Len("ABC")」のように「"ABC"」に当たるのが、「11511017,151426599」の部分です。

計算させる値を関数に引き渡しています。

「Function」側は、今回は「A」と「B」で、それを受け取ります。

「Long」は、整数型で使用することを宣言しています。

変数「A」に「11511017」が入り、変数「B」に「151426599」が入ります。

そして、この「Function」(=関数)全体が「As Long」で、「整数型」であることが宣言されています。

C = A Mod B

「Mod」は、「余り」です。

「5 ÷ 2」の余りは、「1」です。

「11511017(=A)」を「151426599(=B)」で割った余りは、「11511017」です。

すなわち、「A」そのものです。

もし、余りが「0」なら、「B」を最大公約数として、「gcd」に入れ、返しています。

しかし、余りが出た場合(Else)は、「B」を「C(余り)」を使って、もう一度、計算しています。

このとき、自分自身(「Function gcd()」)を「gcd(B, C)」として呼び出しています。

このような処理の仕方(自分自身を呼び出す)を「再帰的手法」と言いますので、ついでに覚えておいてください。

こうして、「余り」が出なくなるまで計算が繰り返され、最後に「1349」が返ってきて、「MsgBox」によって表示されます。

では、実際に計算してみましょう。

「11511017 ÷ 1349 = 8533」、「151426599 ÷ 1349 = 112251」で割り切れています(最大公約数かどうかの証明にはなっていませんが)。

この質問は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜1件/1件中

bla********さん

2018/1/911:46:13

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる