次のような問題を想定する。
△△銀行に普通預金で10万円預けました。利率は0.1%です。お金の出し入れをしない場合、残高が11万円になるのは何年後でしょうか。
#!/usr/koeki/bin/ruby deposit = 100000 goal = 110000 rate = 1.001 y=0 while deposit <= goal deposit *= rate y += 1 printf ("%3d年後\t%d円\n", y, deposit) end
このプログラム(deposit.rb)を実行すると、以下のような結果が表示される。
irsv{naoya}% ruby deposit.rb[Return] 1年後 100099円 2年後 100200円 3年後 100300円 4年後 100400円 5年後 100501円 6年後 100601円 7年後 100702円 8年後 100802円 9年後 100903円 10年後 101004円 11年後 101105円 12年後 101206円 (中略) 95年後 109960円 96年後 110070円
プログラムを日本語に置き換えて説明したものを前回の授業で提示した。これはプログラムの概要を把握する上では役に立つ情報であるが、これだけでは自分でプログラムを作成することは難しい。例えばプログラム中の=は右辺を左辺に代入するという意味を持つ。右辺と左辺は等しいという意味ではない。また、<=は「〜以下」をあらわす。一般的には不等号の下に等号を記載するが、キーボードから入力する場合にはそのような記号はない。このため<=で代用しているのである。=や-、+、>などを総称して演算子と呼ぶ。今回は演算子の働きと、Rubyにおける記法についてみていこう。
プログラミングを行う場合、日常的に使用する演算子とは異なる演算子を使用する場合がある。例を挙げて説明しよう。
これらを組み合わせた例を見てみよう。
以下の式をRubyの記法にしたがって記述しよう。
制限時間は10分。できる範囲で実施し、制限時間内にメールで解答を送信すること。出席点は2点。提出要領は下記の通り。
Tips:emacsでの日本語入力のオンオフはCtrl-oです
Tips:Mewによるメールの送り方はMewコマンドを参照
加算 (+)・減算 (−)・乗算 (×)・除算 (÷) 等を指す。前述の通り、数学で用いる記号とは異なる場合があるので注意が必要である。
算術演算子 | 意味 | 例 |
+ | 加算 | 2+5(2に5を加える) |
- | 減算 | 6-3(6から3を減じる) |
* | 乗算 | 9*2(9に2をかける) |
/ | 除算 | 12/4(12を4で割る) |
% | 剰余 | 9%2(9を2で割った余り) |
** | べき乗 | 2**8(2を8乗する) |
Rubyでは=は右辺と左辺が等しいという意味ではなく、左辺に右辺を代入するという意味になる。算術演算子と=を組み合わせることで様々な働きを持たせることができる。
代入演算子 | 意味 | 例 |
= | 通常代入 | z=10(zに10を代入する) |
+= | 加算代入 | z+=10(zの現在の値に10を加算した値を新しいzとする) |
-= | 減算代入 | z-=10(zの現在の値から10を引いた値を新しいzとする) |
*= | 乗算代入 | z*=5(zの現在の値を5倍した値を新しいzとする) |
/= | 除算代入 | z/=10(zの現在の値を1/10にした値を新しいzとする) |
%= | 剰余代入 | z%=5(zの現在の値を5で割った余りを新しいzとする) |
**= | べき乗代入 | z**=5(zの現在の値を5乗した値を新しいzとする) |
x = 0 printf ("xの値は%dです\n",x) #=> xの値は0です x = 10 printf ("xの値は%dです\n",x) #=> xの値は10です x += 5 printf ("xの値は%dです\n",x) #=> xの値は15です x *= 2 printf ("xの値は%dです\n",x) #=> xの値は30です x %= 4 printf ("xの値は%dです\n",x) #=> xの値は2です
前回のサンプルプログラムでは、「while deposit <= goal」の行で使用していた(変数goalに代入されている値が変数depositに代入されている値以下の場合は以下の処理を繰り返し実施せよ)が、このように繰り返しを行わせる場合や、場合わけを行う上で条件を指定する際に利用するのが論理演算子である。「以上」「以下」といった表現に加え、複数の条件を指定する際の「かつ」(論理積)や「または」(論理和)などもこの演算子に含まれる。
論理演算子 | 意味 |
== | 左辺と右辺が等しいか |
< | 左辺が右辺よりも小さいか |
<= | 左辺が右辺以下か |
> | 左辺が右辺よりも大きいか |
>= | 左辺が右辺以上か |
&& | かつ(論理積) |
|| | または(論理和) |
! | 否定 |
not | 否定 |
while x >= 1 #xが1以上の間はxに1を減算代入する
x -= 1
end
while x >= 1 && x <= 10 #xが1から10の間にある場合はxに1を加算代入する
x += 1
end
while x > 1 || x < 10 #xが1未満か10以上の場合はxに2を乗算代入する
x *= 2
end
while !(x <= 1 && x >= 10) #xが1以上10以下でない場合はxに4を減算代入する
x -= 4
end
コメントとは、プログラム中に記述する注釈であり、作者名を残したり、説明を行うために使用する。プログラム中に書かれていても、プログラムとして認識されることはないので、実行する上では特に問題は無い。他人の書いたプログラムはわかりづらいと言われることが多いが、わかりやすさの向上を目指すためにコメントを利用することが望ましい。
コメントをあらわす記号は「#」である。プログラム中に「#」があると、その行の「#」以降の記述はコメントとして扱われる(代入演算や論理演算の項で示したサンプルのプログラムを参照のこと)。行の先頭に「#」があれば、1行全てがコメントになる。
deposit.rbのように、初期値と終了値、変化の割合が設定されているプログラム(kadai1.rb)を作成する。作成したプログラムや実行結果、プログラムの説明をメールで送信する。
例:人口8000人の村がある。1年に2%ずつ減少するとした場合、 誰もいなくなってしまうのは何年後か
Tips:emacsでの日本語入力のオンオフはCtrl-oです
Tips:ktermでのプログラムの実行結果をメールに貼り付けるには、コピーしたい箇所をマウスで選択し、emacs(Mew)上でマウスの真ん中ボタンをクリックする
Tips:Mewによるメールの送り方はMewコマンドを参照