『情報科学入門 Rubyを使って学ぶ』の練習問題の解答例の他、授業スライドの練習問題の解答例や、プログラミングのポイント等を掲載します。他クラスの方の利用歓迎。改良・訂正箇所ありましたらご指摘ください。

2010/11/10

[ス]練習問題(第三章)

授業スライド「03条件分岐」の練習問題の解答例です。


  • 2次方程式ax^2+bx+c=0の実数解の個数を求めるsolutions(a,b,c). 判別式の値だけでなく、1次方程式になっている場合にも対応せよ。(solutions.rbというファイルを作ろう。)
def  det(a,b,c)   ←補助関数として、判別式Dを定義
  b**2-4*a*c
end
def  solutions(a,b,c)
  if  a==0 || det(a,b,c)==0  ←"||"は「または」
    1
  else
    if  det(a,b,c)>0
      2
    else
      0
    end
  end
end


  • 3つの異なる値x,y,zが与えられたときの中央値を求めるmedian(x,y,z). 中央値とは大きさ順に並べたときに真ん中に来る値のことである。(median.rbというファイルを作ろう)
2通り示します。
1)補助関数を使う
def  max(x,y)    ←二つの大きいほうを出す
  if x>y
    x
  else
    y
  end
end
def  min(x,y)     ←二つの小さいほうを出す
  if  x>y
    y
  else
    x
  end
end
def  median(x,y,z)  ←やっと本題
  if  max(x,y)<z
    max(x,y)
  else
    if  min(x,y)>z
      min(x,y)
    else
      z
    end
  end
end


2)条件式をがんばる
def  median(x,y)
  if  (y<x && x<z) || (z<x && x<y)   ←"&&"は「かつ」
    x
  else
    if  (x<y && y<z) || (z<y && y<x)
      y
    else
      z
    end
  end
end


  • 大きさnで中身が全て0であるような1次元配列を作る関数make1d(n)を定義せよ。
def  make1d(n)
  a=Array.new(n)  ←これで長さnの数列が出来る
  for  i  in 0..(n-1)
    a[i]=0
  end
end


  • h行w列の配列を作るmake2d(h,w)を定義せよ。ただし、作られる配列の中身は全て0にせよ。
load("./make1d.rb")  ←make1d(n)を定義してあるファイル
def  make2d(h,w)
  a=Array.new(h)
  for  i  in 0..h-1
    a[i]=make1d(w)
  end
end


  • 次の計算をする関数b(r,x,y)を定義せよ。(x,y)だけでなくrも因数となっていることに注意せよ。
      b(x,y) =  {r-d(x,y)}/r (d(x,y)≦r)  (d(x,y)は、原点と点(x,y)の距離)
             1     (d(x,y)>r)


ちょっと保留。つながりを考えると、d(x,y)の因数がxとyだけじゃダメな気がします。
まあ、[教]練習問題(第三章)の練習3.2見てください。
言ってることがわかると思います。
  • show(sphere(20))を実行して表示される画像を確かめよ。
保留

0 件のコメント:

コメントを投稿