プログラミング基礎 II

第七回 (2011年11月14日)

配列と範囲

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

Martin J. Dürst

AGU

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

目次

前回のまとめ

前回の演習 1

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

正解例: famous_while.rb

前回の演習 2

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

正解例: 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")

(1..10).select do |n| n%3 = 0 end

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

 

演習 2

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

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

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

演習 3

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

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

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

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

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