第3章の練習,投票
条件分岐 - 場合分けを使った計算
ファイル max.rb
def max(x,y)
if y < x
x
else
y
end
end
3通りの場合分け
ファイル sign.rb (配布プログラムでは sgn.rb になっている)
def sign(x)
if x < 0
-1
else
if 0 < x
1 # not(x < 0) and 0 < x
else
0 # not(x < 0) and not (0 < x)
end
end
end
どれが正しいか?
xの値が7、yの値が5、zの値が3であるとして
- x < y
- x <= y
- y != z
- z > x
- z == x
どれが正しいか?
xの値が7、yの値が5、zの値が3であるとして
- x < y
- x <= y
- x < y && y != z
- x <= y || y == z
- !(y == z)
次の結果は何?
ファイル is_even.rb
def is_even(x)
x%2 == 0
end
ファイル tnpo.rb
def tnpo(n)
if is_even(n)
n/2
else
3*n + 1
end
end
irb(main):001:0> tnpo(tnpo(tnpo(7)))
- 1
- 4
- 7
- 11
- 34
文字列
s="abra"
t="cadabra"
u=s+t
"123"+"456"
s.length()
(s+t).length()
s[0..0]
s[1..2]
t[1..(t.length()-1)]
次の結果は何?
irb(main):001:0> s="abra"
=> "abra"
irb(main):002:0> t = "cadabra"
=> "cadabra"
irb(main):003:0> t[1..3]+s[1..2]
- 5
- "ab"
- "adabr"
- "adabbra"
- "cadabraabra"
与えられた大きさの配列を作る
load("./make1d.rb")
make1d(10)
load("./make2d.rb")
make2d(4,2)
繰り返しの例
def squares (n)
a=make1d(n)
for i in 0..(n-1)
a[i] = i * i
end
a
end
load("./make1d.rb")
squares(10)
繰り返しの例(ドイツ国旗)
ファイル名: german.rb(新規作成)
def german()
image = make2d(3, 5)
for x in (0..4)
image[0][x]=[0,0,0] # black
image[1][x]=[1,0,0] # red
image[2][x]=[1,1,0] # yellow
end
image
end
load("./make2d.rb")
show(german())
2重の繰り返し
ファイル名: sphere.rb
load("./make2d.rb")
def sphere(s)
image = make2d(s,s)
for y in 0..(s-1)
for x in 0..(s-1)
image[y][x] = b(s,x,y)
end
end
image
end
練習
- 教科書の式(3.2)
\[ b(s, x, y) =
\begin{cases}
\frac{r - distance(x,y,r,r)}{r} & distance(x,y,r,r) \le r \\
1 & distance(x,y,r,r) > r \\
\end{cases}\\
(ただし,r = \frac{s}{2})
\]
の計算をする関数 b(s,x,y) を定義せよ.配布プログラム中のファイル sphere.rb に加えること.(x, y) だけでなく s も引数となっていることに注意せよ)。
load("./distance.rb")
def b(s,x,y)
# ここにbの定義を書く
end
練習
show(sphere(20)) を実行して表示される画像を確めよ。なお,下の絵は show(sphere(100)) で作成したもの.
進捗状況の確認
- show(sphere(20))がうまく行った時点で投票してください.
- sphereを定義したが,show(sphere(20))がうまく行かない
- bまでできた
- distanceまでできた
- まだ
練習
- 2 次方程式\(ax^2 + bx + c = 0\) の解の個数を求めるsolutions(a,b,c). 判別式
\(b^2-4ac\)
の値だけでなく、1 次方程式になっている場合にも対応せよ。aもbも0である入力は考えなくて良い.[ファイル名: quadratic.rb(新規作成)]
- 3 つの異なる値x, y, z が与えられたときの中央値を求めるmedian(x,y,z). 中央値とは大きさ順に並べたときに真ん中に来る値のことである。同じ値が入力中に2回以上現れることは考えなくて良い.[ファイル名: median.rb(新規作成)]
進捗状況の確認
- 両方できた。
- solutionsだけ。
- medianだけ。
- まだ何もできていない。