プログラミング基礎
II
第二回
(2011年10月3日)
Ruby の数と演算
http://www.sw.it.aoyama.ac.jp/2011/PB2/lecture2.html
Martin J. Dürst
© 2006-11 Martin
J. Dürst 青山学院大学
目次
- Moodle への登録の確認
- 前回のまとめ・演習・宿題
- (演算) 式の構成、評価
- 優先度、結合規則
- 四則演算、べき乗演算、剰余演算
- Ruby の数値の種類: 整数、浮動小数点数
- 式の結果の保存: 変数
- 簡単なプログラムの組み方
- 演習
次の授業 (注)
来週の月曜日 (10月10日)
は体育の日だが授業実施日
演習の場所
Ruby は次の部屋にインストールされている:
演習、宿題に使ってください
Moodle の登録の確認
- 履修登録と Moodle への授業登録が授業の前提条件
- Moodle の授業登録がまだの学生は要連絡
- 残念ながら履修登録の追加が不可能
- 授業ように Q&A
フォーラムを作成
前回のまとめ
- プログラムでは様々なデータを自由自在に操れる
- Ruby は入り口が広くて、奥が深い
- Ruby が世界中に幅広く使用
- Ruby をちょっとだけ試すには Interactive Ruby
(
irb
) が便利
- Ruby のプログラムは
ruby program.rb
で
Command Prompt with Ruby から実行
演習 1: Ruby のインストール
(個人パソコン限定)
演習 2: データの収集
- 有名人など (最低五名) のデータ
(名前、年齢、生年月日、身長、体重、肩書、趣味など)
を収集
- 自分の身の回り、専門分野などにあるデータを調査
数式の構成
式の例: 3 + 5
部品の名称:
+
: 演算子 (operator)
3
, 5
: 被演算子 (operand)
Ruby は数式をそのまま評価 (evaluate)
演算の種類: 四則演算
+
: 足し算 (addition)
-
: 引き算 (subtraction)
*
: 掛け算 (multiplication)
/
: 割り算 (division)
評価の順番: 優先度
3 + 4 * 5
のような式はどの順番で評価されるか
- 一般に、二つ以上の演算子の式で、評価の順番は?
- 評価は優先度 (priority) の高い演算子から
- 掛け算は足し算より優先度が高いので、結果は:
- 四則演算について、Ruby は数学と同様
評価の順番: 結合
- 演算子の優先度が同じ場合、評価の順番は?
- 例:
10 - 5 - 3
- 順番は演算子の結合規則 (associativity)
によって決まる
- 左の演算子を先に評価する場合は左結合 (left
associative)
- 右の演算子を先に評価する場合は右結合 (right
associative)
- 引き算は左結合か、右結合か? 他の四則演算は?
演算の順番の変更
(
と )
で囲まれている演算が先に計算
例: 7 * (5 + 9 / 3) - 10
- 式が分かりにくいと思ったら、余分に括弧を使ってもよい
例: (3 * 12) - 20
- スペースで優先度を分かりやすくすることもある
例: 3*12 - 20
注意: 3 * 12-20
でも計算結果が同じ
べき乗演算
- べき乗演算 (冪乗演算; exponentiation) は Ruby で
**
と表現
- 例:
5 ** 2
(52) → 25
- べき乗の優先度は?
5 + 3 ** 2
(5+32)
7 * 2 ** 3
(7×23)
- べき乗は左結合か、右結合か?
2 ** 2 ** 2
(222)
剰余演算
- Ruby の割り算の特徴:
20 / 3
⇒ 6
- 剰余演算 (modulo) で残りを計算:
20 % 3
⇒ 2
- 剰余演算の優先度は?
- 剰余演算は左結合か、右結合か?
- 剰余演算はプログラミングで幅広く応用:
偶数・奇数判断から暗号まで
数値の種類 (基礎編)
Ruby は主に二つの数値の種類を区別:
- 整数 (integer):
4
, 0
, 2223214
,
-33
,...
- 浮動小数点数 (floating point number):
3.333
,
10.0
, 0.0
, -37.83562
,
3.14159265358979
- 浮動小数点数は実数 (real number) に近いが、違う
- 整数だけの割り算の結果は整数 (剰余は無視)
- 浮動小数点数を含まれる割り算の結果はできるだけ正確
(剰余無し)
- 浮動小数点数を使った剰余演算は?
計算結果の保存
計算の結果を再利用するため、保存が可能
保存場所は「変数」(variable) という
変数の名前 (変数名、variable name) は任意の小文字の列
保存のために「=」演算子を使用 (代入、assignment)
例: seconds_per_day = 24 * 60 * 60
新しい変数名は左側、保存したい結果の式は右側
変数名
分かりやすい名前は非常に大事
最初の文字は小文字の英字
残りの文字は英数字または「_
」
複数の言葉をつなぐとき、スペースの代わりに「_
」を使用
変数名はローマ字の日本語のではなく、英語が良い
よくない例: uruudoshi
、良い例:
leap_years
Ruby 1.9
では日本語の変数名も使用可能だが、事実上無使用
変数と定数
「234
」とか「0.789
」のような数値は「定数」(literal)
という
式では被演算子として定数だけではなく、変数も使用可能
具体例 (二十歳の人は何日間生きてきたか):
years = 20
leap_years = years / 4
days = years * 356 + leap_years
プログラムの組み方
puts 33*45
: 改行付き出力
print 33*45
: 改行なし出力
puts 33*45
: 式の結果を直接出力
puts days
: 変数の値を出力
puts ' days'
:
「''
」内の文字をそのまま出力
- プログラムの例
- プログラム開発の場合、一部書いて、試して、もう少し書いて、試して、...
が最適
演習 1: プリント中の質問の確認
(プリントに書き込むこと)
3 + 4 * 5
の結果: 23
- 引き算は左結合か、右結合か? 左結合
- 他の四則演算は? 全て左結合
- べき乗の優先度は? 掛算・割算より高い
- べき乗は左結合か、右結合か? 右結合
- 剰余演算の優先度は? 掛算・割算と同様
- 剰余演算は左結合か、右結合か? 左結合
- 浮動小数点数を使った剰余演算は? 左の被演算子から整数の回数だけ右の演算子を引いた残り
演習 2: 米粒の計算
- インドに由来する話によるとチェスの発明者は王さまからお願いした米の量は、
ひとマス目に1粒、次のマス目にその倍、次のマス目に更に倍、...
(合計は 264-1)
- 粒の総数 (number of grains)、総重量 (kg で、一千粒が 22g;
total weight)、
俵の総数 (一俵が 60kg; number of
bales)、日本の人口を養える年数を計算
- 上記の計算と途中結果を含む分かりやすい出力をするプログラムを作成
- プログラムをMoodle にアップロード (10月7日 (金曜日)
22:00 必着)、ファイル名は
grains.rb
)
演習 3:
- この授業で習った演算子などを使う計算問題を作成
- この授業で習ってない演算子などが必要でしたらその旨を指摘
- 複数の学生から同様又は類似の問題の場合、減点対象
calculation.txt
のファイル名でMoodle
にアップロード (10月7日 (金曜日) 22:00 必着)
今日のまとめ
- (演算)
式の構成、評価とその順番、優先度、結合規則
- 四則演算、べき乗演算、剰余演算
- Ruby の数値の種類: 整数、浮動小数点数
- 式の結果の保存: 変数に代入
- 変数名は分かりやすい英語
- 簡単なプログラムの組み方
次回のための準備
注意: 来週の月曜日 (10月10日)
は体育の日だが授業実施日
- (Moodle の授業登録の完了)
- (自分のパソコンへ Ruby をインストール)
- 演習 1 の完了
- 演習 2 (
grains.rb
) をMoodle にアップロード
(10月7日 (金曜日) 22:00 必着)
- 演習 3 (
calculation.txt
) をMoodle にアップロード
(10月7日 (金曜日) 22:00 必着)