2004/C1/練習問題

担当:ふじさわ でんでん1年
投票
選択肢 投票
たいへんよくできました☆ 1  
かなりふつうです○ 1  
もうすこしがんばりましょう△ 119  
前置き

これはまず最初に一回転してもっとも明るい方向(懐中電灯の方向)
を探し、次に懐中電灯の光を追いかけて進むプログラムです。光を
見失うと周囲を見回し、再度光を追います。

プログラム
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();
 }
}
工夫したところ

一度光を見失ったときに、首を振りふたたび光を探すところです。
グローバル変数の使いスイッチのような二つの状態を作るところが
大変だった。松本先生はローカル変数のほうがいいと言っていたが
、作り手が未熟なためローカル変数でプログラムが組めなかった。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2006-07-13 (木) 11:07:10 (4791d)