roy > naoya > 基礎プログラミングII[月1] > (2)条件判断の復習

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

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

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

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

emacsの基本操作

新規作成
Ctrl-x Ctrl-f。下部ミニバッファにFind File:~/と表示されるので、Find File:~/ruby/○○.rbと入力し[Return]
既存のファイルを開く
Ctrl-x Ctrl-f(新規作成と同じコマンド)。下部ミニバッファにFind File:~/と表示されるので、Find File:~/ruby/○○.rbと入力し[Return]。○○.rbが存在しないファイル名の場合は新規作成、既存のファイルの場合はそのファイルが開かれる。
保存
Ctrl-x Ctrl-s
コピー&ペースト
コピーしたい箇所をマウスで反転させるとコピー完了。貼り付け先にマウスカーソルを移動し、マウスの真ん中クリックで貼り付け。
日本語入力の切り替え
Ctrl-oを押すごとに日本語入力のON/OFFが切り替わる。
キー入力の補間
ディレクトリ名やファイル名を途中まで入力してTabキーを押す。続きが自動的に入力される。名称の絞込みが出来ない場合は可能性のあるディレクトリ名、ファイル名の一覧が表示されるので、他の候補がなくなるところまで入力し再度Tabキー

ktermの基本操作

ディレクトリの移動
cd ディレクトリ名[Return]。rubyディレクトリを開く場合はcd ruby[Return]となる。上のディレクトリに戻る場合はcd ..cd[Return]でホームディレクトリ[~]に戻る。
Rubyプログラムの実行
ファイルがあるディレクトリにcdコマンドを使って移動してから、ruby ○○.rb[Return]
入力したコマンドの再利用
キーボードの↑(上矢印)キーを押すと直前に入力したコマンドが表示される。
日本語入力の切り替え
Ctrl-oを押すごとに日本語入力の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つのプログラムを作成・実行し、感覚を取り戻そう。

画面にHello Ruby!と表示するだけのプログラム(hello.rb

#!/usr/koeki/bin/ruby

print"Hello Ruby!\n"
  • print:""内のメッセージを表示する
  • \n:改行マーク
pan{c10xxxx}% cd ruby                       [~]
pan{c10xxxx}% ruby hello.rb[Return]         [~ruby]
Hello Ruby!

商品の金額を入力すると2割引の金額が表示され、支払い金額を入力するとおつりを計算して表示するプログラム(discount.rb

#!/usr/koeki/bin/ruby

print"金額を入力してください\n"
money = gets.chomp!.to_i
discount = money * 0.8
printf("2割引で%d円となります。\n",discount)
print"お支払い金額を入力してください\n"
pay = gets.chomp!.to_i
change = pay - discount
printf("%d円のお返しとなります。\n",change)
print"どうもありがとうございました。またご利用くださいませ。\n"
  • money = gets.chomp!.to_i:キーボードから入力した値を文字列として取得し(gets)、改行文字を切り取り(chomp!)、整数に変換して(to_i)、moneyに代入する。
  • discount = money * 0.8:moneyの金額を0.8倍(=2割引)した結果をdiscountに代入する。
  • printf("2割引で%d円となります。\n",discount):printfは全体を()でくくる。%の位置に後ろで指定したdiscountに代入された値を入れ込んで表示する。%dのdは表示する際の書式で、dの場合は10進数の整数で表示する。
pan{c10xxxx}% ruby discount.rb[Return]         [~ruby]
金額を入力してください
1000[Return]
2割引で800円になります。
お支払い金額を入力してください。
1000[Return]
200円のお返しになります。
どうもありがとうございました。またご利用くださいませ。

練習[1]

実際に1つプログラムを作成してみよう。

BMIを計算するプログラム(bmi.rb

bmi値は次式で算出できるもので、標準値は22.0である。
BMI=体重(kg)/身長(m)2

体重はkg単位、身長はm単位で入力する。身長が170cmの場合、1.7と入力する。

正しくプログラムを書くことが出来れば、以下のような実行結果を得るはずである。

pan{c10xxxx}% ruby bmi.rb[Return]
体重をkg単位で入力してください
100[Return]
身長をm単位で入力してください
1.5[Return]
BMI値は44.4です。

プログラム作成上の注意

  • まずは、体重と身長をそれぞれ入力してもらう。変数名はweightheightにしよう。
  • 次に、体重と身長の値をBMI算出式に当てはめる。変数名はbmiとし、
    bmi = weightheightを用いた計算式
    として、BMI値を求めよう。割り算やべき乗の演算子は何だったろうか。自信がなければ前期の3回目のページを確認してみよう。
  • BMI値が求められたらprintfメソッドを使って「BMI値は○○です」の形式で表示してみよう。

条件判断の復習

条件判断(場合わけ)を行う際にif文を使用した。基本的には以下の構造をとった(詳細は春学期の第3回目の授業参照)。

if文の基本構造

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

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

#!/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

bmi.rbに追加しよう

if-endの構文を用いて、BMIの値に応じてメッセージを表示できるようプログラムを改良してみよう。

  • 18.5未満:やせ
  • 18.5〜25未満:標準
  • 25〜30未満:肥満
  • 30以上:高度肥満

出席課題

if文を使用する以下のプログラム(delivery.rb)を書いてみよう。1番と2番のどちらを選択しても良い。

  1. 宅配便で送る荷物の幅、長さ、厚さを入力すると料金を計算するプログラム。
  2. 宅配便で送る荷物の幅、長さ、厚さ、重さを入力すると料金を計算するプログラム。

サイズ区分は以下の表の通りであり、1番は3辺の合計の長さでサイズを決める。2番は3辺の合計の長さと重さのサイズが一致しない場合に、大きい方のサイズ扱いとする。1番は長さが、2番は長さと重さの一方でも160サイズを超えている場合は送れない旨を表示する。

60サイズ

80サイズ

100サイズ

120サイズ

140サイズ

160サイズ

600円

700円

800円

900円

1000円

1100円

サイズ

60サイズ

80サイズ

100サイズ

120サイズ

140サイズ

160サイズ

3辺計

60cm迄

80cm迄

100cm迄

120cm迄

140cm迄

160cm迄

重量

2kg迄

5kg迄

10kg迄

15kg迄

20kg迄

25kg迄


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

  • 提出先:課題提出用メールアドレス
  • メールのSubject:attend02
  • 本文の構成:1行目で学籍番号、氏名を記載する。2行目以降にプログラムと実行結果を貼り付ける

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

メール送信後には受信作業をする

mewでメールを送信した後は、受信コマンドのiおよびパスワードを入力して正しく送信できたか確認しよう。メールアドレスを書き間違えた場合にはMAILER-DAEMONからエラー通知が届く。この場合には、届いていないのでアドレスを正しく書き直して再送信する。再送信の方法は上記「mewコマンド」のページを参照すること。