プロが教えるわが家の防犯対策術!

なんどもすいません。配列のはなしなんですが、まずAという配列の中の0~10番目の中身をランダムに動かして、Bという配列に再編成させたいのですが、
乱数を使えば簡単になるよと知り合いにはいわれたのですが、乱数がどうゆうもの
だかあまりよくわかりません。
自分は今VC++のMFCで作ってるのですが、乱数自体がわからないので教えてください。
それとこの方法でいくと日本語の時は配列を2個づつランダムに変えることになると思うのですが、それはぜんぜん予想もできません。教えていただけると助かります。お願いします。

A 回答 (4件)

乱数というのは簡単に言うとでたらめな数なんですが、実際にはちゃんと計算したりしないとうまくでたらめになってくれません(計算だけでなくハードウェアの状態を拾ったりしてそれを含めて計算しているのもあります)。

で、C言語だと rand() という関数があります。それと乱数計算の種になる値を与えるための srand() という関数があります。(コンパイラ付属のライブラリはこれだけではないと思います。調べてみてください)。

で、要するに rand() 関数は呼ぶたびに違う値を返してくるんです。ライブラリによっても違うかも知れませんがたとえば 0 から 0x7fff の間の値を返してくるようになっていて、その値を利用して 0 から 9 までの範囲にする場合こんな計算をしたりします。

int n = rand() * 10 / 0x8000;

意味わかりますよね? rand()が 0 ~ 0x7fff の内の何れかを返すのであれば上記の計算結果は 0 ~ 9 になります。

この回答への補足

返事ありがとうございました。内容は半分ぐらいは理解できましたがわからないとこもあるので聞こうとおもいます。
まず、配列での話となるんですが、この書いてもらったやり方で0~9
までの数字をfor文で回して、ひとつづつ新しい配列に添え字を入れていくと
すると、呼ぶたびに違う値といってましたが同じ数字が来りはしないのでしょうか?

補足日時:2002/02/10 02:33
    • good
    • 0

乱数というのは0以上1未満で、コンピュータがランダムにはじきだす数値です。


この乱数に特定の数字(例:100)をかけると、
0以上100未満のばらばら不規則な数字を出すことができます。

例えば、ロトくじやナンバーズ予想、パチンコの当り確率などに応用します。
    • good
    • 0

>乱数


規則性のない数列のことです。
現在のコンピュータで「規則性のない数列」を作ることは出来ないので、非常に規則性の少ない(周期の長い)数列を作る方法を用いて、「疑似乱数」と呼ばれる物を利用していますが、通常、それをも含めて乱数と言います。

Cであれば、stdlib.h に含まれる rand 関数などを利用します。

配列の並べ替え等々については過去に質問があると思うので検索してみてください。
    • good
    • 0

皆さん、お答えが難しすぎるみたいですね。


「乱数」と言うのは、「サイコロ」を振ると言うのと同じです。
例えば、既に回答の出ている rand関数を実行するとコンピュータがサイコロを振ってその答えを返してくれます。

rand関数の答えは(言語によって違いますが)ここでは0<=n<1と言う事にしておきましょう。

小数点以下10桁で近似すると0.0000000000~0.9999999999と言う事になります。

ここで1~50の乱数が欲しいとします。
このときは INT(乱数*50)+1とすれば(0~49)+1で目的が達成されます。INTは切り捨て(正のときのみ)

> すると、呼ぶたびに違う値といってましたが同じ数字が来りはしないのでしょうか?

「サイコロ」ですから同じ数字も来てしまいます。これを防ぐ方法(テクニック)は有ります。3日前の質問の回答を見てください。(下記URL)

同じ悩みを持つ人は多いのです。

参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=213544
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!