roy > naoya > 基礎プログラミングII > (1)前期の復習
(1) 09/28の授業内容:前期の復習
[1]プログラムの作成·実行方法の復習
前期が終了してから2ヶ月のブランクがあいているが、プログラムの作成方法は覚えているだろうか? emacsを用いたプログラムの作成方法、ktermでの実行方法について確認しておこう。最低限、以下に示す項目は思い出しておこう。自信がない場合は前期の第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]
上のディレクトリに戻る場合は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]プログラムのサンプル
操作を思い出しながら、次の2つのプログラムを作成・実行し、感覚を取り戻そう。
画面にHello Ruby!と表示するだけのプログラム(hello.rb)
#!/usr/koeki/bin/ruby
print"Hello Ruby!\n"
- print:""内のメッセージを表示する
- \n:改行マーク
pan{c10xxxx}% cd Ruby[Return] [~] 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円のお返しになります。 どうもありがとうございました。またご利用くださいませ。
[3]作成練習
実際に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です。
プログラム作成上の注意
- まずは、体重と身長をそれぞれ入力してもらう。変数名はweightとheightにしよう。
- 次に、体重と身長の値をBMI算出式に当てはめる。変数名はbmiとし、
bmi = weightとheightを用いた計算式
として、BMI値を求めよう。割り算やべき乗の演算子は何だったろうか。自信がなければ前期の3回目のページを確認してみよう。 - BMI値が求められたらprintfメソッドを使って「BMI値は○○です」の形式で表示してみよう。
[4]条件判断の復習
条件判断(場合わけ)を行う際にif文を使用した。基本的には以下の構造をとった(詳細は春学期の第3回目の授業参照)。
if文の基本構造
if 条件A #条件Aを満たせば 処理A #処理Aを実施する elsif 条件B #条件Aを満たさないが条件Bを満たせば 処理B #処理Bを実施する else #条件ABともに満たさない場合は 処理C #処理Cを実施する end
以下はif文を用いて書いたプログラムの例である(credit.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以上:高度肥満
[5]出席課題
if文を使用する以下のプログラムを書いてみよう。まずは1番に取り組み、余力があれば2番に挑戦しよう。前期の内容を覚えていれば2番も充分作成可能である。
- 宅配便で送る荷物の幅、長さ、厚さを入力すると料金を計算するプログラム(delivery1.rb)
- 宅配便で送る荷物の幅、長さ、厚さ、重さを入力すると料金を計算するプログラム(delivery2.rb)
サイズ区分は以下の表の通りであり、1番は3辺の合計の長さでサイズを決める。2番は3辺の合計の長さと重さのサイズが一致しない場合に、大きい方のサイズ扱いとする。1番は長さが、2番は長さと重さの一方でも160サイズを超えている場合は送れない旨を表示する。
サイズ | 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円 |
うまくいかない場合は、途中でもよいので授業終了時までにメールで送ること。出席点は2点。提出要領は下記の通り。
- 提出先:課題提出用メールアドレス
- メールのSubject:attend01
- 本文の構成:1行目で学籍番号、氏名を記載する。2行目以降にプログラムと実行結果を貼り付ける
Tips:mewによるメールの送り方はMewコマンドを参照
メール送信後には受信作業をする
mewでメールを送信した後は、受信コマンドのiおよびパスワードを入力して正しく送信できたか確認しよう。メールアドレスを書き間違えた場合にはMAILER-DAEMONからエラー通知が届く。この場合には、届いていないのでアドレスを正しく書き直して再送信する。再送信の方法は上記「mewコマンド」のページを参照すること。
[6]出席課題その2(1限のみ)
[5]の出席課題が早く終わってしまった人は、以下のプログラムも作成してみよう。
- 1〜50のランダムな数字を生成し、その数字を当てるプログラムを作成する。キーボードから任意の数字を入力し、それが生成された数字と同じであれば「正解」と表示し、異なれば「違う」と表示する。余力がある人はwhile-end等の繰り返し表現を用いて10回挑戦できるようにする(digit.rb)
- キーボードからの入力を受け取り、何らかの計算を行い、その結果の値の大小関係に応じて異なるメッセージを表示できるプログラムを自由に作成する(if.rb)
(1)のプログラム作成にあたり、ランダムな数字を生成するためには、冒頭でdigit = rand(50)+1とする。randはランダムな数字を生成するメソッドで、rand(50)とすると0〜49のうちのいずれかがランダムに選ばれる。digit = rand(50)+1のように+1をすることで1〜50となり、この値がdigitという変数に代入される。もちろんdigitの部分は自分で自由に変更しても良い。
うまくいかない場合は、途中でもよいので授業終了時までにメールで送ること。出席点は2点+α。提出要領は下記の通り。
- 提出先:課題提出用メールアドレス
- メールのSubject(1限):attend02
- 本文の構成:1行目で学籍番号、氏名を記載する。2行目以降にプログラムと実行結果を貼り付ける
Tips:mewによるメールの送り方はMewコマンドを参照
メール送信後には受信作業をする
mewでメールを送信した後は、受信コマンドのiおよびパスワードを入力して正しく送信できたか確認しよう。メールアドレスを書き間違えた場合にはMAILER-DAEMONからエラー通知が届く。この場合には、届いていないのでアドレスを正しく書き直して再送信する。再送信の方法は上記「mewコマンド」のページを参照すること。