#ref(IMG_0300.JPG)
-書く度に角度が微妙に異なるミステリー
*『斗』という漢字を書くプログラム試作 [#xd098604]
 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);
 }
*『斗』という漢字を書くプログラム完成版(サブルーチン、関数で書き換えた) [#t4e68386]
 
 //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(縦棒)
 }
*&size(25){難しかった点}; [#mecea831]
-重心の位置がうまくわからず、回転する時の中心に誤差がでやすかった。
-repeatの1回目と2回目でTURN時間を変えるのが大変だった。
*&size(25){工夫した点}; [#c1d811a4]
-ペンの上下を操作する部分をシンプルにしたことで確実な動作ができた。
-繰り返しのあとの回転に変数を使ってみた。
-サブルーチン、関数を使ったことで処理がわかりやすくなり、細かい変更も簡単にできるようになった。
*&size(25){反省点}; [#hed8581f]
-PEN UP等の同じ処理はサブルーチンを使えば良かった。(後からサブルーチン、関数を使って書き換えました。)
*&size(25){感想}; [#v55f7037]
-素晴らしい作品が書きあがった。あっぱれ。

*&size(20){コメントはこちらまで}; [#eb5d8580]
-サブルーチンや関数を使うと、どのくらい簡明なプログラムになるか、ぜひ試してください。 -- [[松本(教員)]] &new{2005-11-11 (金) 22:31:50};
-アドバイスありがとうございます。早速作ってみます。 -- [[山崎]] &new{2005-11-12 (土) 00:38:11};

#comment
[[上へ>2005/C6/課題1]] 
[[戻る>2005/C6]] 

RIGHT:
tya&counter(today);
&counter(yesterday);
&counter(all);
//11月16より

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS