hinekure.net が http://hspdev-wiki.net/ から自動クローリングした結果を表示しています。画像やリソースなどのリンクが切れています。予めご了承ください。
アルゴリズム/フラグ - HSP開発wiki
トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS

フラグ

フラグとは

フラグ(フラッグ、Flag)とは旗の意味です。
プログラムではしばしば、フラグ(旗)が立っているかいないかで動作を決めるという方法をつかいます。
どのプログラムでも使われていると思いますが、AVGなどが分かりやすい例でしょう。
行動によってフラグが立てられ、フラグの状態からイベントが発生するかどうか決定されるなど…。

プログラム上では通常、フラグの状態は変数に 0か 1を入れることで表現します。

どちらが0でも1でもよいと思いますが、IF命令にあわせて次のようにしておいたほうがいいでしょう。

T/F真偽変数の中身フラグの状態
True1フラグが立つ
False0フラグが立っていない


変数の値が True(1) のときが「フラグが立つ」っている状態です。
HSP2.61 HSP3.0

Everything is expanded.Everything is shortened.
  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

フラグのスイッチ。

Everything is expanded.Everything is shortened.
  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 2005-07-04 08:47:47 (月)
  • [f=f==0]とか[f=f!=1]とか[f=1-f]とかも考えられますな。 -- revy? 2005-07-04 20:32:40 (月)
  • revyさんのも含めてサンプル書き直しました。初期値(fstart)を1以外に変更すると分かるのですが、[f=f==0]と[f=f!=1]を使用する方法が一番いいようです。 -- GENKI? 2005-07-10 21:46:25 (日)
  • ありゃ、XORは文字列入れるとダメみたいです。 -- GENKI? 2005-07-10 21:48:13 (日)
  • 論理演算に文字列ですか??? -- kz3 2005-07-10 21:53:18 (日)
  • プログラム作るときのミスで万一変な値をいれてしまった場合でも正常に動く(確実に0か1を返す)かな?とゆー検証のつもりです。^ ^;あ、でもエラーで止まるかしたほうがデバッグにはいいのかな。 -- GENKI? 2005-07-10 22:26:26 (日)
  • そういう事か、==や!=は数値でも変数でも使えるけど"1"^1はエラーになると・・・。 -- kz3 2005-07-11 15:06:21 (月)
  • 「f^1&1」としておけば、何を間違えたか2や3といった値を入れても0と1を返してくれます。(というか変な数字入るような組み方するほうがおかしいんですが…。) -- GENKI? 2008-02-03 (日) 16:22:33

URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White

エンドレスシフト

0,1,2,4,8,16,32...という数字が順番に切り替わる。 というのを1行にまとめてみました。
このサンプルでは0〜8までで、8を超えると0に切り替わります。(後半は逆の8〜0)
maxの8を適当な値に書き換えれば上限変更可能。

Everything is expanded.Everything is shortened.
  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

コメント



トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS
Last-modified: 2010-03-09 (火) 00:20:43 (1370d)