< 実施した課題の番号 > 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の先輩