第6回のレポートより

参考として、良かったレポートを示す。

氏名: 		ocean
学籍番号: 	c111116
クラス: 	英語6
選択した番号: 	4番


1. 何番を選択したか
   
   4番

2. 作成したデータファイルとプログラム

#!/usr/koeki/bin/ruby
# coding: euc-jp

score1=[]    
score2=[]
name =[]
n = 0
sum1 = 0
sum2 = 0
while yomikomi = gets
  if /(\S+)\s+(\d+)\s+(\d+)/ =~ yomikomi
    name[n], score1[n], score2[n] = $1, $2.to_i , $3.to_i
    sum1 += score1[n]
    sum2 += score2[n]
    n += 1
  end
end

average1 = sum1.to_f/n
average2 = sum2.to_f/n

i = 0
print "--氏名------------+-国語得点-+-平均との差--+-数学得点-+-平均との差--\n"
while i < n
  printf("%-16s %5d  %10.1f %11d   %10.1f\n", 
         name[i], score1[i], score1[i]-average2, score2[i], score2[i]-average2)
  i += 1
end
   
     

3.プログラムを動かした結果(画面) 

--氏名------------+-国語得点-+-平均との差--+-数学得点-+-平均との差--
山田太郎                50       -22.5          70         -2.5
中町太郎                90        17.5          80          7.5
飯森花子                91        18.5          60        -12.5
鶴岡一人                60       -12.5          45        -27.5
酒田三吉                52       -20.5          82          9.5
三川一二三               12       -60.5          98         25.5


4.プログラムの説明

  まず初めに、処理する科目が国語と数学の2つのためそれらを区別するために score1,
  score2 とする。name は氏名を表す。
  [] は空の数列を意味し、配列の要素数を必要に応じて増やすことが出来る。
  n は人数を表し、n = 0 の 0 は添字を表している。つまり、
  
     n = 0 → 山田太郎
     n = 1 → 中町太郎
     n = 2 → 飯森花子
     n = 3 → 鶴岡一人
     n = 4 → 酒田三吉
     n = 5 → 三川一二三

  となる。
  sum は合計点数を表し、 n のときと同じように添字を使用する。
  国語と数学の2種類の得点があるため、 score と同様に sum1, sum2 とする。
  
  実行の前にデータファイルを読み込み、名前と得点を配列に記憶させるため、
  while yomikomi = gets となる。
  
  また、この中で名前と得点の切り出しを行うために正規表現のグルーピングを
  行う。そのためには、
   /(\S+)\s+(\d+)\s+(\d+)/ =~ yomikomi 
  となる。
  正規表現の意味として以下のようなものがある。

     \S → 空白文字以外の全ての文字にマッチ
     \s → あらゆる空白文字マッチ
     \d → 0〜9(半角)のどれかにマッチ

  name[n] は $1、 score1[n] は  $2.to_i 、score2[n] は  $3.to_i を表す。
  sum1 += score1[n] はすべての国語得点の合計を表し
  sum2 += score2[n] はすべての数学得点の合計を表す。
  n は一つずつ増えていくことを示すため、 n += 1 と表される。

  上の作業を行っていくと合計点と人数がわかるため、
  国語得点の平均点を計算するには、average1 = sum1.to_f/n
  数学得点の平均点を計算するには、average2 = sum2.to_f/n となる。

  i = 0 は i は変数とし、n = 0 と同じ働きをする。
  i = 0 以下は、結果がどのように表されるかの仕組みを示したものである。 

  そして、氏名・国語得点・国語得点の平均との差・数学得点・数学得点の
  平均との差を print を用いて表示させる。

  printf 内に示されている %-16s, %5d,  %11d は、結果にある数字の間隔を
  調節することが出来る。
  
  %10.1f は小数点第一位までを表すことができる。
     

5.参考文献

  広瀬雄二. "配列". 2012年度 基礎プログラミングI.
  http://roy.e.koeki-u.ac.jp/~yuuji/2012/pf1/06/array.html, 
  (参照 2012-06-02)

  広瀬雄二. "成績処理の例". 2012年度 基礎プログラミングI.
  http://roy.e.koeki-u.ac.jp/~yuuji/2012/pf1/06/score.html,
  (参照 2012-06-02)

  広瀬雄二. "正規表現の特殊文字". 2012年度 基礎プログラミングI.
  http://roy.e.koeki-u.ac.jp/~yuuji/2012/pf1/05/regex2.html,
  (参照 2012-06-02)

6.感想 
  
  テストの時に全く分からなかった部分が今回の授業でやっと理解できた。
  やはり、プログラミングについて一つ一つ説明するのは時間がかかり苦労した
  が、友人と協力しながら進めていくことができた。

本日の目次