< 実施した課題の番号 > 1番
< 作成したプログラム >
#!/usr/koeki/bin/ruby
# -*- coding: utf-8 -*-
total = 0
number = 0
a = 0
score = []
print"出席回数を入力してください。\n"
syusseki= gets.chomp!.to_i
while true
printf("%d回目の得点は?(終了時exitと入力)\n", number+1)
score[a] = gets.chomp!
if score[a] == "exit"
break
end
if score[a].to_f < 0
print"マイナスはないよ!もう一度入力してください。\n"
redo
end
if score[a].to_f > 8
print"8点を超えました。これで良い場合ははいを、違う場合はいいえを入力してください。\n"
answer = gets.chomp!
if answer=="はい"
print"すごいですね!\n"
end
if answer=="いいえ"
print"もう一度入力してください。\n"
redo
end
end
total += score[a].to_f
if number >= 7
number += 1
break
end
number += 1
a += 1
end
printf("+ - - - - - - - - - - - - - - - +\n")
tensu = syusseki * 2
printf("出席点%17d点\n",tensu)
printf("+ - - - - - - - - - - - - - - - +\n")
printf("レポート\n")
a=0
total=0
while a < score.length
if score[a] == "exit"
break
end
printf("%d回目 %17.1f点\n",a+1,score[a])
total += score[a].to_f
a += 1
end
printf("+ - - - - - - - - - - - - - - - +\n")
tensu += total
heikin = total / number
printf("合計得点 %15.1f点\n",tensu)
printf("平均得点 %15.1f点\n",heikin)
if tensu>=90
print"評価 秀\n"
elsif tensu>=80
print"評価 優\n"
elsif tensu>=70
print"評価 良\n"
elsif tensu>=60
print"評価 可\n"
else
print"評価 不可\n"
end
printf("+ - - - - - - - - - - - - - - - +\n")
< プログラムの実行結果 >
sime{xxxxxxx}% ./report4a.rb [~/program]
出席回数を入力してください。
12
1回目の得点は?(終了時exitと入力)
8
2回目の得点は?(終了時exitと入力)
8
3回目の得点は?(終了時exitと入力)
8
4回目の得点は?(終了時exitと入力)
8
5回目の得点は?(終了時exitと入力)
8
6回目の得点は?(終了時exitと入力)
8
7回目の得点は?(終了時exitと入力)
8
8回目の得点は?(終了時exitと入力)
8
+ - - - - - - - - - - - - - - - +
出席点 24点
+ - - - - - - - - - - - - - - - +
レポート
1回目 8.0点
2回目 8.0点
3回目 8.0点
4回目 8.0点
5回目 8.0点
6回目 8.0点
7回目 8.0点
8回目 8.0点
+ - - - - - - - - - - - - - - - +
合計得点 88.0点
平均得点 8.0点
評価 優
+ - - - - - - - - - - - - - - - +
sime{xxxxxxx}% ./report4a.rb [~/program]
出席回数を入力してください。
12
1回目の得点は?(終了時exitと入力)
8
2回目の得点は?(終了時exitと入力)
7.5
3回目の得点は?(終了時exitと入力)
10
8点を超えました。これで良い場合ははいを、違う場合はいいえを入力してください。
はい
すごいですね!
4回目の得点は?(終了時exitと入力)
80
8点を超えました。これで良い場合ははいを、違う場合はいいえを入力してください。
いいえ
もう一度入力してください。
4回目の得点は?(終了時exitと入力)
8
5回目の得点は?(終了時exitと入力)
-8
マイナスはないよ!もう一度入力してください。
5回目の得点は?(終了時exitと入力)
8
6回目の得点は?(終了時exitと入力)
exit
+ - - - - - - - - - - - - - - - +
出席点 24点
+ - - - - - - - - - - - - - - - +
レポート
1回目 8.0点
2回目 7.5点
3回目 10.0点
4回目 8.0点
5回目 8.0点
+ - - - - - - - - - - - - - - - +
合計得点 65.5点
平均得点 8.3点
評価 可
+ - - - - - - - - - - - - - - - +
< プログラムの説明 >
今回のポイント 配列
配列とは、通常1つの値しか代入しておくことができない変数を拡張し、複数の
値を入れられるようにしたもの。
total = 0
number = 0
a = 0
score = [] # scoreは配列
x = []で、xが配列であることを宣言できる。つまり、ここではscoreが配列
であることを宣言している。インデックスはa。
while true
printf("%d回目の得点は?(終了時exitと入力)\n", number+1)
score[a] = gets.chomp!
if score[a] == "exit"
break
end
if score[a].to_f < 0
print"マイナスはないよ!もう一度入力してください。\n"
redo
end
if score[a].to_f > 8
print"8点を超えました。これで良い場合ははいを、違う場合はいいえを入力してください。\n"
answer = gets.chomp!
if answer=="はい"
print"すごいですね!\n"
end
if answer=="いいえ"
print"もう一度入力してください。\n"
redo
end
end
total += score[a].to_f
if number >= 7
number += 1
break
end
number += 1
a += 1
end
配列を用いることで、入力したすべての値を保持することができ、最後にすべて
表示することができる。ただし配列に値を代入するにはインデックスを指定しな
ければならない。
そこで、インデックスに具体的な値を指定するかわりに、インデックスをaとい
う変数にし、while trueを用いて、キーボードを終えた場合に繰り返しから抜け
るように指示をしている。
冒頭でa = 0として初期値に0を代入しているため、1回目のscore[a]はscore[0]
と同じ意味である。繰り返しを行う中でa += 1として1ずつ増加しているため、
繰り返しを継続するたびにaの値が1増加するので、キーボードから入力された値
はインデックスを1ずつ増加させながら配列内に代入されることになる。
前回のレポートと同じく、while trueの中でif-endやredoなどを使って、キーボー
ド入力された数字の判別をしながら代入していく。
tensu = syusseki * 2
printf("出席点%17d点\n",tensu)
1回出席するごとに2点の出席点が与えられるので、出席点の合計(tensu)=最初
に入力される出席回数(syusseki)×(*)2点でこのような式になる。
while a < score.length
if score[a] == "exit"
break
end
printf("%d回目 %17.1f点\n",a+1,score[a])
total += score[a].to_f
a += 1
end
このプログラムではインデックスにaという変数を使用し、aの初期値を0とし、
while-endの中でaの値を1ずつ増加させながらscore内の値を1つずつ順番に読み
出している。
ここで、while-endを用いて配列内の値を取り出すために、lengthメソッドを使
用する。lengthメソッドとは、その配列の中に代入されている値の数を返してく
れるメソッドのことである。
条件を満たさなくなった時点で繰り返しが終了となり、endの下にあるprintfの
行が実行され、合計得点や平均得点が表示される。
tensu += total
heikin = total / number
printf("合計得点 %15.1f点\n",tensu)
printf("平均得点 %15.1f点\n",heikin)
合計点は出席点(tensu)とレポートの合計点(total)を合算(+=)した数。
レポートの平均点は、レポートの合計(total)をレポートの回数(number)で割っ
た(/)数になる。
if tensu>=90
print"評価 秀\n"
elsif tensu>=80
print"評価 優\n"
elsif tensu>=70
print"評価 良\n"
elsif tensu>=60
print"評価 可\n"
else
print"評価 不可\n"
end
条件判断のif-endを使って、秀から不可まで判断する。ifの横に具体的に条
件を書く。
「正解している場合」という意味が「if tensu>=90」となる。それゆえ、ここ
では「点数が90点以上の場合」は秀。「そうでない場合かつ、80点以上ならば」
優。つまり「elseif tensu>=80」と表現する。それを、良の場合、可の場合とこ
なしていき、最後に「どれにもあてはまらない、そうでない場合」は「else」と
表現し、不可となる。終わりには必ずendをつける。
< 感想 >
先輩に助けてもらいながら、なんとかできた。
説明を書いていくと、どういう意味で使われているか確認できるので良い。
< 参考文献 > TAの先輩