• ベストアンサー
  • 困ってます

「C#」言語のトレースについて

  • 質問No.6455667
  • 閲覧数169
  • ありがとう数3
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 90% (56/62)

当方、「C#」言語を勉強しようとしています。

そこで入門関係のサイトをウェブで見付けました。
そのサイトは下記URLになります。

http://www12.plala.or.jp/dokugaku/main/2/7.html

このサイトの「C#の乱数機能」のトレース方法を教えて下さい。
出来れば分かり易く解説して頂けると幸いです。

お手数お掛けしますが、ご存知の方おられましたら、ご教授お願いします。

以上、よろしくお願い致します。

質問者が選んだベストアンサー

  • 回答No.1
  • ベストアンサー

ベストアンサー率 61% (1597/2589)

整数型の配列 me[0]~me[5] を新たに確保
int[] me = new int[6];

変数iの値を0~5まで変化させながら6回ループ
for(int i = 0;i<6;i++)

  me[0]~me[5]の中身をゼロで初期化する
  me[i] = 0;

乱数を生み出すオブジェクトを用意
Random ran = new System.Random();

変数iの値を0~99999まで変化させながら10万回ループ
for(int i = 0;i<100000;i++)
{

  0~5の範囲の整数の乱数を生成し,変数resultに格納
  int result = ran.Next(6);

  「乱数」番目の配列要素,すなわち,me[0]~me[5]のいずれかに1を足す
  me[result]++;
}

変数iの値を0~5まで変化させながら6回ループ
for(int i = 0;i<6;i++)

  各サイコロの目が出た回数の集計結果 me[0]~me[5] を表示する
  Console.WriteLine("{0}: {1} times",i+1 ,me[i]);

最終的な出力例はこんな感じ↓
1: 16671 times
2: 16473 times
3: 16908 times
4: 16614 times
5: 16555 times
6: 16779 times
お礼コメント
wwmomo

お礼率 90% (56/62)

ご回答ありがとうございます。

私が理解に苦しんだのは、「me[result]++」の所でした。
これは「me[0]~me[5]の何れかに1を足す」と言うことなのですね。

更に質問で悪いのですが、何故「me[i]」と「me[result]++」が同じになるのですか。
取得してきた値が「0~5」だから「me[i]」と「me[result]++」が同じになるということですか。

「result」で取得した値が「5」だった場合、「me[result]++」には何が入るのですか。
ここで「++」をしてますよね。この「++」は、どのような意味を持っているのですか。

まだ少し「me[i]」と「me[result]++」の関連性が分かりません。

恐縮ですが、よろしければ教えて下さい。

以上、よろしくお願い致します。
投稿日時:2011/01/18 14:47

その他の回答 (全2件)

  • 回答No.3

ベストアンサー率 61% (1597/2589)

別の話題になるなら,別の質問を新たに立てましょう。

>更に質問で恐縮ですが、
>出来たらで結構なので下記URLのトレース方法を教えて下さい。
>http://www12.plala.or.jp/dokugaku/main/4/4.html
お礼コメント
wwmomo

お礼率 90% (56/62)

ご回答ありがとうございます。

新たに質問させて頂くことにしました。
「C#の乱数機能」については理解が出来ました。

ご丁寧に解説して頂いて、ありがとうございました。

以上、ありがとうございました。
投稿日時:2011/01/19 14:46
  • 回答No.2

ベストアンサー率 61% (1597/2589)

for(int i = 0;i<6;i++)
for(int i = 0;i<100000;i++)
for(int i = 0;i<6;i++)

と3箇所に登場する i++ には疑問をお持ちでないようなのに,
me[result]++ という箇所に対してだけ

>この「++」は、どのような意味を持っているのですか。

と質問なさっているということは,
「値を1つ増やす」という「++」の意味が分からないのではなく,
単独変数の i と配列変数の me[] の違いが分からないということでしょうか。

----------------

>まだ少し「me[i]」と「me[result]++」の関連性が分かりません。

i や result といった変数名は関係なく,その変数の値が 0~5 の範囲の整数に収まっていることに意味があります。

for(int i = 0;i<6;i++)
  me[i] = 0;

と変数 i を 0~5 に変化させてループする意味が分からないならば,変数 i を使わずに次の6行を書いても意味は同じです。

me[0] = 0;
me[1] = 0;
me[2] = 0;
me[3] = 0;
me[4] = 0;
me[5] = 0;

どちらのコーディングをしても,次のような連続した6つの要素から成る配列変数の中身すべてに0が代入されます。

 me[0]  me[1]  me[2]  me[3]  me[4]  me[5]  
+―――+―――+―――+―――+―――+―――+
| 0  | 0  | 0  | 0  | 0  | 0  |
+―――+―――+―――+―――+―――+―――+


>「result」で取得した値が「5」だった場合、
>「me[result]++」には何が入るのですか。

me[5] の値が1つ増え,次のようになります。

 me[0]  me[1]  me[2]  me[3]  me[4]  me[5]  
+―――+―――+―――+―――+―――+―――+
| 0  | 0  | 0  | 0  | 0  | 1  |
+―――+―――+―――+―――+―――+―――+


回答ANo.1の末尾では,10万回ループしながら毎回 0~5 の値を乱数で生成した結果(サイコロを10万回振るという作業をシミュレートした結果),ループのたびに me[0]~me[5] のいずれかの値が1つずつ増え,最終的に配列変数の中身が次のようになったという例を紹介しました。

 me[0]  me[1]  me[2]  me[3]  me[4]  me[5]  
+―――+―――+―――+―――+―――+―――+
| 16671| 16473| 16908| 16614| 16555| 16779|
+―――+―――+―――+―――+―――+―――+
お礼コメント
wwmomo

お礼率 90% (56/62)

ご回答ありがとうございます。

返事をした後に再び考えてみたら、分かりました。
「int[] me = new int[6];」で「me[]」を「0~5」に設定しているのが鍵なんですね。
「me[result]++」が実行された場合に「result」の番地の値が増えることが分かりました。

更に質問で恐縮ですが、出来たらで結構なので下記URLのトレース方法を教えて下さい。
文章を読んだだけでは分からないので、分かり易く解説して頂けると幸いです。
http://www12.plala.or.jp/dokugaku/main/4/4.html

お手数お掛けしますが、よろしくお願いします。

以上、よろしくお願い致します。
投稿日時:2011/01/18 22:22
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ