[[2004/C1/練習問題]]&br; 担当:ふじさわ でんでん1年 投票 #vote(たいへんよくできました☆[0],かなりふつうです○[0],もうすこしがんばりましょう△[102]) 前置き これはまず最初に一回転してもっとも明るい方向(懐中電灯の方向)&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;