今回はプログラムの分岐処理をするための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); ではないでしょうか?