2.プログラムの制御

(1)条件分岐(if文,switch文)
   制御構造を持たないプログラムは,上から下ヘ,左から右へ向かって実行
   される。しかし,定められた条件によって複数の選択肢から1つを選び,そ
   れを実行する場合もある。このような処理を実行するために,if文,switch文
   などがある。

(a) if文〜条件式が成立するか否か(即ち,”真”か”偽”か)を評価して,条件付き
         の実行や分岐を行うフロー制御ステートメント。
    
     if 条件式A 
         
        ステートメントブロック 1     →条件式Aが成立する場合(真の場合)に実行

     elseif 条件式B

        ステートメントブロック 2     →条件式Bが成立する場合(真の場合)に実行

     elseif 条件式C

        ステートメントブロック 3     →条件式Cが成立する場合(真の場合)に実行

     else

        ステートメントブロック 4     →上の条件のいずれにも該当しない場合に実行

     end
                 ステートメントブロックは,1行以上の複数のステートメントから成る。

 if文のバリエーション

   バリエーション1(elseif文が省略された場合)
       if 条件式A
         ステートメントブロック 1
       else
         ステートメントブロック 2
       end
               
   バリエーション2(elseif文,else文が省略された場合)
       if 条件式A
         ステートメントブロック 1
       end

   バリエーション3(if文が二重にネストされた場合)
       if 条件式A
         ステートメントブロック 1
       else
         if 条件式B
            ステートメントブロック 2
         else
            ステートメントブロック 3
         end
       end
               上の例はネストしない形式でも記述できる。

   例1) if x>xmax 
           xmax=x;
       end
             ・・・もし,xがxmaxよりも大きいならば,xmaxにxの値を代入
   
   例2) if x>=60
           a='OK'; 
       else
           a='NG';
       end
             ・・・もし,xが60以上ならば文字変数aにOK,そうでないならばNGを代入

  関係演算子(数値や文字列の大小関係を比較)

      関係演算子             意味
         ==                等しい
        ~=               等しくない
        >                より大きい
        <                より小さい
        >=                 以上
        <=                 以下

    ※ if文の等号(==)は論理的に等しいことを意味し,算術代入文のそれ
      は変数に値を代入することを意味する。

  論理演算子(複数の条件式を組み合わせて,複雑な条件式を作る場合に使用)

      論理演算子             意味
        &&                論理積(かつ)
         | |               論理和(または)
        

(b) switch case文〜switch_exprの値に従って,複数のステートメント
                  ブロックを実行するフロー制御ステートメント

      switch switch_expr     switch_expr:switch_exprとしてスカラーまたは
        case case_expr_1            文字列がくる。
          ステートメントブロック 1  もし,case_expr_1がswitch_exprと一致するならば
                          ステートメントブロック 1を実行
        case case_expr_2
          ステートメントブロック 2
        otherwise
          ステートメントブロック 3
      end

   例)  temp=input('temp=');
         switch temp
            case 0
              disp('cold')
           case 10
              disp('cool')
           case 20
              dsip('warm')
           case 30
              disp('hot')
           otherwise
              disp('There is an error  in this input data')
         end


  <switch case文とif文の違い>
    switch case文→ひとつのswitch_exprを評価した結果に従い,分岐する。
    if文→1つ以上,複数の別々の式を評価して分岐出来る。
                 (なお,switch case文はif文を用いても記述出来る。)


(2)繰り返し制御文(for〜end文,while〜end文)
  繰り返しを行うためのループは,プログラムの一連のステートメントを必要な
 回数だけ実行させるものである。ループは簡潔で分かりやすいプログラムを記述
 するために極めて有効である。
  この繰り返し制御と先の条件分岐は,プログラムの作成上最も重要な役割を果
 たし,これらを自由自在に用いてはじめて有用なプログラムを記述出来る。

 (a) for〜end文 :指定回数分,繰り返し計算を実行

   for ループ変数 =初期値:[増分値]:最終値 

     繰り返される             →ループ変数を初期値から増分値ずつ増し,
     ステートメントブロック          最終値になるまで繰り返す。

   end
                         増分値を省略した場合は,デフォルトの増分値は+1
                         と見做される。常にループの先頭でループ変数と最終
                         値を比較する。このため初期値の与え方によっては,
                         ループが全く実行されない場合もある。ループの外に
                         出たとき,ループ変数は最終値の値をとる。

   例)     t=0;
          for ii=1:100       繰り返し計算が終了すると,変数
            t=t+x(ii);       t に x(1)〜x(100)の合計値
          end              が代入されている。

   多重ループ〜ループは,次のように多重構造とすることが出来る。この場合,
            ループ変数は内側のループから先にカウントされる。

   例1)   for ii=1:100
            for jj=1:10
                for k=1:50
                  ステートメントブロック
                end    %このループを終えたらkの値は50となっている
                for m=1:20
                  ステートメントブロック
                end
            end
         end

   例2) 間違いの例(互いのループが交差するようなネストのさせ方はしない)
         
         for ii=1:100
           
           for jj=1:300
           
         end  %ii

           end %jj

     ※ for〜end文からの抜け出し  →ループ内でbreak文を実行する。
                           多重ループ内にbreak文がある場合には該当
                           ループのみを終了する。
          例)  s=0;
              for ii=1:100
                s=s+ii;
                  if s>100
                    break
                  end
              end
                     sが100を越えたらforループから抜ける。

(b) while文〜不定回数の繰り返し
        while 条件式
          ステートメントブロック    条件式が成立している間(真である間),
        end                繰り返し実行


プログラミングのトップページへ戻る