プログラミング基礎 II

第六回 (2011年11月7日)

繰返し

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

Martin J. Dürst

AGU

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

目次

前回のまとめ

前回の演習・宿題

提出: 11月 4日 (金曜日) 22:00 までに Moodle にファイル famous.txt を処理するプログラム famous.rb を作成、投稿:

(プログラムの呼び出しは ruby -n famous.rb <famous.txt)

正解例: famous.rb (出力の文書は日本語でも結構)

前回の演習の単純化

発展的可決方法:

 

条件の組み合わせ

データの整理

繰り返しの目的と概要

明示的な繰返し

一般的な形:

while 条件
  繰り返す処理
end

応用例 (1):

while input_line = gets
  if input_line.chomp.split(', ').length < 8
    puts 'Not enough input fields'
  end
end

応用例 (2):

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

[<< は配列への要素の追加]

二重配列

配列の配列は二重配列という

実例:

[ ['浅田 真央', 'アサダ マオ', '21', '163', '43', 'フィギュアスケート選手', 'トリプルフリップ', 'ジグソーパズル'],
  ['安藤 美姫', 'アンドウ ミキ', '23', '162', '50', 'フィギュアスケート選手', '3回転ルッツ・3 回転ループのコンビネーションジャンプ', 'ネイル'],
  [...]
]

イテレータ

一般的な形:

配列.method do |変数|
  処理 # 変数を使いながら
end

doend の間のものは「 do ブロック」または「ブロック」 (block) と呼ぶ

 

イテレータによる繰返し

メソッド名は each

実例:

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.each do |number|
  puts number**2
end

応用例:

sorted_data_array.each do |fields|
  name, yomi, ... = fields
  ...
  puts "#{name}, hobby: #{hobby}"
end

 

イテレータによる並変え

メソッド名は sort_by; do ブロックの最後の値で並変え

応用例:

sorted_data_array = input_data_array.sort_by do |fields|
  name, yomi, ... = fields
  height_text.to_i # 身長による並び変え
end

演習 1

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

演習 2

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

[参考: BMI は Body Mass Index で、「太り具合」を数値で表現。計算式は weight / (height/100.0)2。]