< 作成したプログラム(1) > #!/usr/koeki/bin/ruby # -*- coding: utf-8 -*- total = 0 number = 1 print"8回分のレポートの合計得点を求めます。\n" while number <= 8 printf("%d回目のレポートの得点は?\n", number) score = gets.chomp!.to_f total += score number += 1 end printf("8回のテストの合計は%.1fです。\n",total) < プログラム(1)の実行結果 > sime{c115xxx}% ./report2a.rb [~/program] 8回分のレポートの合計得点を求めます。 1回目のレポートの得点は? 7.5 2回目のレポートの得点は? 7 3回目のレポートの得点は? 7 4回目のレポートの得点は? 7 5回目のレポートの得点は? 7.5 6回目のレポートの得点は? 7.5 7回目のレポートの得点は? 7 8回目のレポートの得点は? 7 8回のテストの合計は57.5です。 < プログラム(1)の説明 > 8回分のレポートの合計点数が知りたいので、numberの初めの値を1、繰り返し継続 条件をnumber <= 8とし、繰り返しを継続する条件whileとendを使う。 whileとendの中には以下の繰り返し行う処理を入力する。 printf("%d回目のレポートの得点は?\n", number) score = gets.chomp!.to_f total += score number += 1 ・上段2つについて getsメソッドにchomp!メソッドをつけ、バックスラッシュエヌを取り除く。そ の後、to_fメソッドをつけて、文字列を実数に変換する。よって、小数点以下 を含む数字を表示できる。 ・下段2つについて 代入演算子「+=」を使うことで、回数が加算されるとともに、合計に点数が加算 される。 ・printf("8回のテストの合計は%.1fです。\n",total) テストの合計は小数点が含まれるので%fにする。小数点第1位までにすると%.1f となる。 < 作成したプログラム(2) > #!/usr/koeki/bin/ruby # -*- coding: utf-8 -*- print"平成22年1月末日時点での酒田市民の年齢を調べます。\n" goukei=0 ninzu=1 while line = gets goukei += line.to_f ninzu +=1 heikin=goukei/ninzu end printf("平均年齢は%3.1f歳です。\n",heikin) < プログラム(2)の実行結果 > sime{c115xxx}% ./report2b.rb population.csv [~/program] 平成22年1月末日時点での酒田市民の年齢を調べます。 平均年齢は47.5歳です。 < プログラム(2)の説明 > 前提:平均年齢を調べるためには市民の年齢の合計と、全市民の人数が必要。 まず、while line=getsでデータを読みこめる間、繰り返し処理を行うようにす る。 ・goukei += line.to_f goukeiにlineの値を加算代入している。to_fを付けて文字列を実数に変換し、小 数点以下を含む数字を表示できるようにする。 ・ninzu +=1 人数を最初、ninzu=1と設定したので、while-endの繰り返しから抜けると繰り返 しの回数(人数)が代入される。 ・heikin=goukei/ninzu 年齢の平均(heikin)は、市民の年齢の合計(goukei)を全市民の人数(ninzu)で割 る(/)と求められる。 ・printf("平均年齢は%3.1f歳です。\n",heikin) 三桁まで表示するため%3、小数点を含む数字を使うのでf、小数点第一位までと いう縛りがあるので.1を付ける。よって%3.1fになる。 < 感想 > 説明を書きながら確かめていくことで、より理解できた。