roy > naoya > 基礎プログラミングII > (1)基礎プログラミングIの復習

(1) 基礎プログラミングIの復習

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

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

基礎プログラミングI第1回目のページ

emacsの基本操作

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

ktermの基本操作

ディレクトリの移動
cd ディレクトリ名[Return]
上のディレクトリに戻る場合はcd ..[Return]
cd[Return]でホームディレクトリ[~]に戻る
Rubyプログラムの実行
ファイルを保存したディレクトリにcdコマンドで移動後、
chmod +x ○○.rb[Return]でファイルに実行属性を与えてから、
./○○.rb[Return]で実行。
入力したコマンドの再利用
キーボードの↑(上矢印)キーを押すと直前に入力したコマンドが表示される。
日本語入力の切り替え
Ctrl+oを押すごとに日本語入力のON/OFFが切り替わる。

Rubyプログラム作成の基本

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

[2]プログラムのサンプル

操作を思い出しながら、次のプログラムを作成・実行し、感覚を取り戻そう。

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

#!/usr/koeki/bin/ruby
# -*- coding: utf-8 -*-

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"
  • 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進数の整数で表示する。
sime{c1xxxxx}% chmod +x discount.rb[Return]         [~program]
sime{c1xxxxx}% ./discount.rb[Return]                [~program]
金額を入力してください
1000[Return]
2割引で800円になります。
お支払い金額を入力してください。
1000[Return]
200円のお返しになります。
どうもありがとうございました。またご利用くださいませ。

[3]作成練習

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

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

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

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

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

sime{c1xxxxx}% chmod +x bmi.rb[Return]
sime{c1xxxxx}% ./bmi.rb[Return]
体重をkg単位で入力してください
100[Return]
身長をm単位で入力してください
1.5[Return]
BMI値は44.4です。

プログラム作成上の注意

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

[4]条件判断の復習

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

if文の基本構造

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

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

#!/usr/koeki/bin/ruby
# -*- coding: utf-8 -*-

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以上:高度肥満

[5]練習問題

ifを使用する以下のプログラムを書いてみよう。1番から始めて2番、3番と順番に作成する。

  1. 宅配便で送る荷物の縦、横、高さをを入力すると料金を計算するプログラム(delivery1.rb
  2. 宅配便で送る荷物の縦、横、高さ、重さを入力すると料金を計算するプログラム(delivery2.rb
  3. 1~50のランダムな数字を生成し、その数字を当てるプログラムを作成する。キーボードから任意の数字を入力し、それが生成された数字と同じであれば「正解」と表示し、異なれば「違う」と表示する。余力がある人はwhile-end等の繰り返し表現を用いて10回挑戦できるようにする。さらに余力がある人は入力した値と正答を比較し「もっと大きいよ」「もっと小さいよ」などのメッセージが出せるようにする(digit.rb

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

1番、2番について、人間に3辺の合計を計算させて入力させるのではなく、縦、横、高さをそれぞれ入力してもらい、コンピュータに計算をさせよう。

サイズ 60サイズ 80サイズ 100サイズ 120サイズ 140サイズ 160サイズ
3辺計 60cm迄 80cm迄 100cm迄 120cm迄 140cm迄 160cm迄
重量 2kg迄 5kg迄 10kg迄 15kg迄 20kg迄 25kg迄
金額 600円 700円 800円 900円 1000円 1100円

3番のプログラム作成にあたり、ランダムな数字を生成するためには、冒頭でdigit = rand(50)+1とする。randはランダムな数字を生成するメソッドで、rand(50)とすると0~49のうちのいずれかがランダムに選ばれる。digit = rand(50)+1のように+1をすることで1~50となり、この値がdigitという変数に代入される。digitは単なる変数名なので、各自で自由に変更して構わない。