C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: C#のアルゴリズムについて。


(過去ログ 130 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■76792 / inTopicNo.1)  C#のアルゴリズムについて。
  
□投稿者/ EDF (4回)-(2015/08/18(Tue) 11:18:56)

分類:[C#] 

using System;

class CrazyBot
{
double[] prob = new double[4];
bool[,] grid = new bool[100,100];
int[] mx = new int[4]{1,-1,0,0};
int[] my = new int[4] {0,0,1,-1};


public double getprobability(int n, int west,int east,
int north, int south)
{

prob[0] = east / 100;
prob[1] = west / 100;
prob[2] = north / 100;
prob[3] = south / 100;

return dfs(50, 50, n);
}

public double dfs(int x, int y, int n)
{

if (n == 0) return 1;
if (grid[x, y]) return 0;

double ret = 0;
grid[x, y] = true;

for (int i = 0; i < 4; i++)
{
ret += dfs(x + mx[i], y + my[i], n - 1) * prob[i];


}
grid[x, y] = false;

return ret;
}
}

class DO
{
public static void Main()
{
CrazyBot cb = new CrazyBot();
Console.WriteLine("" + cb.getprobability(10, 25, 25, 25, 25));
}
}
上のようなコードをかいて試しに値を代入してみたのですが結果が0になってしまいます。
何故そうなるのか教えてください
引用返信 編集キー/
■76795 / inTopicNo.2)  Re[1]: C#のアルゴリズムについて。
□投稿者/ King (2回)-(2015/08/18(Tue) 11:40:04)
デバッグしたらわかると思うけど、
整数と整数の除算の結果が整数になるからじゃないですか。

他に言いたいことは山ほどあるけど。
引用返信 編集キー/
■76796 / inTopicNo.3)  Re[1]: C#のアルゴリズムについて。
□投稿者/ 魔界の仮面弁士 (448回)-(2015/08/18(Tue) 11:47:55)
2015/08/18(Tue) 11:50:13 編集(投稿者)

No76792 (EDF さん) に返信
ソースコードを貼る場合は「図表モード」で投稿して下さい。
そうすればインデントが崩れずに済みます。

それと
 全角の「C#」 (U+FF23, U+FF03)
ではなく
 半角の「C#」 (U+0043, U+0023)
が正式名称です。


――という突っ込みはさておき:


> prob[0] = east / 100;

この時、east は int 型の 25 ですよね。
そして 100 もまた、int 型であることに注意しましょう。
「0.25」なのか、「0 (と余り 25)」なのかという演算の違いです。

C# においては、double 型の割り算なら、結果は double ですが、
int 型同士の割り算は、結果もまた int で得られる仕様です。


> 何故そうなるのか教えてください
対策としては、
 prob[0] = east / 100.0;
あるいは
 prob[0] = east / 100D;
と書くことです。もしくは、east 側を小数型にするという手もありますね。
引用返信 編集キー/
■76797 / inTopicNo.4)  Re[2]: C#のアルゴリズムについて。
□投稿者/ EDF (7回)-(2015/08/18(Tue) 13:01:35)
No76796 (魔界の仮面弁士 さん) に返信
> 2015/08/18(Tue) 11:50:13 編集(投稿者)
>
ソースコード以外にも至らぬ点をご指摘ありがとうございます。
C#は意識したことなかったです笑。

言われれば確かにそうですね。中々自分では気づけそうになかったので聞いてよかったです。
型さえ合わせれば演算結果も正しくでると思ってました・・・
非常に初歩的で大切なことを教えてくださってありがとうございます。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -