2005/C6/課題1左

IMG_0300.JPG
  • 書く度に角度が微妙に異なるミステリー

『斗』という漢字を書くプログラム試作

//    作成者:山崎 高橋 今西
//    作成日: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等の同じ処理はサブルーチンを使えば良かった。(後からサブルーチン、関数を使って書き換えました。)

感想

  • 素晴らしい作品が書きあがった。あっぱれ。

コメントはこちらまで

  • サブルーチンや関数を使うと、どのくらい簡明なプログラムになるか、ぜひ試してください。 -- 松本(教員)? 2005-11-11 (金) 22:31:50
  • アドバイスありがとうございます。早速作ってみます。 -- 山崎? 2005-11-12 (土) 00:38:11

上へ  戻る 

tya1 0 1417

添付ファイル: fileIMG_0300.JPG 230件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2005-11-22 (火) 21:37:45 (5024d)