step を用いてカウントダウンを作ってもよい。rocket-step.rb を作って試そう。今回は音も鳴らしてみよう。
#!/usr/koeki/bin/ruby
10.step(1, -1) do |sec|
if sec <= 3
printf("%c", 0x7) # Ctrl-g (ベル)のコードは7
end
printf("%d秒前\n
", sec)
sleep(1)
end
puts "-" * 79 # 文字列に掛算 * を使うとその回数繰り返す
# ここでは - で点線を作った
system "banner 'LAUNCHED!'"
system は、kterm で入力するコマンドをプログラムの中に使いたいときに便利である。 整数の場合には問題がないが、少数でループを作る場合には注意が必要である。
#!/usr/koeki/bin/ruby printf("5 秒砂時計\n
") c = 50 while c != 0 printf("%f\n
", c/10.0) c -= 1 sleep(0.1) end system "banner 'TIME UP!'"
のように、少数計算の誤差を避けるために、 わざと整数を割り算して作る必要がある。 計算機の少数の誤差は 2 進法で 10 進法を計算していることに起因し、 0.1 を 10 回引いても厳密に 0 にならない; 1/3 を少数で表示すると 0.33333.. で、これを 3 倍しても 1 にならないのと似た情況である。
Madoka Nishimura <madoka@e.koeki-u.ac.jp>