提出課題:04回目レポート
本文:
1.
(1)を2番までしました
2.
#!/usr/koeki/bin/ruby
# -*- coding: utf-8 -*-

require 'kconv'

soft = Hash.new

File.open("softball.txt","r:utf-8") do |mo|
while line = mo.gets
  if /(\S+)\s+(\d+)\s+(\d+)\s+(\d+)/ =~ line
    
    soft[$1] = [$2.to_f,$3.to_f,$4,$2.to_f/($2.to_f + $3.to_f)]
    
  end
end
end



print"何に基づいて並び替えをしますか?\n"
print"勝ち数 = 1, 負け数 = 2, 引き分け数 = 3, 勝率 = 4\n"
what = gets.chomp!.to_i
print"昇順したい場合 = 1, 降順したい場合 = 2 を入力してください。\n"
how = gets.chomp!.to_i



print"--チーム名------------+-勝ち-+-負け-+-引分--+-勝率---\n"




if what == 1 && how == 1

  for team in soft.keys.sort {|a, b| soft[a][0] <=> soft[b][0]}

  result =  sprintf("%-25s%d%7d%7d%12.3f\n",
              team.toeuc.force_encoding("binary"),
              soft[team][0], soft[team][1], soft[team][2],
              soft[team][0]/(soft[team][0]+soft[team][1])).toutf8

  puts result
  end
  
  

  elsif what == 1 && how == 2
  
  for team in soft.keys.sort {|a, b| soft[b][0] <=> soft[a][0]}

  result =  sprintf("%-25s%d%7d%7d%12.3f\n",
              team.toeuc.force_encoding("binary"),
              soft[team][0], soft[team][1], soft[team][2],
              soft[team][0]/(soft[team][0]+soft[team][1])).toutf8
  puts result
  end
  
  

  elsif what == 2 && how == 1

    for team in soft.keys.sort {|a, b| soft[a][1] <=> soft[b][1]}

  result =  sprintf("%-25s%d%7d%7d%12.3f\n",
              team.toeuc.force_encoding("binary"),
              soft[team][0], soft[team][1], soft[team][2],
              soft[team][0]/(soft[team][0]+soft[team][1])).toutf8
  puts result
    end

  

  elsif what == 2 && how == 2
  
  for team in soft.keys.sort {|a, b| soft[b][1] <=> soft[a][1]}

  result =  sprintf("%-25s%d%7d%7d%12.3f\n",
              team.toeuc.force_encoding("binary"),
              soft[team][0], soft[team][1], soft[team][2],
              soft[team][0]/(soft[team][0]+soft[team][1])).toutf8
  puts result
  end



  elsif what == 3 && how == 1

    for team in soft.keys.sort {|a, b| soft[a][2] <=> soft[b][2]}

  result =  sprintf("%-25s%d%7d%7d%12.3f\n",
              team.toeuc.force_encoding("binary"),
              soft[team][0], soft[team][1], soft[team][2],
              soft[team][0]/(soft[team][0]+soft[team][1])).toutf8
  puts result
    end


    elsif what == 3 && how == 2
  
  for team in soft.keys.sort {|a, b| soft[b][2] <=> soft[a][2]}

  result =  sprintf("%-25s%d%7d%7d%12.3f\n",
              team.toeuc.force_encoding("binary"),
              soft[team][0], soft[team][1], soft[team][2],
              soft[team][0]/(soft[team][0]+soft[team][1])).toutf8
  puts result
  end


    elsif what == 4 && how == 1

      for team in soft.keys.sort {|a, b| soft[a][3] <=> soft[b][3]}

 result =  sprintf("%-25s%d%7d%7d%10.3f\n",
               team.toeuc.force_encoding("binary"),
               soft[team][0], soft[team][1], soft[team][2],
               soft[team][0]/(soft[team][0]+soft[team][1])).toutf8
  puts result
      end


    else

      for team in soft.keys.sort {|a, b| soft[b][3] <=> soft[a][3]}

  result =  sprintf("%-25s%d%7d%7d%12.3f\n",
              team.toeuc.force_encoding("binary"),
              soft[team][0], soft[team][1], soft[team][2],
              soft[team][0]/(soft[team][0]+soft[team][1])).toutf8
  puts result
  end
     
end

3.
実行結果1
何に基づいて並び替えをしますか?
勝ち数 = 1, 負け数 = 2, 引き分け数 = 3, 勝率 = 4
1
昇順したい場合 = 1, 降順したい場合 = 2 を入力してください。
1
--チーム名------------+-勝ち-+-負け-+-引分--+-勝率---
クリケッツ               50     83      3       0.376
スネイルズ               52     82      2       0.388
モスキートーズ           65     65      6       0.500
ブックウォームス         75     52      9       0.591
ドラゴンフライズ         77     51      8       0.602
アンツ                   78     53      5       0.595

実行結果2
何に基づいて並び替えをしますか?
勝ち数 = 1, 負け数 = 2, 引き分け数 = 3, 勝率 = 4
4
昇順したい場合 = 1, 降順したい場合 = 2 を入力してください。
1
--チーム名------------+-勝ち-+-負け-+-引分--+-勝率---
クリケッツ               50     83      3     0.376
スネイルズ               52     82      2     0.388
モスキートーズ           65     65      6     0.500
ブックウォームス         75     52      9     0.591
アンツ                   78     53      5     0.595
ドラゴンフライズ         77     51      8     0.602

4.
(4)文字コードを変換をするkconvを呼び出す
(6)softはハッシュであることを表す
(8~10)open メゾットでファイルを開き、必要な情報を出す
(12)(8)で出した情報をsoftの配列に代入する
         配列最後の$2.to_f/($2.to_f + $3.to_f)は勝率でも並び替えができるように付け加えた
(20~24)何でどのように並び替えをするか入力してもらう
{
(33)上記の質問で1(勝ち数)かつ、1(昇順)を選んだ場合
(35)配列のバリュー0番目(勝ち数)をsortを使って昇順に並び替える
(37~40)いろいろ文字コードを変換したあと、最後にute-8に戻してresult に代入する
}
あとは{  }の説明と同様、それぞれ対応して表示されるようにした

5.
勝率で並び替えができるようにするのが一番難しく、プログラムの中身を一つずつ理解をしてやっとわかった。
最初はsortの[]の中を%dなどにして、一つで対応できるようにしたかったが、よくわからないエラーが起きてしまったので、if を使ってそれぞれに対応させて表示させた。プログラムがとても長くなってしまったので、解決方法があれば知りたいです。



添付:
softball2.rb