プロが教えるわが家の防犯対策術!

loop文等で、よくフラグを立てろといわれるんですが、意味もわからないし、
何の為に、どのように使うんでしょうか?教えて下さい。

A 回答 (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
    • good
    • 0
この回答へのお礼

例題付でとてもよく解りました。
ご丁寧にありがとうございます。

お礼日時:2001/09/26 15:20

>フラグを立てる意味は見難いか、否かだけなんですかね????



そうですね。基本的にはプログラムを見やすくするためのテクニックだと思ってください。

自分だけでなく第三者にとっても見易い、分かり易いプログラムが書けるってのはプログラマにとって重要な資質の一つです。

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

って書くほうが見やすいですよね.
要は、フラグを使うことによってプログラムが見やすくなるんであれば、フラグを使ったほうが絶対にいいってことです。
    • good
    • 2

こんな感じ



dim Flag as boolean

'幾つかの条件にヒットしたとき、ループを抜ける
Flag=false
do
 ループ内の処理を行う
 
 if … then Flag = True'脱出条件の判定
 if … then Flag = True
Loop until Flag=True

ってな感じですね。
If … then Exit Do
ってやってしまってもいいんですが、プログラムが見難くなります。
    • good
    • 0
この回答へのお礼

フラグを立てる意味は見難いか、否かだけなんですかね????

お礼日時:2001/09/02 12:36

フラグ(Flag)というのはもともと「旗」という意味です。


旗で、今どういう状態にあるかを表しておくわけです。
例えば「降水確率80%」という旗が掲揚されていれば、出かける人はそれを見て傘を持ちます。
旗を立てたり、下ろしたりする仕事と、旗を見て行動を変えるという事柄が別々のタイミングで起こるわけですね。

フラグを立てたり見たりするのはループの中が多いですが、必ずしもそれだけではありません。複数のプログラムの間でフラグを共有することも多いです。(似たものでセマフォ:腕木式信号機:というのもあります)
    • good
    • 0
この回答へのお礼

旗ですか。なるほど.....。
ありがとうございます。

お礼日時:2001/09/02 12:34

ループ中での処理で、ある条件が満たされたときにフラグと呼ばれる変数の値を


変える(例えば0から1に)ことを「フラグを立てる」といいます。
ループ中ではフラグの値を監視していて、フラグが立ったときに特定の処理を行ったり、
ループを抜けたりします。
    • good
    • 0
この回答へのお礼

そこまでは、なんとなくわかります。
ありがとうございます。

お礼日時:2001/09/02 12:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています