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

プログラムの作成·実行方法の復習

春学期が終了してから2ヶ月のブランクがあいているが、プログラムの作成方法は覚えているだろうか? emacsを用いたプログラムの作成方法、ktermでの実行方法について確認しておこう。。最低限、以下に示す項目は思い出しておこう。自信がない場合は春学期の第2回目の授業のページを確認しておくこと。

基礎プログラミングI·情報検索第2回のページ

emacs

  • 新規作成:Ctrl-x Ctrl-fを入力。Find File:~/ruby/○○.rbと入力し[Enter]
  • ファイルを開く:Ctrl-x Ctrl-fを入力。Find File:~/ruby/○○.rbと入力し[Enter]。○○.rbが存在しないファイル名の場合は新規作成となり、既存のファイル名を入力した場合はそのファイルが開かれる
  • 保存:Ctrl-x Ctrl-s
  • コピー&ペースト:コピーしたい箇所をマウスで反転させる。貼り付け先でマウスの真ん中クリックで貼り付けられる
  • 日本語入力の切り替え:Ctrl-oを押すごとに日本語入力のON/OFFが切り替わる
  • キー入力の補間:ディレクトリ名やファイル名を入力する際、途中まで入力してTabキーを押すと自動的に補間される

kterm

  • ディレクトリの移動:cd ディレクトリ名。rubyディレクトリを開く場合はcd rubyとなる。上のディレクトリに戻る場合はcd ..
  • Rubyプログラムの実行:ファイルがあるディレクトリで、ruby ○○.rb
  • 入力したコマンドの再利用:キーボードの↑(上矢印)キーを押すと直前に入力したコマンドが表示される。プログラムを修正しながら実行を繰り返す場合、毎回ruby ○○.rbと入力するため、↑を押せば毎回同じことを入力しなくても良い
  • 日本語入力の切り替え:Shift-Spaceを押すごとに日本語入力のON/OFFが切り替わる

Ruby

  • 1行目:#!/usr/koeki/bin/rubyと入力する(おまじない)
  • print、printf:printは""内のメッセージをそのまま表示するメソッド。printfは""内に%を起き、その場所に後ろで指定した変数内に代入された値を入れ込んで表示するメソッド。%の後ろに書式制御文字であるdやf、sを記載し、表示形式を指定する
  • gets:キーボードからの入力を文字列として受け取るメソッド。ファイルからの読み込みも可能。
  • chomp!:改行文字がある場合にそれを取り除くメソッド
  • to_i、to_f:to_iは変数内に代入された値の形式を整数に変換するメソッド。to_fは少数を含む実数に変換するメソッド

練習

確認をしながら次の2つのプログラムを作成してみよう。一つ一つの操作を確認しながら感覚を取り戻そう。

  • 画面にGood Morning!と表示するだけのプログラム(greeting.rb)
  • 実行すると第1回目から第5回目までの課題の得点を聞き、ユーザが順番に答えていくと平均点を計算し、「平均○○点です」と表示するプログラム(av.rb)

条件判断の復習

条件判断(場合わけ)を行う際に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

出席課題

if文を使用する以下のプログラムを書いてみよう。1番と2番のどちらを選択しても良い。1番はそれほど難しくないが、2番はやや難しい。自信がある人は2番に挑戦してみよう。

  1. 実行すると郵便物の重さを聞き、ユーザが入力した値に応じて、25gまでであれば80円、50gまでは90円、50gを超える場合は定形郵便では送れないことを表示するプログラム(post.rb)
  2. 郵便区内特別郵便物とは、配達を行う郵便局にその郵便局が配達を行う地域となっている郵便物を一定数持ち込むことで割引が適用されるサービスであり、以下のように金額が定められている。実行すると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点。提出要領は下記の通り。

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

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