Mr.Tの場所

特攻野郎Aチームじゃないよー

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  253  : 記事  0  : コメント  3733  : トラックバック  52

ニュース

  • 性別:男
  • 猫1:まる
  • 猫2:もろ
  • 猫3:にゃん左部郎
  • タバコ:男は黙ってJPS
[わんくま同盟] C#, VB.NET 掲示板

書庫

日記カテゴリ

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と書いて

日にち = 1
While (登った距離 <= 10)
   日にち = 日にち + 1  (1)

登った距離 = 登った距離 + 3

if 登った距離>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 

一応、プログラムの本当の初心者に対して、とか考えてみたエントリなんですが、やっぱりアルゴリズムを勉強させる方法ってのは
なかなかないですねぇ。

投稿日時 : 2007年11月14日 15:35

コメント

# re: アルゴリズム(3) 2007/11/14 16:07 凪瀬
このあたりは座学の勉強では身に付かないところで
実際に手を動かしてなんぼというところですからね…

# re: アルゴリズム(3) 2007/11/15 19:58 Piz&Yumina
高校の数学の教科書を調べてみました。

数Bの教科書の第5章「数値計算とコンピュータ」第2節「いろいろなアルゴリズム」に幾つかアルゴリズムが載っていました。
・約数
・素数の判定
・素因数分解
・ユークリッドの互助法
・循環小数
・記数法の変換
・二分法
・ニュートン法
・台形公式
・モンテカルロ法

プログラムの本当の初心者には無理ですねw
GOTO文を多用したBASICプログラムを見ているとC#で書き直したくなってくる・・・

Post Feedback

タイトル
名前
Url:
コメント