[ プログラミング演習(Ruby) >  プログラミング演習(Ruby) 課題(2025) > [課題05] 正三角形で構成される図形 ]

[課題05] 正三角形で構成される図形

課題

タートルグラフィクスで次のように正三角形で構成される図形を描くプログラムを作成して提出してください.
三角形で構成される図形

この課題ではメソッドを定義,利用してプログラムが簡潔になるように工夫してください. 描画の手順は適宜決めてください.どこからどう描いても構いません.

補足

プログラムを作成するにあたって,次のことを考慮するとよいでしょう.

プログラムテンプレート

次に示すプログラムのテンプレート(雛型)を使ってください. このプログラムは名前を適宜変えた上で保存して利用してください.

描画手順のコメント

プログラムの先頭の「=begin」から「=end」までの間に,描画手順の簡単な説明をコメントとして,追加で書いてください.


=begin

所属:     
氏名:     
学生番号:
難易度(5段階評価):

感想など(任意)

図形の描画手順:

=end

図形全体のどの位置から描き始めて,どのような三角形をどのような順に描いていくのかを説明してください. 説明の記述のために次のような用語を導入しておきます.

メソッド定義の作法

プログラムでは,まず最初に「draw」メソッドを定義してから,他のメソッドを定義することを勧めます. 一般には一つのメソッドが階層的に下請けのメソッドを利用するように定義されている場合には,メソッド定義はトップダウンで並べるようにする, つまり階層で上位のメソッドを先に定義して,その後ろに下位のメソッドを定義することを勧めます.


class Turtle
  def draw

    double_box(a,b) # double_boxメソッドを利用

  end

  # double_boxメソッドの定義
  def double_box(w,h)
    w2 = w/2; h2 = h/2
    box(w,h)   # boxメソッドを利用
    box(w2,h2) # boxメソッドを利用
  end

  # boxメソッドの定義
  def box(w,h)

  end
end

Rubyでは,メソッドの内部にメソッドを定義しないようにします. 定義を入れ子構造にすることは文法上は可能ですが,Rubyでは意味がありません.


  def foo(x)
    # fooの中でbarを定義→×
    def bar(y) 

    end
  end

定義を入れ子にしても,内部のメソッドでは外部のメソッドのローカル変数は参照できません.


  def foo(x)
    a = x + 1
    def bar(y) 
      z = y + a # このaは未定義
      2*z
    end
    bar(x*x)
  end

  foo(2) # Error!

サンプルプログラム

メソッドを用いたサンプルプログラムを用意しています(サンプルコード>メソッド).

これらをブラウザの画面で開いたときに文字化けしてしまう場合には, ダウンロードしてEmacs等で開いてみてください.

Tips

以下,課題に取り組むにあたって,知っておくとよさそうなtips(hint)を示します.

[ プログラミング演習(Ruby) >  プログラミング演習(Ruby) 課題(2025) >  [課題05] 三角形で構成される図形 ]