http://www.sw.it.aoyama.ac.jp/2011/PB2/lecture9.html
© 2011 Martin J. Dürst 青山学院大学
提出: 11月25日 (金曜日) 22:00 までに Moodle に
famous_def.rb
のファイルとして投稿
以前に famous_sort.rb として作ったプログラム (正解例でも可) で、BMI の計算の関数を追加し、この関数を利用しなさい。
正解例: famous_def.rb
提出: 11月25日 (金曜日) 22:00 までに Moodle に
chess_board.rb
のファイルとして投稿
次の模様を簡単に作れる関数を作りなさい (模様の各行は文字列で、模様全体は行を配列):
uniform(文字, 高さ,
幅)
:
高さ、幅の大きさの文字の長方形の模様empty(高さ, 幅)
:
高さ、幅の大きさの空 (スペースだけ) の模様glue_horizontal(左の模様,
右の模様)
:
二つの模様を左右につなぎ合わせた模様 (ヒント:
zip
, collect
)glue_vertical(上の模様,
下の模様)
:
二つの模様を上下につなぎ合わせた模様double_horizontal(模様)
:
同様の模様を左右に二つつなぎ合わせた模様double_vertical(模様)
:
同様の模様を上下に二つつなぎ合わせた模様この関数を使って、一マスが高さ5、幅8 のチェスボードを作成、画面に出力するプログラムを作りなさい。
ヒント:
empty
を uniform
を使って定義)正解例: chess_board.rb
(提出不要)
以前作った模様、知り合いなどが作った模様、これから作りたい模様が簡単で便利に作れる関数をいくつか考えなさい
(class)
Array
, String
,...require
が必要)
に更に多くのクラス(instance)
[1, 2, 3]
はクラス Array
のインスタンス'Hello!'
はクラス String
のインスタンス.class
で求めるputs 3.class.name
Fixnum
(fixed-length number、固定長数)puts Fixnum.class.name
Class
class クラス名 定義の詳細 end
class Person end
new_instance = クラス名.new
.new
メソッドは従来のクラスにも使用可能s = String.new('Hello!')
class Person end p = Person.new puts p
⇒ #<Person:0x2a1ac10>
(0x2a1ac10
はその都度違う16進法の番号)
puts p.class.name
⇒ Person
(instance variable)
@
で始まる@name
, @height
, @weight
(initialization)
initialize
メソッドで実行initialize
メソッドは Ruby が自動的に
.new
から呼ぶclass Person def initialize (name, height, weight) @name = name @height = height @weight = weight end end p = Person.new('青山 花子', 160, 50) puts p
⇒ #<Person:0x2b67418 @name="青山 花子", @height=160,
@weight=50>
12月 2日 (金曜日) 22:00 までに Moodle に classes.rb
のファイル名で投稿
今まで使ったできるだけ多くのクラスの名前を出力するプラグラムを作りなさい。
数では整数と実数、整数の場合に更に小さいものととても大きいもの
(例: 10**50
) を使ってみなさい。
整数の二種類のクラスの「境界線」の一番近い数を使いなさい。
(例えば irb
で試しながら境界線に近づくように試してみてください。)
12月 2日 (金曜日) 22:00 までに Moodle に
famous_class.rb
のファイル名で投稿
以前作った有名人のプログラム (正解例でも可能) に
Person
クラスを追加しなさい。
全体のデータは Person
の配列 (例:
famous_people
) として保管
入力の後、最初の10個のインスタンスを中身が見えるように
puts
で出力
「10個のインスタンス」では Ruby らしい繰り返しを使用
ヒント:
Person
の初期化は一行の入力からやった方がいいdef initialize (line)
)