条件判断(場合わけ)を行う際に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つのプログラムを作成してみよう。
うまくいかない場合は、修正途中でもよいのでメールで解答を送信すること。出席点は2点。提出要領は下記の通り。
Tips:Mewによるメールの送り方はMewコマンドを参照
出席課題ができた人は次の問題に取り組んでみよう。いずれも何を問われているか分かりづらいかもしれないが、プログラムを完成するとそれほど長いものではない。
問題1:郵便区内特別郵便物とは、配達を行う郵便局にその郵便局が配達を行う地域となっている郵便物を一定数持ち込むことで割引が適用されるサービスであり、以下のように金額が定められている。実行すると1通あたりの重さと、同時差出数、そのうちその郵便局の配達地域である郵便物数を聞き、ユーザが入力した値に応じて郵便料金を表示するプログラム(kunai.rb)を作成せよ。なお、表の下に示す2つの条件のうち最低1つを盛り込むこと(この部分がif文となる)。
通常料金 | 当該地域について100通以上 | 当該地域について1000通以上 |
25gまで80円 | 65円 | 50円 |
50gまで90円 | 75円 | 55円 |
問題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(メガバイト)となる。ファイルサイズの単位は以下の通りである。
このように画像のファイルサイズは大きくなりがちである。このままではフロッピーディスクに1枚しか保存できない状況になってしまうため、圧縮をしてファイルサイズが小さくなるようにしている。JPEGやGIF、PNG等はいずれも画像を圧縮した形式であるが、この課題では圧縮については考えないことにする。