[ プログラミング演習(Ruby) >  プログラミング演習(Ruby) 課題(2024) >  [課題32] 最終自由制作 ]

[課題32] 最終自由制作

課題

自由に課題を設定してプログラムを作成して提出してください.

授業で学習したトピックを網羅する必要はありません. タートルグラフィクスを利用したプログラム,利用しないプログラム, GUIを備えたプログラム,そうでないプログラム,いずれでも構いません. また授業で扱っていないトピックを含んでいても構いません.

目次

  1. 作成するプログラムの説明
  2. 技術情報
    1. ハッシュ
    2. メソッドのさまざまな引数定義
    3. 配列の展開
    4. 乱数
    5. GUIライブラリ(Gtk2)

作成するプログラムの説明

次の項目を含んだ説明文を必要事項とともにプログラムの先頭に入れて下さい.

この説明文は次のように=begin...=endの間に必要事項に続いて記述して下さい.


=begin

所属:     
氏名:     
学生番号: 

概要:
操作法:
動機:
アピールポイント:
自己評価:
改良すべき点:

=end

技術情報

以下では自由制作で使う可能性のある技術要素をいくつか紹介します.

Rubyの公式マニュアルも示しておきます.

ハッシュ

ハッシュ(Hash)は,「キー」と「値」を対応させた構造をもっていて, キーによって,それに対応させた値を参照することができます. ハッシュは整数以外の値を添字とする配列のように使えます.



  # ハッシュの定義  
  ccode = { :black=>0,:white=>1 }

  # ハッシュの要素の参照
  ccode[:black] # ==> 0 
  ccode[:white] # ==> 1

  # 要素の追加
  ccode[:red] = 2 
  ccode[:red] # ==> 2

  # 値が存在しないキーに対してはnilが得られる
  # (別の値が得られるように設定することも可能)
  ccode[:blue] # ==> nil

  ccode.each_pair do |key,val| # 各要素についてのイテレータ(each_pairでなくてeachでも同じ)
    puts "#{key} #{val}\n"
  end
  # ==>
  # black 0
  # white 1
  # red 2


詳細についてはRuby公式マニュアルの「Hash」を参照してください.

メソッドのさまざまな引数定義

Rubyのメソッドの引数はさまざまなスタイルで定義できます. 以下では例を紹介します. 他にもキーワード引数,ブロック引数なども定義できますが,ここでは省略します. 詳細は Ruby公式マニュアルの「クラス/メソッド定義」を参照して下さい.

可変個の引数をとるメソッドの定義

可変個の引数をとるメソッドを定義できます. (基本的な定義の方法として)最後の引数に*をつけると,残りの引数を全てまとめて一つの配列として受け取ります.


  # 1個以上の引数をとる
  def foo(x,*y)
    s = 0
    y.each do |v| 
      s = s + v
    end
    s*x
  end

  foo(2,1,5,3) # ==> x=2,y=[1,5,3], (1+5+3)*2 ==> 18

メソッドの引数のデフォルト値の定義

メソッドの引数に対して, デフォルト値(指定を省略したときの値)を予め定義しておくことができます.


  def bar(x,y=2) # yのデフォルト値=2
    x**y
  end

  def baz(x,y=3,z=4) # yのデフォルト値=3,zのデフォルト値=4
    (x**y) % z
  end

  def ban(a=nil)
    (a == nil)
  end

  bar(2,3)   # ==> 8  (x=2,y=3)
  bar(4)     # ==> 16 (x=4,y=2) 

  baz(3,5,7) # ==> 5  (x=3,y=5,z=7)
  baz(3,5)   # ==> 3  (x=3,y=5,z=4)
  baz(5)     # ==> 1  (x=5,y=3,z=4)

  ban()      # ==> true  (a=nil)
  ban(true)  # ==> false (a=true)

デフォルト値付きの引数は(可変個引数の指定を除いて)最後にまとめて指定するのが基本です.

配列の展開

メソッドの引数などで配列を要素の列に展開して利用することができます.


  def add(x,y)
    x+y
  end

  s = [3,5]
  a = add(*s) # a = add(3,5) == 8

  t = [1,*s] # t == [1, 3, 5]

乱数

プログラムにランダム性を取り入れるにはrandメソッドを利用します.



  # rand(n)  nが正の整数のとき,0〜n-1のいずれかの整数をランダムに返す.
  # rand(0)  0以上1未満の小数点数をランダムに返す.

  b = rand(2) # b ∈ {0,1}
  x = rand(0) # 0≦x<1

  # rand(a..b)  a,bが正の整数でa≦bのとき,a以上b以下の整数をランダムに返す.
  m = rand(1..3) # m ∈ {1,2,3}
  

GUIライブラリ(Gtk2)

この授業のタートルグラフィクス,ReversiのGUIを構築するのに利用しているGUIライブラリがGtk2です.

サンプルプログラムを用意しています.

[ プログラミング演習(Ruby) >  プログラミング演習(Ruby) 課題(2024) >  [課題32] 最終自由制作 ]