教科書「第一章・数の計算と関数」の練習問題の解答例です。
練習1.1 (数式の計算)
a) 56+97+33 結果:186
b) 47-38 結果:9
c) 35*22 結果:770
d) 34/15 結果:2
e) 34%15 結果:4
f) 34.0/15または 34/15.0 結果:2.26666666666667
g) 56**16 結果:9354238358105289311446368246
h) 56*56*56*56*56*56*56*56*56*56*56*56*56*56*56*56
結果:9354238358105289311446368246
i) 104/1.88**2 結果:29.4250792213671
練習1.2 (関数の定義)
a) def distance(x,y,u,v)
sqrt((x-u)**2+(y-v)**2)
end
b) def feet_to_cm(f,i)
(f+i/12.0)*30.48
end
c) def pound_to_kg(p,o)
(p+0/16.0)*0.4536
end
練習1.3 (ファイルからの呼込み)
練習1.2のa)をEmacsやテキストエディタに入力してdistance.rbとして、
同じくb)とc)をyardpound.rbとして保存する。んでターミナルでloadしてごらんって話。
load("./distance.rb")でdistance.rbが読み込める。
練習1.4 (もっと数式の計算)
a) 男 62.5/(171.5/100)**2 結果:21.2496493807852
女 53.0/(159.0/100)**2 結果:20.9643605870021
b) 9/5.0*22+32 結果:(華氏)71.6(度)
c) (50-32)*5/9.0 結果:(セ氏)10.0(度)
d) 535800/93.91 結果:5705.4626770312(米ドル)
e) 12900*93.91 結果:1211439.0(円)
f) 11/6.825*93.91 結果:151.356776556777(円)
g) 175*1609.0/60**2 結果:78.2152777777778(m/s)
h) 5459356 * (1+1.40/100)**10 / 1.27
結果:4939889.612497(円)
練習1.5 (数学関数) include(Math)の入力を忘れずに
a) sqrt(10) 結果:3.16227766016838
sqrt(2)*sqrt(5) 結果:3.16227766016838
sqrt(sqrt(5)) 結果:1.49534878122122
2**(1.0/12) 結果:1.0594630943593
b) sin30゜ sin(3.141592/6) 結果:0.499999905662436
cos30゜ cos(3.141592/6) 結果:0.86602545825025
tan30゜ tan(3.141592/6) 結果:0.577350123947459
c) log1000 log(1000) 結果:6.90775527898214
log100100 log(100)/log(100) 結果:1.0
log21000 log(1000)/log(2) 結果:9.96578428466209
d) 2.7*2.7*2.7*2.7*2.7*2.7*2.7*2.7*2.7*2.7
結果:20589.1132094649
e) -log(2)/log(1-0.0000320362394891)/60**2
結果:6.00999999999806(時間)
練習1.6 (変数の利用)
a) w / (h/100.0)**2
b) 9/5.0*c+32
c) (f-32)*5/9.0
d) y/93.91
e) d*93.91
f) g/6.825*93.91
g) v*1609.0/60**2
h) d * (1+r/100.0)**y / p
練習1.7 (代入)
a) x=10
y=x*(x-3)
z=y*(y-3)
z*(z-3) 結果:21982030 変数を使わず展開したら→大変だね!
b) (a) a=3
b=5
c=-7
(b) d=b**2-4*a*c
(c) p=(-b+sqrt(d))/(2.0*a)
q=(-b-sqrt(d))/(2.0*a)
(d) a*p**2+b*p+c 結果:0.0 ←どう考えてもゼロなのに、私ならなかったんだが
a*q**2+b*q+c 結果:0.0
練習1.8 (代入の右辺の式)
練習1.6の関数bmi(height,weight)を定義したのちに、
bmi((5+9.4/12)*30.48,194.7*0.4536) 結果:28.4218683362331
bmi((5+4/12.0)*30.48,164.7*0.4536) 結果:28.2708758776893
練習1.9 (もっと関数の定義)
a) def celsius_to_fahrenheit(c)
9/5.0*c+32
end
b) def fahrenheit_to_celsius(f)
(f-32)*5/9.0
end
c) def ms_to_mph(v)
v*60**2/1609.0
end
d) def mph_to_ms(v)
v*1609.0/60**2
end
e) def wind_chill_index(t,v)
35.74 + 0.6215*t – 35.75 * v**0.16 + 0.4275 * t * v**0.16
end
wind_chill_index(20,20) 結果:(華氏)4.24278159982046(度)
f) yardpound.rbに関数celsius_to_fahrenheit(c)、fahrenheit_to_celsius(f)、
ms_to_mph(v)が定義されているとする。
また、すでに関数wind_chill_index(t,v)が定義されているとする。
load(“./yardpound.rb”)
def wind_chill_index_celsius(t,v)
fahrenheit_to_celsius(
wind_chill_index(celsius_to_fahrenheit(t),ms_to_mph(v)))
end
g) (a) def det(a,b,c)
b**2-4*a*c
end
(b) def solution1(a,b,c)
(-b+sqrt(det(a,b,c)))/(2.0*a)
end
(c) def solution2(a,b,c)
(-b-sqrt(det(a,b,c)))/(2.0*a)
end
(d) def quadratic(a,b,c,x)
a*x**2+b*x+c
end
練習1.10 (ヤード・ポンド法BMIの完成)
略
練習1.11 (局所変数の有効範囲)
実行してみるとわかるが、関数定義の中と外で使われている変数sは独立している。
つまり、局所変数の有効範囲は、関数定義の中に限られている。
練習1.12 (局所変数と補助関数)
def s(a,b,c)
0.5*(a+b+c)
end
def heron_nlv(a,b,c)
sqrt(s(a,b,c)*(s(a,b,c)-a)*(s(a,b,c)-b)*(s(a,b,c)-c))
end
要は、局所変数の変わりに補助関数を使いましょうってコト。
練習1.13 (わざと間違ってみる)
略
0 件のコメント:
コメントを投稿