〜第1回課題〜

四角形をかく

プログラム

 task main()
 {
     OnFwd(OUT_A);  //前進
     OnRev(OUT_C);
     Wait(300);
     
     OnFwd(OUT_A);  //90度回転
     OnFwd(OUT_C);
     Wait(150);
     
     OnFwd(OUT_A);  //前進
     OnRev(OUT_C);
     Wait(300);
     
     OnFwd(OUT_A);  //90度回転
     OnFwd(OUT_C);
     Wait(150);
     
     OnFwd(OUT_A);  //前進
     OnRev(OUT_C);
     Wait(300);
     
     OnFwd(OUT_A);  //90度回転
     OnFwd(OUT_C);
     Wait(150);
     
     OnFwd(OUT_A);  //前進
     OnRev(OUT_C);
     Wait(300);
     
     Off(OUT_A+OUT_C);  //停止
 }

感想

初めてかいたプログラムなので無駄が多く長い。

四角形をかく(書き直し)

プログラム

 task main()
 {
     repeat(3){          //前進+90度回転を3回繰り返す
         OnFwd(OUT_A);
         OnRev(OUT_C);
         Wait(300);
         
         OnFwd(OUT_A);
         OnFwd(OUT_C);
         Wait(150);
     }
     
     OnFwd(OUT_A);  //前進
     OnRev(OUT_C);
     Wait(300);
     
     Float(OUT_A+OUT_C);  //停止
 }

感想

はじめに書いたプログラムと比べるとずいぶんスッキリした。

『右』をかく

プログラム

 task main()
 {
     OnRev(OUT_B);  //ペンをおろす
     Wait(50);
     Off(OUT_B);
     
     OnFwd(OUT_A);  //右の1画目をかく
     OnRev(OUT_C);
     Wait(150);
     Off(OUT_A+OUT_C);
     
     OnFwd(OUT_B);  //ペンをあげる
     Wait(70);
     Off(OUT_B);
     
     OnFwd(OUT_A);  //右の2画目の始点へ移動
     OnRev(OUT_C);
     Wait(100);
     Off(OUT_A+OUT_C);
     
     OnFwd(OUT_A);
     Wait(100);
     Off(OUT_A);
     
     OnFwd(OUT_C);
     Wait(400);
     Off(OUT_A+OUT_C);
     
     OnRev(OUT_A);
     OnFwd(OUT_C);
     Wait(50);
     Off(OUT_A+OUT_C);
     
     OnRev(OUT_B);  //ペンをおろす
     Wait(50);
     Off(OUT_B);
     
     OnFwd(OUT_A);  //右の2画目をかく
     OnRev(OUT_C);
     Wait(130);
     Off(OUT_A+OUT_C);
     
     OnFwd(OUT_B);  //ペンをあげる
     Wait(70);
     Off(OUT_B);
     
     OnFwd(OUT_A);  //右の3画目の始点へ移動
     OnRev(OUT_C);
     Wait(50);
     Off(OUT_A+OUT_C);
     
     OnFwd(OUT_A);
     OnRev(OUT_C);
     Wait(80);
     Off(OUT_A+OUT_C);
     
     OnRev(OUT_A);
     Wait(390);
     Off(OUT_A);
     
     OnRev(OUT_A);
     OnFwd(OUT_C);
     Wait(125);
     Off(OUT_A+OUT_C);
     
     OnFwd(OUT_A);
     OnRev(OUT_C);
     Wait(100);
     Off(OUT_A+OUT_C);
     
     OnRev(OUT_B);  //ペンをおろす
     Wait(50);
     Off(OUT_B);
     
     OnFwd(OUT_A);  //右の3画目をかく
     OnRev(OUT_C);
     Wait(70);
     Off(OUT_A+OUT_C);
     
     OnFwd(OUT_B);  //ペンをあげる
     Wait(70);
     Off(OUT_B);
     
     OnFwd(OUT_A);  //右の4画目の始点へ移動
     OnRev(OUT_C);
     Wait(190);
     Off(OUT_A+OUT_C);  
     
     OnFwd(OUT_C);
     Wait(450);
     Off(OUT_C);
     
     OnRev(OUT_A);
     OnFwd(OUT_C);
     Wait(30);
     Off(OUT_A+OUT_C);
     
     OnRev(OUT_B);  //ペンをおろす
     Wait(70);
     Off(OUT_B);
     
     OnFwd(OUT_A);  //右の4画目の一部をかく
     OnRev(OUT_C);
     Wait(100);
     Off(OUT_A+OUT_C);
     
     OnFwd(OUT_B);  //ペンをあげる
     Wait(80);
     Off(OUT_B);
     
     OnFwd(OUT_A);  //4画目の残りをかくための始点へ移動
     OnRev(OUT_C);
     Wait(220);
     Off(OUT_A+OUT_C);
     
     OnRev(OUT_A);
     Wait(400);
     Off(OUT_A);
     
     OnRev(OUT_A);
     OnFwd(OUT_C);
     Wait(65);
     Off(OUT_A+OUT_C);
     
     OnRev(OUT_B);  //ペンをおろす
     Wait(70);
     Off(OUT_B);
     
     OnFwd(OUT_A);  //4画目の残りをかく
     OnRev(OUT_C);
     Wait(70);
     Off(OUT_A+OUT_C);
     
     OnFwd(OUT_B);  //ペンをあげる
     Wait(70);
     Off(OUT_B);
     
     OnFwd(OUT_A);  //右の5画目の始点へ移動
     OnRev(OUT_C);
     Wait(220);
     Off(OUT_A+OUT_C);
     
     OnRev(OUT_A);
     Wait(420);
     Off(OUT_A);
     
     OnFwd(OUT_A);
     OnRev(OUT_C);
     Wait(40);
     Off(OUT_A+OUT_C);
     
     OnRev(OUT_B);  //ペンをおろす
     Wait(50);
     Off(OUT_B);
     
     OnRev(OUT_A);  //右の5画目をかく
     OnFwd(OUT_C);
     Wait(100);
     
     Off(OUT_A+OUT_C);  //停止
     
     OnFwd(OUT_B);  //ペンをあげる
     Wait(70);
     Off(OUT_B);
 }

プログラム(書き直し)

 sub pen_up()
 {OnFwd(OUT_B);
  Wait(70);
  Off(OUT_B);
 }
 
 sub pen_down()
 {OnRev(OUT_B);
  Wait(50);
  Off(OUT_B);
 }
 
 void go(int t)
 {OnFwd(OUT_A);
  OnRev(OUT_C);
  Wait(t);
  Off(OUT_A+OUT_C);
 }
 
 void back(int t)
 {OnRev(OUT_A);
  OnFwd(OUT_C);
  Wait(t);
  Off(OUT_A+OUT_C);
 }
 
 void back_right(int t)
 {OnFwd(OUT_C);
  Wait(t);
  Off(OUT_C);
 }
 
 void go_left(int t)
 {OnFwd(OUT_A);
  Wait(t);
  Off(OUT_C);
 }
 
 void back_left(int t)
 {OnRev(OUT_A);
  Wait(t);
  Off(OUT_A);
 }
 
 task main()
 {
     pen_down();  //ペンをおろす
     go(150);  //右の1画目をかく
     pen_up();  //ペンをあげる
     go(100);  //右の2画目の始点へ移動
     go_left(100);
     back_left(400);
     back(50);
     pen_down();  //ペンをおろす
     go(130);  //右の2画目をかく
     pen_up();  //ペンをあげる
     go(130);  //右の3画目の始点へ移動
     back_left(390);
     back(125);
     go(100);
     pen_down();  //ペンをおろす
     go(70);  //右の3画目をかく
     pen_up();  //ペンをあげる
     go(190);  //右の4画目の始点へ移動
     back_right(450);
     back(30);
     pen_down();  //ペンをおろす
     go(100);
     pen_up();  //ペンをあげる
     go(220);  //4画目の残りをかくための始点へ移動
     back_left(400);
     back(65);
     pen_down();  //ペンをおろす
     go(70);  //4画目の残りをかく
     pen_up();  //ペンをあげる
     go(220);  //右の5画目の始点へ移動
     back_left(420);
     go(40);
     pen_down();  //ペンをおろす
     back(100);  //右の5画目をかく
     pen_up();  //ペンをあげる
 }

感想

同じプログラムであっても書く度に形が変わり大変だった。 ペンをアームに固定するのに苦労した。ペンをアームに固定するためにしっかりと固定できる太さのペンを選んだり、いろいろなパーツを組み合わせてきつく締めることでなんとか解決できた。

コメントはこちらへ

  • 苦労した点について、その解決方法なども簡単に紹介してください。 -- 松本(教員)? 2005-11-17 (木) 23:54:55


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2005-12-06 (火) 01:04:38