プログラミング基礎 II

第七回 (2010年11月15日)

配列と範囲

http://www.sw.it.aoyama.ac.jp/2010/PB2/lecture7.html

Martin J. Dürst

AGU

© 2006-10 Martin J. Dürst 青山学院大学

目次

前回のまとめ

前回の演習 1

提出: 11月 12日 (金曜日) 22:00 までに Moodle に famous_while.rb として投稿

正解例: 都合により削除

前回の演習 2

提出: 11月 12日 (金曜日) 22:00 までに Moodle に famous_sort.rb として投稿

正解例: 都合により削除

while の除去

(while は多くのプログラミング言語ではよく使用されるが、Ruby らしいプログラムでは使用しない方がよい)

famous_sort.rbwhile は除去可能:

input_data_array = []
while input_line = gets
  input_data_array << input_line.chomp.split(', ')
end

input_lines = readlines
input_data_array = input_lines.collect do |input_line|
  input_line.chomp.split(', ')
end

readlines

Array#collect

(Array#collect はある配列 (Array) に使えるメソッド collect の意味)

応用例: [1, 2, 3, 4].collect do |n| n+1 end

[2, 3, 4, 5]

配列の便利なメソッド

範囲

(Range)

演習 1

(提出不要)

次のプログラムの一行一行の結果を考えて、irb で確認しなさい。

[1, 2, 3, 4, 5].collect do |n| n*n end

[1, 2, 3, 4, 5].map do |n| n.to_s * n end

(1..5).map do |n| n.to_s * (6-n) end.join

(1..5).map do |n| ' '*n + n.to_s * (6-n) end.join("\n")

"abcdefghijk".split('').shuffle.join

演習 2

提出: 11月19日 (金曜日) 22:00 までに Moodle に mountain.rb として投稿

最初の行が '*' 一文字、次の行が '*' 二文字などで30行の山を出力するプログラムを作成しなさい。

範囲、Array#collect などを活用しなさい。全体を用意した後に、一個の puts で出力しなさい。while は禁止。

演習 3

提出: 11月19日 (金曜日) 22:00 までに Moodle に pattern.rb として投稿

演習 2 よりもっと面白い模様を作りなさい。

プログラムの先頭にコメントで仕組を説明しなさい。

「Start Command Prompt with Ruby」のウィンドーバーの右クリックのプロパティでフォントをできるだけ小さく、レイアウトでウィンドウの幅や高さをできるだけ大きくした方が面白い模様が作れる。

二人以上の学生から同様の模様を作るプログラムが提出されているときに減点の対象となる。