さて、数学をやっていると、よく「場合分け」が必要になりますね。
Rubyで関数をつくるときも、場合分け、すなわち条件分岐が必須になります。
条件式
x>y (>)xがyより大きい
x>=y (≧)xがy以上
x==y (=)xとyが等しい ←「=」じゃなく「==」なのに注意
x<y (<)xがyより小さい
x<=y (≦)xがy以下
x!=y (≠)xとyが異なる
さて、では、xとyのうち大きい値を求める関数を作ってみましょう。
同時に条件分岐の仕方を学びましょう。
def max2(x,y) ←変数x,yに関する関数、max2(x,y)を定義する
if x>=y ←もしx≧yだったら
x ←xを出力
else ←違う場合(x<yだったら)
y ←yを出力
end ←条件分岐終了
end ←定義終了
条件分岐で使うのは、このif-else-end式です。
さて、もっと複雑な条件分岐をつくる際はどうすればいいのでしょうか。
そんな時は、条件式を組み合わせ、さらにif-else-end式を組み合わせます。
条件式の組み合わせ
x>y || x==0 x>y または x==0
x<y && y<z x<y かつ y<z
!(x<y && y<z) (x<y かつ y<z)でない
さて、この条件式の組み合わせを使って、
x,y,zのうち一番大きい値を求める関数を作りましょう。
def max3(x,y,z)
if x>y && x>z ←もし「x>yかつx>z」だったら
x ←xを出力
else ←違う場合
if y>x && y>z ←もし「y>xかつy>z」だったら(条件分岐の中に条件分岐)
y ←yを出力
else ←違う場合(z>xかつz>y)
z ←zを出力
end ←内側の条件分岐終了
end ←外側の条件分岐終了
end ←関数定義終了
できましたか?
少し複雑ですが、練習問題で慣れてください。
論理演算
数学で、「命題」だの「真」だの「偽」だのやった覚えがあると思います。
Rubyでは、変数を含む命題をつくることができます。
たとえば、「xは偶数である」という命題を作りましょう。
作り方は関数を定義するのと同じです。
def is_even(x) ←命題名
x%2 == 0 ←「xが偶数」⇔「x÷2の余りが0」
end
これで、入力したxによって、真すなわちtrue、または偽すなわちfalseを返してくれます。
is_even(2)やis_even(8)とすれば、trueと返しますし、
is_even(5)やis_even(143)とすれば、falseと返します。
これをif文の条件式に使うことも出来ます。
たとえば、「nが偶数だったら1足して、奇数だったらそのまま返す」関数を作るとします。
その場合
def examle(n)
if is_even(n)
n+1
else
n
end
end
とすればよいのです。
文字列(なんでここにこれwとか思ったら負け)
文字列を値として扱うことができます。「"」で囲むだけです。
s = "abra"
t = "cadabra"
と入力すると、変数sとtの値がそれぞれ"abra"、"cadabra"になります。
そのあと
s+t
と入力するとあら不思議。
"abracadabra"と死の呪文が返ってくるのです。
ちなみに「"」をつければ、数字も文字列として扱えます。
文字列の一部を抜き出すこともできます。
t [1..3]とすると
"aba"と返ってきます。
t[0..0]とすると
"c"と返ってきます。
注意しなければいけないのは、
一文字でも「0から0まで」のように書かなければならないこと。
繰り返し
はいはいはいやってまいりましたーーー
同じ操作を何回も繰り返すってことですよ。
これは練習問題やらないと出来るようにならないです頑張れ。
たとえば、「1からkまでの整数の和」を求める関数sum(k)を考えましょう。
1からkまでを繰り返し足すんですね。
def sum(k)
sum = 0 ←和を表す局所関数sum。最初は0。
for i in 1..k ←足す数を示す局所変数i。iは1〜kまで繰り返す
sum = sum + i ←iを足していく
end ←for〜に戻る。繰り返しがkまで終わったら、次の行へ進む。
sum ←最終的なsumを出力
end
もうお分かりですね…
for (変数) in (はじめの数値)..(終わりの数値)
(命令)
end
が繰り返しの方法です。
できましたか?
少し複雑ですが、練習問題で慣れてください。
論理演算
数学で、「命題」だの「真」だの「偽」だのやった覚えがあると思います。
Rubyでは、変数を含む命題をつくることができます。
たとえば、「xは偶数である」という命題を作りましょう。
作り方は関数を定義するのと同じです。
def is_even(x) ←命題名
x%2 == 0 ←「xが偶数」⇔「x÷2の余りが0」
end
これで、入力したxによって、真すなわちtrue、または偽すなわちfalseを返してくれます。
is_even(2)やis_even(8)とすれば、trueと返しますし、
is_even(5)やis_even(143)とすれば、falseと返します。
これをif文の条件式に使うことも出来ます。
たとえば、「nが偶数だったら1足して、奇数だったらそのまま返す」関数を作るとします。
その場合
def examle(n)
if is_even(n)
n+1
else
n
end
end
とすればよいのです。
文字列(なんでここにこれwとか思ったら負け)
文字列を値として扱うことができます。「"」で囲むだけです。
s = "abra"
t = "cadabra"
と入力すると、変数sとtの値がそれぞれ"abra"、"cadabra"になります。
そのあと
s+t
と入力するとあら不思議。
"abracadabra"と死の呪文が返ってくるのです。
ちなみに「"」をつければ、数字も文字列として扱えます。
文字列の一部を抜き出すこともできます。
t [1..3]とすると
"aba"と返ってきます。
t[0..0]とすると
"c"と返ってきます。
注意しなければいけないのは、
一文字でも「0から0まで」のように書かなければならないこと。
繰り返し
はいはいはいやってまいりましたーーー
同じ操作を何回も繰り返すってことですよ。
これは練習問題やらないと出来るようにならないです頑張れ。
たとえば、「1からkまでの整数の和」を求める関数sum(k)を考えましょう。
1からkまでを繰り返し足すんですね。
def sum(k)
sum = 0 ←和を表す局所関数sum。最初は0。
for i in 1..k ←足す数を示す局所変数i。iは1〜kまで繰り返す
sum = sum + i ←iを足していく
end ←for〜に戻る。繰り返しがkまで終わったら、次の行へ進む。
sum ←最終的なsumを出力
end
もうお分かりですね…
for (変数) in (はじめの数値)..(終わりの数値)
(命令)
end
が繰り返しの方法です。
0 件のコメント:
コメントを投稿