第3回の課題 レポートのサンプル

Subject: #03 mul.rb
From: c112059@h.koeki-u.ac.jp
To: ruby-04-26@e.koeki-u.ac.jp
Date: Fri, 26 Apr 2013 12:44:36 +0900 (JST)
X-Mailer: Mew version 6.3 on Emacs 23.3 / Mule 6.0 (HANACHIRUSATO)

氏名:KM
学籍番号:c112059
クラス:7

1.作成したプログラム

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

sum = 1
while true
  STDERR.print "掛けたい数(終了は q): "
  line = gets.chomp
  if line == "q" then
    break
  end
  sum *= line.to_i
  printf("これまでの合計は %dです\n", sum)
end
printf("合計は %dです\n", sum)

2.プログラムの実行結果

pan{c112059}% ./mul.rb                                                 [~/Ruby]
掛けたい数(終了は q): 1
これまでの合計は 1です
掛けたい数(終了は q): 3
これまでの合計は 3です
掛けたい数(終了は q): 5
これまでの合計は 15です
掛けたい数(終了は q): q
合計は 15です

3.プログラムの各部の説明

今回のプログラムは、accum.rbを参考にして書き直したものです。

まず最初のsum=の後に、最初に掛けるもとの数を入力する。
今回は掛け合わせなので、sum変数が0だと何を掛けても0にしかならないので、
他の数にした方が良い。私はsum変数を1とした。

while trueは真ん中のendまでの間を繰り返せという命令文である。

STDERR.print "掛けたい数(終了は q): "
この命令文は、""でくくられた文を文字列として画面に表示させるもの。

line = gets.chompについて。
数字を入力した後にリターンキーを押すと、コンピュータは数字とリターンキー
を認識しようとするので、入力されたキーからリターンキーを除いて、数字だけ
をline変数に代入しなければならない。その命令文がこれ。

 if line == "q" then
    break
  end
これは、数字入力のところでqを入力した場合は、whileのループから出て、終了
しなさい(最後の方のendに行け)という命令文である。

sum *= line.to_iについて。
今回の問題は掛け合わせなので、accum.rbでは+=のところを*=に変えた。
また、先程"掛けたい数"のところで入力した数字は、文字としてコンピュータに
扱われているので、計算するには数字として扱われなければならない。よってこ
の文は数字として扱え、という命令文になっている。

printf("これまでの合計は %dです\n", sum)について。
printfは、カンマの後のsum変数に入っている数字を反映させて表示する。ここ
がprintだけだと、数字が出ずにこの命令文のまま表示されてしまう。
%dは、カンマの後のsum変数に入っている数字を文字列に置き換えて表示させる
もの。

最後のendは、whileに対応するもの。

printf("合計は %dです\n", sum)については、qが入力された後に画面に""でく
くった文を表示しろという命令文である。

4.感想

プログラム自体を変えることは難しくなかったが、各部の説明はきちんと理解し
ていないと説明が難しかったです。あらかじめ少し予習してきたので、多少は分
かりました。
今回、各部の説明が長くなってしまいました。分かりにくかったらすみません。
でも、なるべく分かりやすくなるように頑張りました。
これからもプログラムの説明が上手くなるように、努力して行きたいです。

本日の目次