- 追加された行はこの色です。
- 削除された行はこの色です。
[[2004/C1/練習問題]]
[[2004/C1/練習問題]]&br;
担当:ふじさわ でんでん1年
担当:ひかり
投票
#vote(たいへんよくできました☆[1],かなりふつうです○[1],もうすこしがんばりましょう△[119])
前置き
これはまず最初に一回転してもっとも明るい方向(懐中電灯の方向)&br;
を探し、次に懐中電灯の光を追いかけて進むプログラムです。光を&br;
見失うと周囲を見回し、再度光を追います。&br;
プログラム
int t=0,y=0;
void go_straight()
OnFwd(OUT_A+OUT_C);
Wait(t);
Off(OUT_A+OUT_C);
}
void Light()
{
int tmax=0,tpoint=0,lightmax=0;
SetSensor(SENSOR_1, SENSOR_LIGHT);
if(y == 0){
ClearTimer(0);
OnFwd(OUT_A);
OnRev(OUT_C);
Wait(t);
if(SENSOR_1 >= lightmax){
lightmax=SENSOR_1;
tmax=Timer(0);
}
if(SENSOR_1 >= 40){
tpoint=t-tmax;
OnFwd(OUT_C);
OnRev(OUT_A);
Wait(t);
Off(OUT_A+OUT_C);
}
}else{
ClearTimer(0);
OnFwd(OUT_C);
OnRev(OUT_A);
Wait(t);
if(SENSOR_1 >= lightmax){
lightmax=SENSOR_1;
tmax=Timer(0);
}
if(SENSOR_1 >= 40){
tpoint=t-tmax;
OnFwd(OUT_C);
OnRev(OUT_A);
Wait(t);
Off(OUT_A+OUT_C);
}
}
}
sub run()
{
int x=0;
SetSensor(SENSOR_1, SENSOR_LIGHT);
while(true){
if(SENSOR_1 >= 40){
x=0;
t=300;
go_straight();
}else if((SENSOR_1 < 40)&&(x == 0)){
t=150;
Light();
y++;
t=300;
Light();
y--;
t=150;
Light();
x++;
}else{
t=340;
Light();
}
}
}
task main()
{
t=340;
Light();
if(SENSOR_1 >= 40){
run();
}
}
工夫したところ
一度光を見失ったときに、首を振りふたたび光を探すところです。&br;
グローバル変数の使いスイッチのような二つの状態を作るところが&br;
大変だった。松本先生はローカル変数のほうがいいと言っていたが&br;
、作り手が未熟なためローカル変数でプログラムが組めなかった。&br;