シミュレータで学ぶC言語 [分岐]

今回はプログラムの分岐処理をするためのif文とswitch文を学ぶ.ここではif文とswitch文そのものの説明は省略し,サンプルプログラムを紹介する.

サンプルプログラムweek4-1はif文の例.キーボードからモータのパワーを入力し,ロボットを走行させるプログラム.
このシミュレータではユーザのプログラムはuser_main関数の中に記述する.この関数はループの中にあり,繰り返し呼ばれており,ループが回る度に25行目で1ずつ増加している.

9行目はループの度に聞かれるとロボットが前進しないので,500回毎にパワーを聞き,その間ロボットを走行させるための処理.12行目で標準入力(キーボード)からパワーを入力し,int型の変数powerに代入する.ここで,powerの前のアドレス演算子&をつけることを忘れないように.理由はポインタを学ぶときに説明する.

ロボットのパワーは-100から100までなので,15行目のif文でその範囲のパワーだけでロボットを動かし,それ以外は間違いの表示をプログラムをexit(1)で終了する.

Week4-1

// week4-1
int count = 0; // 繰り返し回数
// user_main()関数はループの中にあり,繰り返し呼ばれている
void user_main()
{
    int power; // モータのパワー

    // ループの度に聞かれるのがうざいから500回毎にパワーを聞く
    if (!(count % 500))
    {
        printf("Input power:");
        scanf("%d", &power);

        // パワーは-100以上100以下の決まり
        if ((-100 <= power) && (power <= 100))
        {
            motor(power, power); // モータへの命令
        }
        else
        {
            printf("パワーは-100以上100以下を入力せよ\n"); // 時計周り
            exit(1);  // プログラム終了
        }
    }
    count++;
    printf("count=%d \r",count); // \rは復帰(カ―ソルが先頭行へ戻る);
}
  • タスク4-1
    • week4-1.zipをここからダウンロードし,c:\ode-0.11.1\myprogの中に解凍し,ビルド・実行せよ.
    • このサンプルプログラムでは左右のモータに同じパワーを入力したが,左右別々のパワーを入力できるように変更せよ.

Week4-2

次のサンプルプログラムweek4-2はロボットシミュレータのロボットは動かさず,文字だけを表示する簡単なもの.標準入力から信号機の色に対応する数字,0:赤,1:黄,2:青を入力し,それに応じた文字を表示する.8行目はループの1回目だけの処理.ただし,変数countは常に0なので,ifの中の処理がずっと繰り返される.

この例では分岐処理として,if else文を使っている.複数分岐がある場合は16,18行目のようにelse if を左に揃えるのが流儀.

//  week4-2
// user_main()関数はループの中にあり,繰り返し呼ばれている
void user_main()
{
    int power; // モータのパワー

    // ループの1回目だけの処理.ただし,変数countは常に0なので,ifの中の処理がずっと繰り返される.
    if (count == 0)
    {
        int	signal;
        printf("Input Signal Color\n Red 0, Yellow 1, Blue 2:");
        scanf("%d",&signal);

        if (signal ==0)
            printf("止まる\n");
        else if (signal == 1)
            printf("注意して渡る\n");
        else if (signal == 2)
            printf("渡る\n");
        else
            printf("そんな色ありません\n");
    }
}

以上

ode
スポンサーリンク
シェアする
demura.netをフォローする
demura.net

コメント

  1. なおき より:

    bccコンパイラでコンパイルしたいのですが、
    引数の部分をどう記述したらいいのかがわかりません。
    教えて頂けないでしょうか。
    単独でbcc32 week4-1.cppとしてもエラーがたくさん出ます。

    • demu より:

      なおきさん、

      返事が遅くなりすみません。bccを私は持っていないので対応できません。

  2. demu より:

    ナッキィーさん,

    そうです.間違いです.
    ご指摘ありがとうございます.

    でむ

  3. ナッキィー より:

    week4-2の19行目のprintf (“止まる\n); は、
    printf ( ” 渡る\n); ではないでしょうか?

タイトルとURLをコピーしました