• ベストアンサー

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

当方、「C#」言語を勉強しようとしています。 そこで入門関係のサイトをウェブで見付けました。 そのサイトは下記URLになります。 http://www12.plala.or.jp/dokugaku/main/2/7.html このサイトの「C#の乱数機能」のトレース方法を教えて下さい。 出来れば分かり易く解説して頂けると幸いです。 お手数お掛けしますが、ご存知の方おられましたら、ご教授お願いします。 以上、よろしくお願い致します。

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

  • ベストアンサー
  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.1

整数型の配列 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
質問者

お礼

ご回答ありがとうございます。 私が理解に苦しんだのは、「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]++」の関連性が分かりません。 恐縮ですが、よろしければ教えて下さい。 以上、よろしくお願い致します。

その他の回答 (2)

  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.3

別の話題になるなら,別の質問を新たに立てましょう。 >更に質問で恐縮ですが、 >出来たらで結構なので下記URLのトレース方法を教えて下さい。 >http://www12.plala.or.jp/dokugaku/main/4/4.html

wwmomo
質問者

お礼

ご回答ありがとうございます。 新たに質問させて頂くことにしました。 「C#の乱数機能」については理解が出来ました。 ご丁寧に解説して頂いて、ありがとうございました。 以上、ありがとうございました。

  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.2

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
質問者

お礼

ご回答ありがとうございます。 返事をした後に再び考えてみたら、分かりました。 「int[] me = new int[6];」で「me[]」を「0~5」に設定しているのが鍵なんですね。 「me[result]++」が実行された場合に「result」の番地の値が増えることが分かりました。 更に質問で恐縮ですが、出来たらで結構なので下記URLのトレース方法を教えて下さい。 文章を読んだだけでは分からないので、分かり易く解説して頂けると幸いです。 http://www12.plala.or.jp/dokugaku/main/4/4.html お手数お掛けしますが、よろしくお願いします。 以上、よろしくお願い致します。

関連するQ&A

  • 「C#」言語のトレースについて…その(2)

    当方、「C#」言語を勉強しようとしています。 そこで入門関係のサイトをウェブで見付けました。 そのサイトは下記URLになります。 http://www12.plala.or.jp/dokugaku/main/4/4.html このサイトの「XorEncoderのベースソース」のトレース方法を教えて下さい。 文章を読んだだけでは理解することが出来ませんでした。 出来れば分かり易く解説して頂けると幸いです。 お手数お掛けしますが、ご存知の方おられましたら、ご教授お願いします。 以上、よろしくお願い致します。

  • 「C#」言語のトレースについて…その(3)

    当方、「C#」言語を勉強しようとしています。 そこで入門関係のサイトをウェブで見付けました。 そのサイトは下記URLになります。 http://www12.plala.or.jp/dokugaku/main/iterator.html このサイトの「画期的なイテレータ!!」のトレース方法を教えて下さい。 文章を読んだだけでは理解することが出来ませんでした。 出来れば分かり易く解説して頂けると幸いです。 お手数お掛けしますが、ご存知の方おられましたら、ご教授お願いします。 以上、よろしくお願い致します。

  • C言語について大変初歩的なことなのですが…

    先日C言語でのプログラミングを勉強し始めようと思いたち、 「世界一わかりやすいCプログラミングの授業」という本を買ったのですが、 書いてあった、 #include <stdio.h> main() { printf("hello,world\n"); } というプログラムを作ったのですが、エラーが起きました。 そこで「C言語入門」と検索し調べたサイトでは、 mainの前にintと入っていたのでそうしてみたところエラーがおきませんでした。 本が間違っているとは思えないのですが、これはどういう事でしょうか、教えてください。 まだなんの知識もないのでお手数ですがそこを考慮していただくとありがたいです。 

  • C言語について。

    C言語プログラマとしては、スタートアップコードは・・・ ・自分が書いたプログラムを、直接動かすために必要なライブラリ ・それはコンパイル後、リンカによって追加されるライブラリこれは、 どういう意味でしょうか?分かりやすく教えていただけると幸いです。すみません。で、 以下のかぶくんまんさんの回答です。 https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11247611941 で、 C言語におけるプログラミングとは「main関数を書くこと」に他ならない。なぜ「main関数を書く」ことがC言語におけるプログラミングに他ならないのかと言えば、それは偏に「C言語のコンパイラはmain関数を呼び出すプログラムを生成するから」です。それがmain関数を求めるので結果的にmain関数がリンクされ、そしてmain関数が求めるままに他の関数もリンクされていくわけです。 で、その「main関数を呼び出すプログラム」こそが、C言語における「スタートアップコード」。 という回答で、main関数以降は、プログラマが書くのですよね?プログラマが関数をリンクさせる様なプログラムを書くということでしょうか?教えていただけると幸いです。すみません。 という所が分かりません。教えていただけると幸いです。すみません。以下のURL https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12247932542

  • C言語をおぼえたい!

    C言語を学びたいと思っているんですが超初心者でもわかるような解説や説明が書いてあるサイト知りませんか?知ってたら教えて下さい ちなみにこれを学んでゲームなんかを作ろうと思っています現時点では C言語について全くわかってないので1から学びたいです

  • c言語 マクロの資料について

    c言語 マクロの資料について 現在、私は、c言語を勉強している処ですが、マクロがなかなか理解できないので困っているところです、マクロの説明しているwebサイトのURLを教えて頂きた。よろしくお願いします。

  • C言語の&に関する質問

    C言語で if (x == 0.0) (いろいろな計算) return x < 0.0 && (n & 1) ? -ans : ans; というプログラムがあるのですが、 最後のreturnのところで x がゼロ以下で且つ、n &1の場合には -ansを返し、そうでない場合にはansを返すとあるのですが、 n&1というのはどういう意味なのでしょうか? C言語で&と言えば、 http://www9.plala.or.jp/sgwr-t/c/sec14.html のページにあるように、ビットごとの AND演算子ですが、 この場合にはどういう意味で使われているのでしょうか?

  • C言語を学ぶ上での一番良いサイト

    最近、C言語を学び始めたのですが、 C言語について解説してあるサイトが多すぎて、 どれが一番よいのかわかりません。 制御文ぐらいまで習いましたが、 私が気に入ってたサイトではそこまでしか書かれていませんでした。 どこか、C言語について解説しているところで、わかりやすいサイトを教えてください。

  • C言語 キーワードとは??

    プログラミング初心者です。 初歩的な質問ですがよろしくお願いいたします。 現在C言語入門書を読んでいるのですが、「キーワード」と言うのが理解出来ません。 また当該入門書ではキーワードについて 「キーワードとは C 言語が仕様レベルで予約済みの名前のことで、前回のプログラムで紹介した return などはキーワードに属します。」と記載されていいますが理解出来ません。 初心者ですので、例え話なども用い解説してくれれば幸いです。 よろしくお願いいたします。

  • c言語を始めたい

    c言語を覚えてみたいと思っているのですが、フリーソフトでそろられるものを教えて下さい(いろいろあってどれがいいのかわかりません)。あと文法の一覧や解説が乗っているサイトも教えていただければ嬉しいです。

専門家に質問してみよう