Loading [MathJax]/extensions/tex2jax.js

2015年1月2日金曜日

VBで配列の最大値を求める

Visual Basicで
配列の最大値と、その要素番号を求めるプログラムを作ってみた。
今回は二種類の方法で実装してみた。

配列の要素番号をループさせて最大値を探していく方法

Private Sub getMaxArray(ByVal array() As Integer)
Dim max_index As Integer = Integer.MinValue 'とりあえずIntegerの最小値
Dim max_value As Integer = Integer.MinValue 'とりあえずIntegerの最小値
For count As Integer = LBound(array, 1) To array.Length - 1
If max_value < array(count) Then
max_value = array(count)
max_index = count
End If
Next
MsgBox("最大値は array(" + max_index.ToString + ") = " + max_value.ToString)
End Sub
view raw gistfile1.vb hosted with ❤ by GitHub
注意が必要なのは配列要素の最初!
VBは要素番号は必ず0から始まるわけではない。
なので、ループの最初はLBound関数で配列要素の先頭を指してあげよう



配列をソートして最大値を求める方法

Private Sub getMaxArray2(ByVal array() As Integer)
Dim array_clone() As Integer = array.Clone
System.Array.Sort(array_clone)
Dim max_value As Integer = array_clone(UBound(array)) '最大値
'Dim min_value As Integer = array_clone(LBound(array)) '最小値
Dim max_index As Integer = System.Array.IndexOf(array, max_value)
MsgBox("最大値は array(" + max_index.ToString + ") = " + max_value.ToString)
End Sub
view raw gistfile1.vb hosted with ❤ by GitHub
たいていのプログラム言語は、配列をソートするメソッドが存在する。
ソートすると最大値と最小値が配列の両端に移動するため、
コード上でループさせず配列の先頭or末尾を参照すれば最小値または最大値がわかる。

注意が必要のはソートすると元の配列の順番が変わってしまう点
なので、.Cloneで元配列をシャローコピーして、コピー配列にソートを掛ける必要がある。
最後にコピー元の配列から最大値の配列番号をindexOfメソッドで持ってきて完了!




0 件のコメント:

コメントを投稿