4-1 分岐処理(1)
―基本的なif文―


☆ 総目次へ ★ 第4章節へ ★ 前節へ ★ 次節へ ☆

☆ 
『Delphi入門』 4-1分岐処理(1)-基本的なif文- ☆
以前【基礎課題1-10】で、下のようなフォームプログラムを作りました。



このプログラムでは、
  1.チェックされた項目の数を数える。
  2.その数に応じて、診断結果を出す。

という2つの部分が必要です。
今回、このプログラムに2.の機能を付け加えてみましょう。
1.については、今回は考えません。項目の数は自分で数えることにします。
基礎課題4-1

このプログラムを新しい名前で保存してから、下のようなフォームのプログラムに作り変えてください。



主なコンポーネントのNameプロパティは、次のようにしてください。

コンポーネント Name
ボタン「診断」 ButtonShindan
スピンエディット「チェック項目数」 CSpinEdit
チェックボックス「6-10」 CheckBoxHigh
チェックボックス「0-5」 CheckBoxLow
エディット EditMessage

「チェック項目数」を入力してから「診断」ボタンを押したとき、

 ・チェック項目数が6以上のとき
 ・チェックボックス「6-10」をチェックする
 ・メッセージ欄に「少しストレスがたまっています。気分転換を。」と表示する。

 ・チェック項目数が6以上ではないとき
 ・チェックボックス「0-5」をチェックする
 ・メッセージ欄に「ストレスの兆候がありますが、心配は不要。」と表示する。

ようなプログラムを作りましょう。

ある条件が成り立っているか成り立っていないかによって行う内容が変わる場合には、if文を用いて表します。

 ifもし〜ならば、・・・を実行するというような処理を作成します。
条件が成り立っているか成り立っていないかによって、プログラムの流れを分岐させます。
 
if (条件式){
    ・
    ・ ←条件を判断した結果が成り立つときに実行する処理
    ・
 
}
 
else{
    ・
    ・ ←条件を判断した結果が成り立たないときに実行する処理
    ・
 
}
条件は、
 ・成り立つ
 ・成り立たない
のどちらかしかありません。したがってプログラムは、
 ・{ 以下の文
 ・else { 以下の文
どちらか一つを必ず実行し、かついずれか一つしか実行しません。
    Delphiとの相違点    

診断」ボタンをクリックしたときのイベントハンドラを、次のように書いてください。

注意
面倒でも、『第3章 3−6 C++Builderの約束事』で説明したように、半角スペース2字分ずつの「字下げ」を必ず行い読みやすいプログラムの書き方を行ってください

 C++Builderの関係演算子
条件判断構造の基本となるのは値の比較です。C++Builderでは値の比較に、下記に示す関係演算子を使います。
数学表記 意味 C++Builderでの表記
A > B AはBより大きい A > B
A ≧ B AはB以上 A >= B
A = B AはBに等しい A == B
A ≦ B AはB以下 A <= B
A < B AはBより小さい A < B
A ≠ B AはBに等しくない A != B
  Delphiとの相違点  
基礎課題4-2

次のようなフォームを持つプログラムを作ってください。 主なコンポーネントのNameプロパティは、次のようにしてください。
コンポーネント名 Name
スピンエディット CSpinEditNenrei
ボタン「入力完了」 ButtonKanryo
上のエディット Edit1
下のエディット Edit2
年齢を入力してから「入力完了」ボタンを押すと、 2つのメッセージが表示される。

年齢とメッセージの対応は、次の表にしたがってください。
年齢  メッセージ
20歳以上 あなたは成年ですね。あなたには選挙権があります。
19歳以下 あなたは未成年ですね。あなたに選挙権はありません。
右の枠内を埋めて、プログラムを完成させて下さい。
練習問題

新しいコンポーネント「ラジオボタン」の使い方を覚えましょう。
コンポーネントパレットからラジオボタンのアイコンを選んで、フォーム上に3つ貼ってください。



このままの状態でプログラムを実行して、ラジオボタンをクリックして下さい。
ラジオボタンはどういうはたらきをするコンポーネントか、下に書いてください。

                                                          
基礎課題4-3

次のようなフォームをもつプログラムを作ってください。

 ラベルの使い方

 左の「ようこそいらっしゃいました。」と「性別をチェックして下さい。」は2つのラベルを用いて表現しています。

 実は1つのラベルに複数行のメッセージを表示させることもできます。それには、ラベルコンポーネントの「
WordWrap」プロパティを「True」にすればよいのです。こうすると、指定したラベルコンポーネントの幅にメッセージが収まりきれない場合、自動的に折り返されます。つまり、ラベル幅に収まるように複数行表示してくれます。

 しかし、最初から2行に分けてメッセージを表示させたい場合は、2つのラベルを用いたほうが便利です。
プログラムの動作内容は以下の通りです。

実行してから性別をチェックしてボタンを押すと、下のように2つのメッセージが表示される。

チェック項目とメッセージの対応は、次の表にしたがってください。

チェック項目 メッセージ
女性 あなたは女性ですね。右の階段をお上り下さい。
男性 あなたは男性ですね。左の階段をお上り下さい

基礎課題4-4

次のようなフォームを持つプログラムを作ってください。
主なコンポーネントのNameプロパティは、次のようにして下さい。
コンポーネント名 Name
ラジオボタン「女性」 RadioButtonf
ラジオボタン「男性」 RadioButtonm
ボタン「OK」 ButtonOK
チェックボックス「20歳以上」 CheckBoxSeinen

注意 
SGUクラブ」は架空の団体ですが、もしかすと実在するかもしれません。
プログラムの動作内容は次のとおりです。

性別と年齢をチェックしてから「OK」ボタンを押すと、2つのメッセージが表示されます。

性別・年齢の条件とメッセージの対応は、次の表にしたがって下さい。

性別・年齢 メッセージ
女性で、かつ、20歳以上 あなたは入会資格があります。どうぞお入りください。
それ以外 あなたは入会資格がありません。残念ですがお帰りください。

 『&&論理AND演算子と呼ばれます。
 
 『条件1を満たしていて、さらに条件2を満たしているかどうか』―つまり、2つの条件を両方満たす必要があるときに使います。

上記の場合では
「女性で、かつ、20歳以上」

「RadioButtonfがチェックされていて、かつ、CheckBoxSeinenがチェックされている」
((RadioButton->Checked == True) && (CheckBoxSeinen->Checked == True))

のように&&(&が2つ)を用いて表します。
  Delphiとの相違点  

下の枠内を埋めて、プログラムを完成させてください。

 || 』は論理OR演算子と呼ばれます。

 『条件1を満たしているかどうか、または、条件2を満たしているかどうか』―つまり、2つの条件のうちどちらかが正しければよいときに使います。 

 「女性、または、20歳以上」

「RadioButtonfがチェックされている、または、CheckBoxSeinenがチェックされている」
((RadioButtonf->Checked == True) || (CheckBoxSeinen->Checked == True))
 Delphiとの相違点 
基礎課題4-5

次のようなフォームを持つプログラムを作って下さい。
主なコンポーネントのNameプロパティは、次のようにしてください。

コンポーネント名 Name
スピンエディット SpinEditNumber

スピンエディットには0〜9までの数しか入りません。それ以外の数を入力できないようにMinValueプロパティとMaxValueプロパティの値を変更しておいて下さい。

ここで、プログラムを実行し、数を入力してからOKボタンを押したとき、
  • 数が4以上7以上であれば、メッセージ欄に「教務課」と表示する。
  • 数がそれ以外であれば、メッセージ欄に「森田研究室」と表示する。
ようなプログラムを作ってください。

if文のネスト
   if文の中に別のif文を作成することができます。これをネストと呼びます。if文のネストは、『&&論理AND演算子と同じ処理になります。
 スピンエディットに入力された値が『4以上7以下』であることを表すのに、
   4 <= CSpinEditNumber->Value <= 7
と書くと、プログラムの間違いとされてしまいます。

 次の2つのプログラムは、どちらもスピンエディットに入力された値が『4以上7以下』という同じ意味になります条件式が複雑なときは(A)のように記述したほうが読みやすくなります。厳密にいえば、(B)のほうがプログラムが少ない分だけ処理速度は速くなります。しかし、それは本当にわずかな差でしかありません。実際に動かしてみると、処理速度の違いはわかりません。それよりも、作成するプログラムに応じて読みやすくするようにしましょう。
(A) (B)
if(CSpinEditNumber->Value >= 4)
{
 if
(CSpinEditNumber->Value <=7)
{
     
  }
 }
if((CSpinEditNumber->Value >= 4)
            &&
(CSpinEditNumberー>Value <= 7))
 {

 }
      Delphiとの相違点       
練習問題

次のようなフォームを持つプログラムを作ってください。
コンポーネントのNameプロパティは、次のようにしてください。
コンポーネント名 Name
スピンエディット CSpinEditNumber
ボタン「判定」 ButtonHantei
エディット EditMessage
0以上の数の入力してボタンを押すと、「入力した数は0以上です。」と表示し、

    
0未満の数を入力してボタンを押すと、「入力した数は0未満です。」と表示する。

     

「判定」ボタンを押したときの処理は、以下のように書くことができます。


 上のプログラムのようにif { と else { の後に、それぞれ1つの処理しかしないときは、下記のプログラムのように{ }で囲む必要はありません。言い換えると、実行する処理が複数文であるときは必ず{}で囲まなければならないということになります。
 if文、else文の後ろには、セミコロン(;)を付けません。条件式を判断した結果実行する文の終わりには、必ずセミコロン(;)が必要とされます。

 しかし、  と } がついていてもエラーになるわけではないので、処理する文が1つのときでも読みやすいプログラムのため、 と を消さずに残しておくようにすることを勧めます。
     Delphiとの相違点     
☆ 『Delphi入門』 4-1分岐処理(1)-基本的なif文- ☆

☆ 総目次へ ★ 第4章節へ ★ 前節へ ★ 次節へ ☆



練習問題
基礎課題4‐2 解答
オブジェクトインスペクタから3つあるラジオボタンのうちのいずれかを選んで、そのCheckdプロパティの値をTrueFalseに変えてみましょう。何が起こりますか?

True→                                    

False→                                    
基礎課題4-3 解答
基礎課題4-4 解答
基礎課題4-5 解答