- ベストアンサー
フラグについて
loop文等で、よくフラグを立てろといわれるんですが、意味もわからないし、 何の為に、どのように使うんでしょうか?教えて下さい。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
まず、「フラグを立てろと」ということですが、 意味は、条件に対する結果だとおもってください。 すると「何の為に」が条件 Loop構文だと ループ(繰り返し)を終わる条件を 満たよ/満たしていないよ(フラグ) ということになります。 ※注 Do Loop の場合は繰り返す条件または、繰り返しを終わる条件を指定できます。 例題で考えます。 「例題1」 最初に入力した文字と同じ文字を入力するまで、何度でも再入力を要求するプログラムを作る。 「考え方」 最初に入力した文字と同じ場合にループを終わる。 ループ(繰り返し)を終わる条件 = 最初に入力した文字と同じ場合 満たよ/満たしていないよ(フラグ)= 最初に入力した文字と同じ場合 になる。 解答Aと解答Bを用意しました。解答Bの方が質問の解答に、あってますが 例題の解答としては、Aの方がシンプルです。解答Bの場合に、なる場合は 大抵終わる条件が複数ある場合です。 「解答A」 Private Sub Form_Load() Dim sStr As String Dim sLoopStr As String Dim lCnt As String sStr = InputBox("文字をいれてください。") Do Until sStr = sLoopStr sLoopStr = InputBox(sStr & "と同じ文字を入力したらループを抜けます。" & lCnt & "回目") Loop End End Sub 「解答B」 Private Sub Form_Load() Dim sStr As String '最初 Dim sLoopStr As String '2回目以降 Dim lCnt As String '回数 Dim bFlg As Boolean 'フラグ sStr = InputBox("文字をいれてください。") bFlg = False lCnt = 1 Do Until bFlg = True sLoopStr = InputBox(sStr & "と同じ文字を入力したらループを抜けます。" & lCnt & "回目") If sStr = sLoopStr Then bFlg = True 'フラグを立てる End If lCnt = lCnt + 1 Loop End End Sub そこで、条件を複数にします。 「例題2」 例題1に回数制限をつけます。5回間違えたら入力した文字にかかわらず終了します。 解答は、以下のようにします。 Private Sub Form_Load() Dim sStr As String '最初 Dim sLoopStr As String '2回目以降 Dim lCnt As String '回数 Dim bFlg As Boolean 'フラグ sStr = InputBox("文字をいれてください。") bFlg = False lCnt = 1 Do Until bFlg = True sLoopStr = InputBox(sStr & "と同じ文字を入力したらループを抜けます。" & lCnt & "回目") If sStr = sLoopStr Then bFlg = True 'フラグを立てる End If If lCnt = 5 then bFlg = True 'フラグを立てる End If lCnt = lCnt + 1 Loop End End Sub
その他の回答 (4)
- ARC
- ベストアンサー率46% (643/1383)
>フラグを立てる意味は見難いか、否かだけなんですかね???? そうですね。基本的にはプログラムを見やすくするためのテクニックだと思ってください。 自分だけでなく第三者にとっても見易い、分かり易いプログラムが書けるってのはプログラマにとって重要な資質の一つです。 if 式A OR 式B OR 式C OR 式D OR 式E THEN 処理1 って書くよりも、 Flag = False if 式A THEN Flag =True if 式B THEN Flag =True if 式C THEN Flag =True if 式D THEN Flag =True if 式E THEN Flag =True If Flag = True Then 処理1 って書くほうが見やすいですよね. 要は、フラグを使うことによってプログラムが見やすくなるんであれば、フラグを使ったほうが絶対にいいってことです。
- ARC
- ベストアンサー率46% (643/1383)
こんな感じ dim Flag as boolean '幾つかの条件にヒットしたとき、ループを抜ける Flag=false do ループ内の処理を行う if … then Flag = True'脱出条件の判定 if … then Flag = True Loop until Flag=True ってな感じですね。 If … then Exit Do ってやってしまってもいいんですが、プログラムが見難くなります。
お礼
フラグを立てる意味は見難いか、否かだけなんですかね????
- ymmasayan
- ベストアンサー率30% (2593/8599)
フラグ(Flag)というのはもともと「旗」という意味です。 旗で、今どういう状態にあるかを表しておくわけです。 例えば「降水確率80%」という旗が掲揚されていれば、出かける人はそれを見て傘を持ちます。 旗を立てたり、下ろしたりする仕事と、旗を見て行動を変えるという事柄が別々のタイミングで起こるわけですね。 フラグを立てたり見たりするのはループの中が多いですが、必ずしもそれだけではありません。複数のプログラムの間でフラグを共有することも多いです。(似たものでセマフォ:腕木式信号機:というのもあります)
お礼
旗ですか。なるほど.....。 ありがとうございます。
- nikorin
- ベストアンサー率24% (47/191)
ループ中での処理で、ある条件が満たされたときにフラグと呼ばれる変数の値を 変える(例えば0から1に)ことを「フラグを立てる」といいます。 ループ中ではフラグの値を監視していて、フラグが立ったときに特定の処理を行ったり、 ループを抜けたりします。
お礼
そこまでは、なんとなくわかります。 ありがとうございます。
お礼
例題付でとてもよく解りました。 ご丁寧にありがとうございます。