2005/C6/課題1左
『斗』という漢字を書くプログラム試作†
// 作成者:山崎 高橋 今西
// 作成日:2005-11-1
task main ()
{
int x;
x=140;
repeat (2)
{
//GO WRITING
OnFwd (OUT_A);
OnRev (OUT_C);
Wait (20);
Off (OUT_A+OUT_C);
//PEN UP
OnRev (OUT_B);
Wait (20);
Off (OUT_B);
//TURN
OnRev (OUT_A+OUT_C);
Wait (140);
//GO
OnFwd (OUT_A);
OnRev (OUT_C);
Wait (39);
Off (OUT_A+OUT_C);
//TURN
OnFwd (OUT_A+OUT_C);
Wait (x);
Off (OUT_A+OUT_C);
x=215;
//PEN DOWN
OnFwd (OUT_B);
Wait (20);
Off (OUT_B);
} //REPEAT FINISH
//GO WRITING
OnFwd (OUT_A);
OnRev (OUT_C);
Wait (126);
Off (OUT_A+OUT_C);
//PEN UP
OnRev (OUT_B);
Wait (20);
Off (OUT_B);
//TURN
OnFwd (OUT_A+OUT_C);
Wait (196);
Off (OUT_A+OUT_C);
//GO
OnFwd (OUT_A);
OnRev (OUT_C);
Wait (127);
Off (OUT_A+OUT_C);
//TURN
OnFwd (OUT_A+OUT_C);
Wait (300);
Off (OUT_A+OUT_C);
//PEN DOWN
OnFwd (OUT_B);
Wait (20);
Off (OUT_B);
//GO WRITING
OnFwd (OUT_A);
OnRev (OUT_C);
Wait (169);
Off (OUT_A+OUT_C);
}
『斗』という漢字を書くプログラム完成版(サブルーチン、関数で書き換えた)†
// 作成者:山崎 高橋 今西
// 作成日:2005-11-1
// 変更日:2005-11-14
// 変更点:関数、サブルーチンの使用
//GOの関数
void go(int g)
{
OnFwd (OUT_A);
OnRev (OUT_C);
Wait (g);
Off (OUT_A+OUT_C);
}
//PEN UPのサブルーチン
sub pen_up()
{
OnRev (OUT_B);
Wait (20);
Off (OUT_B);
}
//PEN DOWNのサブルーチン
sub pen_down()
{
OnFwd (OUT_B);
Wait (20);
Off (OUT_B);
}
//TURN leftの関数
void turn_left(int l)
{
OnFwd (OUT_A+OUT_C);
Wait (l);
Off (OUT_A+OUT_C);
}
//TURN rightの関数
void turn_right(int r)
{
OnRev (OUT_A+OUT_C);
Wait (r);
Off (OUT_A+OUT_C);
}
//ここからメインの処理
task main ()
{
int x = 140; //repeat1回目のTURN left時間をrepeat前に代入
repeat (2)
{
go(20); //GO WRITING(左上の点から。スタート時はペンが下りています。)
pen_up(); //PEN UP
turn_right(140); //TURN right
go(39); //GO (2個目の点に移動)
turn_left(x); //TURN left(位置につく 変数xは先に代入済み)
x = 215; //2回目用のTURN left時間
pen_down(); //PEN DOWN
} //repeatで左下の点を書く
go(126); //GO WRITING(横棒)
pen_up(); //PEN UP
turn_left(196); //TURN left
go(127); //GO (縦棒に移動)
turn_left(300); //TURN left(位置につく)
pen_down(); //PEN DOWN
go(169); //GO WRITING(縦棒)
}
難しかった点†
- 重心の位置がうまくわからず、回転する時の中心に誤差がでやすかった。
- repeatの1回目と2回目でTURN時間を変えるのが大変だった。
工夫した点†
- ペンの上下を操作する部分をシンプルにしたことで確実な動作ができた。
- 繰り返しのあとの回転に変数を使ってみた。
- サブルーチン、関数を使ったことで処理がわかりやすくなり、細かい変更も簡単にできるようになった。
反省点†
- PEN UP等の同じ処理はサブルーチンを使えば良かった。(後からサブルーチン、関数を使って書き換えました。)
コメントはこちらまで†
- サブルーチンや関数を使うと、どのくらい簡明なプログラムになるか、ぜひ試してください。 -- 松本(教員)
- アドバイスありがとうございます。早速作ってみます。 -- 山崎
上へ
戻る
tya2
0
&counter([total|today|yesterday]);