Mr.Tです、こんにちは。
前回の続アルゴリズムの続きです。
前回は、ここまででした。
While (登った距離 <= 10)
日にち = 日にち + 1
(ループの中)
End While
これに、登った距離が+3mであることを追記していきます。
While (登った距離 <=
10)
日にち = 日にち +
1 登った距離 = 登った距離 +
3 (ループの中)
End While
更に、登った距離が10mを超えたかどうかを判断します。
ループの条件でも判断していますが、これはあくまでも、ループの処理を続けるためのもので
あることに注意してください。
ここがアルゴリズムと、実際のソースとの断絶のうちの一つです。
このループ処理は、あくまでも同じ処理を続けるためのものでしかなく、
それゆえ、
While (登った距離 <= 10)
End While
というループ条件でなくてもよいのです。
例えば、
Do
Loop
として、無限ループにしておいて、ループ内で条件一致のときに処理をループを抜けるとしてもなんら問題ありません。
しかし、登った距離が10m以下であれば処理が続くという条件を無視する必要もないですので、あえてここではこの
条件を使っています。
While (登った距離 <= 10)
日にち = 日にち + 1
登った距離 = 登った距離 + 3
if 登った距離>10 then
console.writeline("答えは、{0}日です",日にち.toString)
exit while
end if
(ループの中)
End While
最後に、こえてなければ、2mずり落ちます。
While (登った距離 <= 10)
日にち = 日にち + 1
登った距離 = 登った距離 + 3
if 登った距離>10 then
console.writeline("答えは、{0}日です",日にち.toString)
exit while
end if
登った距離 = 登った距離 -2
End While
で、大切な初期条件。
日にちは、いつから始まるのか?
登った距離は、どこからはじまるのか?
日にちは、初期条件から1日目から始まると、あります。
ところが、ソレに習って日にち=1と書いて
日にち =
1While (登った距離 <=
10)
日にち = 日にち +
1 (1)
登った距離 = 登った距離 +
3if 登った距離>
10 then
console.writeline(
"答えは、{0}日です",日にち.toString)
exit while
end if
登った距離 = 登った距離 -
2 (3)
End While こうやっちゃうと正しい答えが出てきません。
そもそも、(1)では最初、日にち=1とならなければいけないからです。
なぜ、こうなったのかといえば、日にちがカウントされるのは、一番最初の日だけ条件が違うからに他なりません。
日にちが+1になるのに、毛虫が登って落ちてからであるのに、最初の日だけは、登って落ちなくてもすでに1であるためです。
これは、日にち =1,2,3,...という処理を日にち=日にち+1としてしまったから、と言い換えても同じです。
日にち=1では、2,3,4,...となってしまいます。
そのため日にち=0と与えてやらなくてはなりません。
もし、仮に日にち=1と初期値をあたえるのであれば、(1)の式は、(3)に移しておかないといけません。
しかし、その場合、元々考えていた処理の流れではなくなってしまいます。
アルゴリズムを実装する場合は、条件が変わってしまうケースがあります。
ここがアルゴリズムと、実際のソースとの断絶のもう一つです。
正しいソースは以下の通りです。
日にち = 0
登った距離 = 0
While (登った距離 <= 10)
日にち = 日にち + 1
登った距離 = 登った距離 + 3
if 登った距離>10 then
console.writeline("答えは、{0}日です",日にち.toString)
exit while
end if
登った距離 = 登った距離 -2
End While
一応、プログラムの本当の初心者に対して、とか考えてみたエントリなんですが、やっぱりアルゴリズムを勉強させる方法ってのは
なかなかないですねぇ。