(2) 10/16の授業内容:条件判断の復習

条件判断の復習

条件判断(場合わけ)を行う際にif文を使用した。基本的には以下の構造をとった。

if 条件A then   #条件Aを満たせば(thenは省略しても良い)
  処理A         #処理Aを実施する
elsif 条件B     #条件Aを満たさないが条件Bを満たせば
  処理B         #処理Bを実施する
else              #条件ABともに満たさない場合は
  処理C         #処理Cを実施する
end

以下はif文を用いて書いたプログラムの例である。実行するとどのような結果が出てくるか考えてみよう。

#!/usr/koeki/bin/ruby

print "試験の得点を入力してください(0〜100点)\n"
score = gets.chomp!.to_i

if score < 60 then
   print "残念! 不可です\n"
elsif score < 70
   print "セーフ! 可です\n"
elsif score < 80
   print "良です。 よくできました\n"
else
   print "優です! すばらしいですね\n"
end

出席課題

前回の復習と本日の条件判断を踏まえ、2つのプログラムを作成してみよう。

  1. BMI(Body Mass Index)とは身長と体重に基づき肥満度を計算する指数である。BMI=体重(kg)/身長(m)2で算出することができ、男性は22、女性は21.5が標準体重となる。身長はm単位であるため170cmであれば1.7となる。実行すると身長と体重をたずね、入力した値に基づいてBMI値を計算して表示するプログラム(BMI.rb)を作成せよ。
  2. 実行すると郵便物の重さを聞き、ユーザが入力した値に応じて、 50gまでであれば120円、100gまでは140円、150gまでは200円、250gまでは240円、500gまでは390円、1kgまでは580円、2kgまでは850円、4kgまでは1150円、4kgを超える場合は定形外郵便では送れないことを表示するプログラム(post2.rb)

うまくいかない場合は、修正途中でもよいのでメールで解答を送信すること。出席点は2点。提出要領は下記の通り。

  • 提出先:naoya@e.koeki-u.ac.jp
  • メールのSubject:ruby02
  • 本文の構成:1行目で学籍番号、氏名を記載する。2行目以降にプログラムと実行結果を貼り付ける

Tips:Mewによるメールの送り方はMewコマンドを参照

早くできた人への課題

出席課題ができた人は次の問題に取り組んでみよう。いずれも何を問われているか分かりづらいかもしれないが、プログラムを完成するとそれほど長いものではない。

問題1:郵便区内特別郵便物とは、配達を行う郵便局にその郵便局が配達を行う地域となっている郵便物を一定数持ち込むことで割引が適用されるサービスであり、以下のように金額が定められている。実行すると1通あたりの重さと、同時差出数、そのうちその郵便局の配達地域である郵便物数を聞き、ユーザが入力した値に応じて郵便料金を表示するプログラム(kunai.rb)を作成せよ。なお、表の下に示す2つの条件のうち最低1つを盛り込むこと(この部分がif文となる)。

通常料金

当該地域について100通以上

当該地域について1000通以上

25gまで80円

65円

50円

50gまで90円

75円

55円

  • 1通あたりの重さが50gを超える場合はこの制度を利用できないものとし(実際には利用できる)、通常料金を100gまで140円、150gまで200円として合計金額を算出し、1通あたりの料金をあと○g減らせばこの制度が適用されて○○円となり、○○円得になることを示す。
  • その郵便局の配達地域となっている郵便物の数が95通〜99通、980通〜999通の場合に、このままだと○○円になるが、あと○通追加すると○○円になるとアドバイスをする

問題2:デジタルカメラでフルカラーの写真を撮影する場面を想定し、メディアの記録容量(例512MB)と写真のサイズ(例640×480)を入力すると、そのメディアに何枚写真を保存することができるか計算するプログラムcamera.rbを作成せよ。ただし、写真は圧縮しないものとし、1MBは1000KB、1KBは1000バイトとする。また写真のサイズは縦横比が3:4となるため縦もしくは横のサイズのみを入力すればよいものとする。このプログラムでは1枚の写真が何MBになるのかがポイントとなる。写真のファイルサイズの求め方は以下を参照せよ。

例えば800×600の画像は、横800×縦600のます目(ピクセル)で構成されており、合計で48万個のます目(ピクセル)があることになる。1つ1つのピクセルごとに色を指定することで、全体として何らかの写真に見えるようになっている。

コンピュータにおける色指定は、Red、Green、Blueの3色の光の強さを指定することで行われる。フルカラーの場合それぞれの色を256段階(=28)で指定し、2進数もしくは16進数で表現する。全ての光の強さが0%の場合、2進数では000000000000000000000000、16進数では000000となり、黒色になる。全ての光の強さが100%の場合、2進数では111111111111111111111111、16進数ではffffffとなり、白色になる。赤のみが100%の場合は111111110000000000000000もしくはff0000となり赤色が表示される。これらを組み合わせると224通りの色を表現することができる。

ファイルサイズとは、そのファイルを表現するための2進数の数である。このため1ピクセルのみの画像の場合、2進数が24桁となるため、ファイルサイズは24ビット=3バイトとなる。800×600ピクセルの画像の場合、ファイルサイズは3バイト×48万ピクセル=144万バイト=1440KB(キロバイト)=1.44MB(メガバイト)となる。ファイルサイズの単位は以下の通りである。

  • 2進数1桁を1ビットという
  • 8ビット=1バイト
  • 1000バイト=1KB(キロバイト)
  • 1000KB=1MB(メガバイト)
  • 1000MB=1GB(ギガバイト)
  • 1000GB=1TB(テラバイト)

このように画像のファイルサイズは大きくなりがちである。このままではフロッピーディスクに1枚しか保存できない状況になってしまうため、圧縮をしてファイルサイズが小さくなるようにしている。JPEGやGIF、PNG等はいずれも画像を圧縮した形式であるが、この課題では圧縮については考えないことにする。