今回はプログラムの分岐処理をするための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");
}
}
- タスク4-2
- week4-2.zipをここからダウンロードし,c:\ode-0.11.1\myprogの中に解凍し,ビルド・実行せよ.
- サンプルプログラムweek4-2をswitch文で書き換えよ.
以上

コメント
bccコンパイラでコンパイルしたいのですが、
引数の部分をどう記述したらいいのかがわかりません。
教えて頂けないでしょうか。
単独でbcc32 week4-1.cppとしてもエラーがたくさん出ます。
なおきさん、
返事が遅くなりすみません。bccを私は持っていないので対応できません。
ナッキィーさん,
そうです.間違いです.
ご指摘ありがとうございます.
でむ
week4-2の19行目のprintf (“止まる\n); は、
printf ( ” 渡る\n); ではないでしょうか?