〜 ナンバー 〜
配列の最小要素を取得

数値型配列変数に入っている値の中で最小値、またはその配列要素番号を取得する命令・関数のサンプル。
尚、モジュール内部ではループにより各要素にアクセスしているわけですが、
HSP2では配列の要素数を取得するための命令が存在しないため、
コチラで紹介しているPVAL構造体アクセスによるgetdiminfo命令を使用して要素数を確認しています。
	

getdiminfo 変数, 次元
変数指定変数、指定次元のサイズがstatにセットされる。
次元1次元目を0として、取得する次元を0〜3のいずれかで指定する。

min 対象配列, タイプ
対象配列最小値または最小値を格納した配列要素を取得する数値型配列変数を指定する。
尚、取得した最小値または最小値を格納した配列要素はstatに返される。
内部でgetdiminfo命令を使用しているため、min命令の前にgetdiminfo命令を定義すること!
タイプ取得タイプ(0:値 1:最小値を格納している要素番号)を指定する。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#module
#deffunc getdiminfo val, int
	mref pval, 1024 : mref dnum, 1
	mref stt, 64
	stt = dnum + 2
	stt = pval.stt
	if (pval & $FFFF = 2) && (dnum = 0) : stt = stt * 4 
	return

#deffunc min val,int
	mref data, 48 : mref type, 1
	mref stt, 64
	getdiminfo data
	i = 0
	repeat stat - 1, 1
		if data.cnt < data.i : i = cnt
	loop
	if type : stt = i : else : stt = data.i
	return
#global

	randomize
	dim values, 10
	repeat 10
		rnd values.cnt, 100
		mes "要素." + cnt + " " + values.cnt
	loop
	mes "−−−−−"
	min values
	mes "最小値:" + stat
	min values, 1
	mes "最小要素:" + stat
	stop

最小値 = min(対象配列, タイプ)
最小値取得した最小値または最小値を格納した配列要素の受取先を指定する。
対象配列最小値または最小値を格納した配列要素を取得する数値型配列変数を指定する。
タイプ取得タイプ(0:値 1:最小値を格納している要素番号)を指定する。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
#module
#defcfunc min array data, int type, local i
	repeat length(data) - 1, 1
		if data.cnt < data.i : i = cnt
	loop
	if type : return i : else : return data.i
#global

	randomize
	dim values, 10
	foreach values
		values.cnt = rnd(100) - 50
		mes "要素." + cnt + " " + values.cnt
	loop
	mes "−−−−−"
	mes "最小値:" + min(values)
	mes "最小要素:" + min(values, 1)