情報科学概論(再履修)
再履修クラス 宿題 2004.12.17

Back


宿題においても, 解答用紙 を使用する.この書式で解答を提出すること.

設問

これまでに2度行った経路と距離の問題を,今回は while ループを使っ たものに変更する.以下の経路をサイコロを振って進むとき,出た目の数だけ進 む(単位m)とすると,ゴールに到達するまでの各回のサイコロの目,スタート地点からの 経路上の累積距離,スタート地点から現在値までの直線距離を表示するスクリプトを 作成せよ.なお,ゴールに到達した時点でサイコロの目がまだ余っていても無視 するものとする.すなわち,例えばゴールまで3mのところにいるときには,3以上の目 はすべて上がりとする.

図1 経路図


解答例

include Math

d = 0

while d < 58
  dice = rand(6) + 1
  d += dice
  
  case d
  when 0..2
    r = d
  when 2..4
    r = sqrt(2*2 + (d-2)*(d-2))
  when 4..8
    r = sqrt(2*2 + (6-d)*(6-d))
  when 8..12
    r = sqrt(2*2 + (10-d)*(10-d))
  when 12..18
    r = sqrt(2*2 + (14-d)*(14-d))
  when 18..24
    r = sqrt(4*4 + (20-d)*(20-d))
  when 24..32
    r = sqrt(4*4 + (28-d)*(28-d))
  when 32..40
    r = sqrt(4*4 + (36-d)*(36-d))
  when 40..50
    r = sqrt(4*4 + (44-d)*(44-d))
  when 50..58
    r = sqrt(6*6 + (54-d)*(54-d))
  else
    d = 58
    r = sqrt(6*6 + 4*4)
  end

  printf "サイコロの目: %2d\n", dice
  printf "進んだ距離:   %2d\n", d
  printf "直線距離:%7.2f\n\n", r
end


Back