フラグ †
フラグ(フラッグ、Flag)とは旗の意味です。
プログラムではしばしば、フラグ(旗)が立っているかいないかで動作を決めるという方法をつかいます。
どのプログラムでも使われていると思いますが、AVGなどが分かりやすい例でしょう。
行動によってフラグが立てられ、フラグの状態からイベントが発生するかどうか決定されるなど…。
プログラム上では通常、フラグの状態は変数に 0か 1を入れることで表現します。
どちらが0でも1でもよいと思いますが、IF命令にあわせて次のようにしておいたほうがいいでしょう。
T/F | 真偽 | 変数の中身 | フラグの状態 |
True | 真 | 1 | フラグが立つ |
False | 偽 | 0 | フラグが立っていない |
変数の値が True(1) のときが「フラグが立つ」っている状態です。
HSP2.61 HSP3.0
1
2
3
4
5
6
7
8
9
10
|
| f = 0
gosub *msg
f = 1 gosub *msg
stop
*msg
if f=0 : mes "False ("+f+")" : else : mes "True ("+f+")"
return
|
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
37
38
39
40
41
42
43
|
| rep = 3
fstart = 1
f=fstart
mes "f=f^1"
repeat rep
mes ""+f
f=f^1
loop
mes "-------------------"
f=fstart
mes "f=f==0"
repeat rep
mes ""+f
f=f==0
loop
mes "-------------------"
f=fstart
mes "f=f!=1"
repeat rep
mes ""+f
f=f!=1
loop
mes "-------------------"
f=fstart
mes "f=1-f"
repeat rep
mes ""+f
f=1-f
loop
mes "-------------------"
f=fstart
mes "f=f^1&1"
repeat rep
mes ""+f
f=f^1&1
loop
mes "-------------------"
stop
|
- 使えるかも・・・(゚ー^*ニヤリ -- kz3
- [f=f==0]とか[f=f!=1]とか[f=1-f]とかも考えられますな。 -- revy?
- revyさんのも含めてサンプル書き直しました。初期値(fstart)を1以外に変更すると分かるのですが、[f=f==0]と[f=f!=1]を使用する方法が一番いいようです。 -- GENKI?
- ありゃ、XORは文字列入れるとダメみたいです。 -- GENKI?
- 論理演算に文字列ですか??? -- kz3
- プログラム作るときのミスで万一変な値をいれてしまった場合でも正常に動く(確実に0か1を返す)かな?とゆー検証のつもりです。^ ^;あ、でもエラーで止まるかしたほうがデバッグにはいいのかな。 -- GENKI?
- そういう事か、==や!=は数値でも変数でも使えるけど"1"^1はエラーになると・・・。 -- kz3
- 「f^1&1」としておけば、何を間違えたか2や3といった値を入れても0と1を返してくれます。(というか変な数字入るような組み方するほうがおかしいんですが…。) -- GENKI?
0,1,2,4,8,16,32...という数字が順番に切り替わる。
というのを1行にまとめてみました。
このサンプルでは0〜8までで、8を超えると0に切り替わります。(後半は逆の8〜0)
maxの8を適当な値に書き換えれば上限変更可能。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
| f=4 max = 8
repeat 10
mes ""+cnt+":"+f
if f=0 : f=1 : else : f= max-1 & f << 1
loop
mes ""
repeat 10
mes ""+cnt+":"+f
if f=0 : f=max : else : f= max<<1-1 & f >> 1
loop
stop
|