取得系の命令・関数には、大きく2タイプに分類できると思います。 基となるデータ(変数やイベント)から、情報の抽出、そのデータの位置やサイズを知るためのもの。 もう1つは、指定した一定の値や範囲から、ある一定の法則に従い、計算されるもの。 参考までに後者の例を挙げますと、rnd関数のようなものです。 今回は、この後者の演算された値を取得するタイプの紹介でございまして、 ものによっては、取得された結果値を参照しても、正しいのか正しくないのかが分かりにくいのもあります。 今章については、見てすぐに分かるものだけのはずですが、 分からないもので、なんでそんな結果となるのか、と不思議に思う命令・関数が出てきたときは、 そういうものだと割り切って考える必要もあるのではないでしょうか。 尚、今章と次章は、全てHSP3から新規に追加されたものばかりです。 下記は、指定された数値を、任意の範囲内に丸めたい時に使用する関数です。
| 結果 = limit(対象値, 最小値, 最大値) | |||
| 結果 | 丸められた整数値の受け取り先。 | ||
| 対象値 | 丸め対象とする整数値または、変数を指定する。 | ||
| 最小値 | 丸めたい下限値を指定する。 | ||
| 最大値 | 丸めたい上限値を指定する。 | ||
1 2 3 4 5 6 7 8 9 |
if before < 1 { after = 1 } else { if before > 99 { after = 99 } else { after = before } } |
1 2 3 |
mes "最小値100 < 対象値-50 < 最大値0 を丸めると 結果値" + limit(-50, 100, 0) mes "最小値100 < 対象値 50 < 最大値0 を丸めると 結果値" + limit( 50, 100, 0) mes "最小値100 < 対象値150 < 最大値0 を丸めると 結果値" + limit(150, 100, 0) |
| 結果 = limitf(対象値, 最小値, 最大値) | |||
| 結果 | 丸められた実数値の受け取り先。 | ||
| 対象値 | 丸め対象とする実数値または、変数を指定する。 | ||
| 最小値 | 丸めたい下限値を指定する。 | ||
| 最大値 | 丸めたい上限値を指定する。 | ||
1 2 3 |
mes "最小値100.0 < 対象値-50.0 < 最大値0.0 を丸めると 結果値" + limitf(-50.0, 100.0, 0.0) mes "最小値100.0 < 対象値 50.0 < 最大値0.0 を丸めると 結果値" + limitf( 50.0, 100.0, 0.0) mes "最小値100.0 < 対象値150.0 < 最大値0.0 を丸めると 結果値" + limitf(150.0, 100.0, 0.0) |
| 絶対値 = abs(対象値) | |||
| 絶対値 | 対象値を絶対値に変換した値の受け取り先。 | ||
| 対象値 | 絶対値に変換したい整数値。 | ||
1 2 3 4 5 |
if before < 1 { after = before * -1 } else { after = before } |
1 2 3 4 |
values = -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5 foreach values mes "[" + values.cnt + "]の絶対値は[" + abs(values.cnt) + "]である。" loop |
| 絶対値 = absf(対象値) | |||
| 絶対値 | 対象値を絶対値に変換した値の受け取り先。 | ||
| 対象値 | 絶対値に変換したい実数値。 | ||
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 34 35 36 |
// メモリサイズの決定 wx = ginfo_winx : wy = ginfo_winy unit = wy / 20 *initialize redraw 0 // マウス位置 px = double(mousex - (wx / 2)) / unit py = double(mousey - (wy / 2)) / unit color 255, 255, 255 : boxf : color , , 255 circle wx / 2 - px * unit, wy / 2 - py * unit, wx / 2 + px * unit, wy / 2 + py * unit, 1 // 横方向メモリ描画 color 255 line wx, wy / 2, 0, wy / 2 repeat wx / unit / 2 + 1 if cnt \ 5 = 0 : size = 2 : else : size = 1 line wx / 2 - (unit * cnt), wy / 2 - (size * 10), wx / 2 - (unit * cnt), wy / 2 + (size * 10) line wx / 2 + (unit * cnt), wy / 2 - (size * 10), wx / 2 + (unit * cnt), wy / 2 + (size * 10) loop // 縦方向メモリ描画 line wx / 2, wy, wx / 2, 0 repeat wy / unit / 2 + 1 if cnt \ 5 = 0 : size = 2 : else : size = 1 line wx / 2 - (size * 10), wy / 2 - (unit * cnt), wx / 2 + (size * 10), wy / 2 - (unit * cnt) line wx / 2 - (size * 10), wy / 2 + (unit * cnt), wx / 2 + (size * 10), wy / 2 + (unit * cnt) loop title "中心からの距離:" + absf(px) + " , " + absf(py) // 絶対値に置き換える redraw *get_position // マウス座標を取得 mx = mousex : my = mousey wait 10 if mx ! mousex || my ! mousey : goto *initialize goto *get_position |
| 平方根 = sqrt(求める値) | |||
| 平方根 | パラメータ値の平方根を返す。 | ||
| 求める値 | ルート元の値を指定する。 | ||
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 |
dim hen, 2 bgscr 0, ginfo_dispx, ginfo_dispy, , 0, 0 pos 10, 10 : mes "辺A" pos 50, 10 : input hen.0, 50, 20, 3 pos 150, 10 : mes "辺B" pos 190, 10 : input hen.1, 50, 20, 3 pos 300, 10 : button gosub "計算", *calc pos 400, 10 : button gosub "終了", *exit stop *calc color 255, 255, 255 : boxf 0, 30 color 255 line 50, 50, hen.0 + 50, 50 pos hen.0 / 2 + 30, 30 : mes "辺A:" + hen.0 color , 255 line 50, 50, 50, hen.1 + 50 pos 10, hen.1 / 2 + 30 : mes "辺B:" + hen.1 color , , 255 line hen.0 + 50, 50, 50, hen.1 + 50 pos hen.0 / 2 + 50, hen.1 / 2 + 50 : mes "斜辺:" + sqrt(hen * hen + hen.1 * hen.1) // 斜辺求める stop *exit end |